GatewayWorker分布式问题

crh5354

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

阅读 2623
11个回答

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是一致的

  • jelty 2015-11-11

    @1 如果gateway这种模型把gate去掉 ,直接client->多个worker连接,这样有什么弊端,看起来会简单些 少了中间层

  • walkor 2015-11-11

    worker1的client 与worker2的client无法直接通讯

smith

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

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

  • 暂无评论
walkor

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

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

  • 暂无评论
smith

恩 有memcache和memcached两个扩展

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

  • 暂无评论
smith

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

  • 暂无评论
walkor

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

  • 暂无评论
smith

walkor帮忙看看

  • 暂无评论
walkor

截图里面没看出来问题

  • 暂无评论
smith

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

  • 暂无评论