请问GatewayWorker分布式是怎么实现的呢?例如文档中的例子,三台机子,看到设置中没有配置BusinessWorker什么ip地址和端口,Gateway也没有设置具体BusinessWorker所在的机子ip,BusinessWorker通过什么连上Gateway,代码上哪里?
三台机器都有配置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是一致的
@1 如果gateway这种模型把gate去掉 ,直接client->多个worker连接,这样有什么弊端,看起来会简单些 少了中间层
worker1的client 与worker2的client无法直接通讯
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
原因是什么?
log 出现这个日志后看下status 贴下
刚截的图,才启动第二台。 因为有报错,把三台关闭了两台。
我要看报错那台的status, 只贴上半部分就行
你先检查下机器上是不是都装了memcached扩展,并且扩展版本都是一致的 memcache有memcache和memcached两个扩展,所有服务器装同一种
恩 有memcache和memcached两个扩展
这个截屏就是出问题的那台status
我是否把memcached这个扩展去掉就ok?
status我要看统计结果的上半部分,并且是出错后的status
walkor帮忙看看
截图里面没看出来问题
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
三台机器都有配置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是一致的
@1 如果gateway这种模型把gate去掉 ,直接client->多个worker连接,这样有什么弊端,看起来会简单些 少了中间层
worker1的client 与worker2的client无法直接通讯
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
原因是什么?
log 出现这个日志后看下status
贴下
刚截的图,才启动第二台。 因为有报错,把三台关闭了两台。
我要看报错那台的status,
只贴上半部分就行
你先检查下机器上是不是都装了memcached扩展,并且扩展版本都是一致的
memcache有memcache和memcached两个扩展,所有服务器装同一种
恩 有memcache和memcached两个扩展
这个截屏就是出问题的那台status
我是否把memcached这个扩展去掉就ok?
status我要看统计结果的上半部分,并且是出错后的status
walkor帮忙看看
截图里面没看出来问题
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