提示
GatewayWorker提供的所有接口都是支持分布式調(diào)用的,所以業(yè)務(wù)代碼不需要任何更改,直接就可以分布式部署。
如何分布式GatewayWorker
GatewayWorker通過Register服務(wù)來建立劃分集群。同一集群使用相同的一組Register服務(wù),即Gateway 和 businessWorker的注冊服務(wù)地址($gateway->registerAddress
$businessworker->registerAddress
)指向相同的Register服務(wù)(可以是單機(jī),也可以是集群)。
Gateway BusinessWorker Register之間如何工作的,請看原理。
分布式部署的關(guān)鍵步驟
1、Register 設(shè)置為監(jiān)聽內(nèi)網(wǎng)ip。為了安全起見,register端口不要暴露給外網(wǎng)。
2、將Gateway 和 businessWorker的注冊服務(wù)地址(registerAddress)設(shè)置成統(tǒng)一的Register服務(wù)地址,如果是部署了多個register服務(wù),格式類似['192.168.0.1:1236','192.168.0.2:1236']。
3、設(shè)置Gateway啟動腳本(一般是start_gateway.php)中的lanIp
與當(dāng)前服務(wù)器內(nèi)網(wǎng)ip一致。
部署示例
假如需要部署三臺服務(wù)器(192.168.1.1-3)提供高可用服務(wù)。
1、設(shè)置三臺服務(wù)器start_register.php中監(jiān)聽本機(jī)內(nèi)網(wǎng)ip,new Register('text://192.168.1.1:1236'); new Register('text://192.168.1.2:1236'); new Register('text://192.168.1.3:1236');
2、配置三臺服務(wù)器start_gateway.php start_businessworker.php中的registerAddress為['192.168.1.1:1236','192.168.1.2:1236','192.168.1.3:1236']。
3、分別配置三臺服務(wù)器start_gateway.php中的lanIp
為當(dāng)前服務(wù)器的內(nèi)網(wǎng)ip(192.168.1.1-3)。
4、逐臺啟動,分布式部署完畢。
注意事項(xiàng)及說明:
1、注意多機(jī)部署時(shí)以下端口不要被服務(wù)器安全組阻擋:
①、Register服務(wù)監(jiān)聽的端口要可以被其它內(nèi)網(wǎng)服務(wù)器訪問(為了安全,register要監(jiān)聽內(nèi)網(wǎng)ip不能讓其被外網(wǎng)訪問);
②、start_gateway.php中如果$gateway->startPort=2300; $gateway->count=4;
,則2300 2301 2302 2303四個端口需要被設(shè)置成能被其它服務(wù)器訪問,也就是起始端口$gateway->startPort
到$gateway->startPort + $gateway->count - 1
這 $gateway->count
個端口要設(shè)置成能被其它內(nèi)網(wǎng)服務(wù)器訪問。
2、如果多機(jī)部署服務(wù)器不在一個局域網(wǎng),部署時(shí)ip參數(shù)可以使用外網(wǎng)ip(需要GatewayWorker版本>=v3.0.22),對應(yīng)端口防火墻應(yīng)該設(shè)置成能被外網(wǎng)服務(wù)器訪問。
公網(wǎng)集群需要GatewayWorker版本>=v3.0.22
跨公網(wǎng)通訊有安全風(fēng)險(xiǎn),建議都放在一個內(nèi)網(wǎng)。
3、三臺GatewayWorker機(jī)器都運(yùn)行了Gateway進(jìn)程和Worker進(jìn)程,客戶端連接上任意一臺GatewayWorker的Gateway端口即通訊。
4、為了方便前端接入和擴(kuò)容,可以在Gateway前加一層DNS、LVS等負(fù)載均衡策略(不熟悉DNS LVS的請自行搜索資料學(xué)習(xí))。
5、如果服務(wù)器不夠用可以使用同樣的方法增加服務(wù)器
6、如果需要下線服務(wù)器,直接stop對應(yīng)服務(wù)器即可。由于Gateway進(jìn)程維護(hù)著客戶端連接,當(dāng)服務(wù)器下線時(shí),對應(yīng)服務(wù)器的客戶端會掉線一次。如何做到下線機(jī)器不影響用戶參考下一節(jié)。
7、因?yàn)橛卸嗯_gateway服務(wù)器,所以需要在gateway前增加一個負(fù)載均衡。負(fù)載均衡方案是通用的,你可以選擇用nginx負(fù)載,或者云廠商的負(fù)載均衡,也可以給DNS設(shè)置多個A記錄。