GatewayWorker分布式问题

0

请问GatewayWorker分布式是怎么实现的呢?例如文档中的例子,三台机子,看到设置中没有配置BusinessWorker什么ip地址和端口,Gateway也没有设置具体BusinessWorker所在的机子ip,BusinessWorker通过什么连上Gateway,代码上哪里?

已邀请:

walkor

赞同来自:

三台机器都有配置Config/Store.php,里面配置的redis/memcache存储
当gateway进程启动时,每个gateway进程会开启一个内部通讯地址(ip:端口),这个内部通讯地址是让businessWorker连的,gateway进程会把这个内部通讯地址写到Config/Store.php配置的redis/memcache存储里面


businessWorker启动的时候会读取Config/Store.php配置,然后从redis/memcache能得到每个gateway进程的内部通讯端口,然后尝试连接,这样每个gateway和每个businessWorker就连起来了,实现了分布式


所以分布式的重点在于每台服务器上的Config/Store.php配置的redis/memcache是一致的

smith - phper db

赞同来自:

workerman 2.1.6版本


部署三台服务器(192.168.1.1-3)提供高可用服务。
memcache服务器(ip 192.168.1.1 端口11211)做全局数据共享。


三台服务器Gateway实例的lanIp与当前服务器内网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


原因是什么?

walkor

赞同来自:

log 出现这个日志后看下status
贴下

smith - phper db

赞同来自:

刚截的图,才启动第二台。 因为有报错,把三台关闭了两台。

walkor

赞同来自:

我要看报错那台的status,
只贴上半部分就行


你先检查下机器上是不是都装了memcached扩展,并且扩展版本都是一致的
memcache有memcache和memcached两个扩展,所有服务器装同一种

smith - phper db

赞同来自:

恩 有memcache和memcached两个扩展


这个截屏就是出问题的那台status

smith - phper db

赞同来自:

我是否把memcached这个扩展去掉就ok?

walkor

赞同来自:

status我要看统计结果的上半部分,并且是出错后的status

smith - phper db

赞同来自:

walkor帮忙看看

walkor

赞同来自:

截图里面没看出来问题

smith - phper db

赞同来自:

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

该问题目前已经被锁定, 无法添加新回复