Pomelo的分佈式部署(以LordOfPomelo爲例)
分佈式部署的方法和步驟
1. 系統及應用軟件環境搭建和配置
所有參與分佈式部署的機器:
- 必須爲同類操作系統(建議爲完全相同的操作系統, 本文所示例的4臺機器的操作系統均爲"Debian GNU/Linux 7.0").
- 必須都有一個同名的用戶(如:"pomelo"等, 本文所示例的4臺機器均有一個名爲"pomelo"的用戶).
- Node.js的安裝版本必須完全相同, 安裝的
絕對路徑
也必須完全相同(本文所示例的安裝絕對路徑爲"/home/pomelo/node-v0.10.21-linux-x64"). - “lordofpomelo"所放置的
絕對路徑
也必須完全相同(本文所示例的絕對路徑爲”/home/pomelo/lordofpomelo"). - 在所有參與分佈式部署的機器上配置
ssh登錄選項
. 方法爲: 在"~/.ssh"目錄下創建一個名爲"config"的文件(本文所示例的目錄爲"/home/pomelo/.ssh"), 文件內容如下:
Host *
HashKnownHosts no
CheckHostIP no
StrictHostKeyChecking no
上述文件的目的是使得各個機器之間可以進行順暢的ssh登錄. 各選項的含義請參考ssh_config.
2. 全局安裝Pomelo, 安裝lordofpomelo依賴包
$ npm install pomelo -g
$ cd lordofpomelo
$ sh npm-install.sh
詳細的步驟請參考安裝pomelo和LordOfPomelo-安裝指南.
3. 修改lordofpomelo中相關配置文件
- 修改"lordofpomelo/shared/config/mysql.json": 將其中的
host
的地址修改爲MySql所在機器的IP地址, 注意: 不要填寫"127.0.0.1"或者"localhost". 具體的配置如下所示, 大家可以根據實際情況修改對應配置項:
{
"development": {
"host" : "pomelo3.server.163.org",
"port" : "3306",
"database" : "Pomelo",
"user" : "xy",
"password" : "dev"
},
"production": {
...
}
}
- 修改"lordofpomelo/game-server/config/master.json": 將其中的
host
的地址修改爲master
所在機器的IP地址(即, 將要在哪臺機器上使用pomelo start
來啓動game-server
服務器集羣), 注意: 不要填寫"127.0.0.1"或者"localhost". 具體的配置如下所示, 大家可以根據實際情況修改對應配置項:
{
"development":{
"id": "master-server-1", "host": "pomelo16.server.163.org", "port": 3005
},
"production":
{
...
}
}
- 修改"lordofpomelo/game-server/config/servers.json": 將其中的
host
的地址修改爲相應服務進程所在機器的IP地址(即, 將要在哪臺機器上運行該服務進程), 注意: 不要填寫"127.0.0.1"或者"localhost". 具體的配置如下所示, 大家可以根據實際情況修改對應配置項:
{
"development": {
...
"area": [
{"id": "area-server-1", "host": "pomelo16.server.163.org", "port": 3250, "area": 1},
{"id": "area-server-2", "host": "pomelo18.server.163.org", "port": 3251, "area": 2},
{"id": "area-server-3", "host": "pomelo19.server.163.org", "port": 3252, "area": 3},
...
],
...
"gate": [
{"id": "gate-server-1", "host": "pomelo16.server.163.org", "clientPort": 3014, "frontend": true}
],
...
},
"production": {
...
}
}
- 修改"lordofpomelo/web-server/public/js/config/config.js": 將其中的
GATE_HOST
和GATE_PORT
修改爲game-server的gate服務進程
所在機器的IP地址和端口, 注意: 如果web-server
與game-server的gate服務進程
在同一臺機器上則可將GATE_HOST
配置爲window.location.hostname
, 否則配置相應的IP; 該配置應與"lordofpomelo/game-server/config/servers.json"中gate
的配置相對應. 具體的配置如下所示, 大家可以根據實際情況修改對應配置項:
...
IMAGE_URL: 'http://pomelo.netease.com/art/',
GATE_HOST: 'pomelo16.server.163.org',
GATE_PORT: 3014
...
上述步驟都完成後就可以在master
所在機器(本文所示例的是"pomelo16.server.163.org")的lordofpomelo/game-server
目錄下使用pomelo start
命令啓動game-server
服務器集羣; 在lordofpomelo/game-server
目錄下使用pomelo stop
命令停止game-server
服務器集羣了. 在另外一臺機器(本文所示例的是"pomelo17.server.163.org"; 當然也可以和上面的master
在同一臺機器上)的lordofpomelo/web-server
目錄下使用命令node app.js
來啓動web-server
; 由於web-server
是無狀態的web服務器, 則可以通過kill
/Ctrl+c
來停止.
4. 說明
- 在分佈式部署中, 啓動/停止各應用服務器的代碼可以參考
lordofpomelo/game-server/node_modules/pomelo/lib/master/starter.js
中的sshrun
函數相關部分.