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