Pomelo的master服務器高可用(以LordOfPomelo爲例)
使用master高可用的方法和步驟
1. 啓動和配置zookeeper相關服務
$ zkServer.sh start
- 在
lordofpomelo/game-server
目錄下執行./scripts/createZKMasterhaNode.js
或者./scripts/createZKMasterhaNode.js /pomelo/master
都會在zookeeper中創建/pomelo/master
znode. 可以使用$ zkCli.sh
和[zk: localhost:2181(CONNECTED) 1] ls /pomelo/master
來查看.
2. lordofpomelo相關配置
-
在
lordofpomelo/game-server
目錄下執行npm install pomelo-masterha-plugin
安裝master高可用
插件. -
創建文件
lordofpomelo/game-server/config/masterha.json
, 文件內容爲:
{
"masterha":[
{"id": "master-server-1", "host": "127.0.0.1", "port":3006},
{"id": "master-server-1", "host": "127.0.0.1", "port":3007}
]
}
注: 如果是在分佈式部署的環境下使用master高可用
, 則上面的host
應填寫相應機器的IP地址, 如: pomelo16.server.163.org
, 注意: 這時不要填寫127.0.0.1
或者localhost
.
- 在文件
lordofpomelo/game-server/app.js
中添加master高可用
相關代碼:
...
var masterhaPlugin = require('pomelo-masterha-plugin');
...
// master high availability
app.use(masterhaPlugin, {
zookeeper: {
server: '127.0.0.1:2181',
path: '/pomelo/master'
}
});
...
注: 如果是在分佈式部署的環境下使用master高可用
, 則上面的server
應填寫zookeeper服務
所在機器的IP地址和端口, 如: pomelo17.server.163.org:2181
, 注意: 這時不要填寫127.0.0.1:2181
或者localhost:2181
.
至此, 相關配置就完成了.
3. 啓動master高可用服務
- 在目錄
lordofpomelo/game-server
下執行pomelo start -e production
啓動game-server
服務器集羣; 在目錄lordofpomelo/game-server
下執行./scripts/startMasterhaNode.sh
啓動master高可用
熱備節點. 可以使用$ zkCli.sh
和[zk: localhost:2181(CONNECTED) 2] ls /pomelo/master/lock
來查看, 當前應有的3個master節點. 在目錄lordofpomelo/web-server
下執行node app.js
啓動web-server
, 這時應可以正常登錄並進行遊戲.
注: ./scripts/startMasterhaNode.sh
文件的內容如下:
#!/usr/bin/env bash
pomelo masterha /config/masterha.json
該文件一定要在目錄lordofpomelo/game-server
下執行.
4. 檢驗master高可用服務
-
使用
$ pomelo-cli
和monitor@pomelo : all>show servers
來查看master
服務器狀態, 可以看到當前主master
服務器的相關信息, 如master-server-1 master 127.0.0.1 3005 4305 14.55 8.93
. -
我們使用
$ kill 4305
來kill掉當前的主master
服務進程. 切換到啓動master高可用服務
的終端窗口, 可以看到某個master
高可用熱備節點被提升爲主master
服務進程的信息, 如server host: 127.0.0.1, port: 3007 now is promoted to master!
. 使用$ zkCli.sh
和[zk: localhost:2181(CONNECTED) 3] ls /pomelo/master/lock
來查看, 當前應有的2個master節點. -
使用
$ pomelo-cli -P 3007
和monitor@pomelo : all>show servers
來查看master
服務器狀態, 可以看到當前主master
服務器的相關信息, 如master-server-1 master 127.0.0.1 3007 4421 21.18 34.53
. 並且, 此時其它服務進程不受任何應用, 用戶仍然可以正常進行遊戲. -
這時可以在目錄
lordofpomelo/game-server
下使用pomelo stop -P 3007
來關閉game-server
服務器集羣.
5. 說明
- 具體代碼可以參考lordofpomelo的
master
分支. - 該功能需要 pomelo@
0.7.2
及以上版本, pomelo-masterha-plugin@0.0.4
及以上版本支持.