請問GatewayWorker分布式是怎么實現(xiàn)的呢?例如文檔中的例子,三臺機子,看到設(shè)置中沒有配置BusinessWorker什么ip地址和端口,Gateway也沒有設(shè)置具體BusinessWorker所在的機子ip,BusinessWorker通過什么連上Gateway,代碼上哪里?
三臺機器都有配置Config/Store.php,里面配置的redis/memcache存儲
當gateway進程啟動時,每個gateway進程會開啟一個內(nèi)部通訊地址(ip:端口),這個內(nèi)部通訊地址是讓businessWorker連的,gateway進程會把這個內(nèi)部通訊地址寫到Config/Store.php配置的redis/memcache存儲里面
businessWorker啟動的時候會讀取Config/Store.php配置,然后從redis/memcache能得到每個gateway進程的內(nèi)部通訊端口,然后嘗試連接,這樣每個gateway和每個businessWorker就連起來了,實現(xiàn)了分布式
所以分布式的重點在于每臺服務器上的Config/Store.php配置的redis/memcache是一致的
workerman 2.1.6版本
部署三臺服務器(192.168.1.1-3)提供高可用服務。
memcache服務器(ip 192.168.1.1 端口11211)做全局數(shù)據(jù)共享。
三臺服務器Gateway實例的lanIp與當前服務器內(nèi)網(wǎng)ip一致
三臺服務器Applications/Demo/Config/Store.php
public static $driver = self::DRIVER_MC;
public static $gateway = array(
'192.168.1.1:11211',
);
三臺機器都能正常啟動workerman,但server.log總是有這個錯誤
Worker:CLIENT: CLOSE INNER_CONNECTION
原因是什么?
Hello admin
---------------------------------------GLOBAL STATUS--------------------------------------------
WorkerMan version:2.1.6 PHP version:5.5.7
start time:2015-11-04 16:45:27 run 0 days 1 hours
load average: 0.01, 0.02, 0
1 users 3 workers 35 processes
worker_name exit_status exit_count
BusinessWorker 0 0
Gateway 0 1
Monitor 0 0