应用端连接codis 3.0.3提示Proxy list is empty的处理

一.问题描述
应用端连接代码:
JedisResourcePool jedisPool = RoundRobinJedisPool.create().
curatorClient("192.168.30.103:2181,192.168.30.104:2181,192.168.30.105:2181", 30000).
timeoutMs(3000).
zkProxyDir("/zk/codis/db_hls_prod/proxy").password('xxxx').build();
Jedis jedis = jedisPool.getResource();
jedis.set("foo", "bar");
String value = jedis.get("foo");
System.out.println(value);
通过zk连接codis提示:Proxy list is empty。


二.问题分析
1.proxy状态查看:
[apps@mvxl2579 codis]$ /apps/svr/codis/bin/codis-admin --dashboard=192.168.30.103:18080 --proxy-status
通过codis FE查看proxy状态都正常.

2.通过proxy连接redis正常3.在ZK中查看proxy状态
[zk: 127.0.0.1:2181(CONNECTED) 8] ls /codis3/hls_prod/proxy
[proxy-634208a9ba753e5e927260d0ced93687, proxy-f82e0afb962642f25de2411dd04a3198, proxy-218cee9b567b604af0a3939b84f2529d, proxy-6dd30d40f676564495d56ab16211e039, proxy-815867a35f921bcc3abb02109cca1f75, proxy-9f04676d4e82b2ba7e8f8c3a3faeee28]
[zk: 127.0.0.1:2181(CONNECTED) 9] get /codis3/hls_prod/proxy/proxy-9f04676d4e82b2ba7e8f8c3a3faeee28
{
    "id": 4,
    "token": "9f04676d4e82b2ba7e8f8c3a3faeee28",
    "start_time": "2016-07-01 16:42:39.219656807 +0800 CST",
    "admin_addr": "192.168.30.104:11080",
    "proto_type": "tcp4",
    "proxy_addr": "192.168.30.104:19000",
    "product_name": "hls_prod",
    "pid": 3336,
    "pwd": "/apps/sh/codis",
    "sys": "Linux mvxl2580 2.6.32-504.el6.x86_64 #1 SMP Wed Oct 15 04:27:16 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux"
}
cZxid = 0x2000c4328
ctime = Fri Jul 01 16:42:42 CST 2016
mZxid = 0x2000c4329
mtime = Fri Jul 01 16:42:42 CST 2016
pZxid = 0x2000c4328
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 427
numChildren = 0
  没发现什么异常,但从以下网站上查到解决办法。参考:https://github.com/CodisLabs/jodis/issues/10

三.问题处理
1.修改codis3的proxy.toml文件
# Set jodis address & session timeout.
jodis_addr = "192.168.30.103:2181,192.168.30.104:2181,192.168.30.105:2181" 

jodis_addr必须设置

2.修改jodis的zkProxyDir
zkProxyDir("/zk/codis/db_hls_prod/proxy")

结论:
1.codis 3.x 里面,proxy 注册目录换成了 /codis3/xxx/proxy/yyy,同时也会写入 /zk/codis/db_xxx/proxy/yyy 以兼容 jodis。
Zookeeper在/zk/codis/db_hls_prod/proxy下存储的消息如下,满足jodis获取CodisProxyInfo消息体

[zk: 127.0.0.1:2181(CONNECTED) 4] ls /zk/codis/db_hls_prod/proxy
[815867a35f921bcc3abb02109cca1f75, 6dd30d40f676564495d56ab16211e039, 9f04676d4e82b2ba7e8f8c3a3faeee28]
[zk: 127.0.0.1:2181(CONNECTED) 5] get /zk/codis/db_hls_prod/proxy/9f04676d4e82b2ba7e8f8c3a3faeee28
{
    "addr": "192.168.30.104:19000",
    "start_at": "2016-07-01 16:42:39.219656807 +0800 CST",
    "state": "online",
    "token": "9f04676d4e82b2ba7e8f8c3a3faeee28"
}
cZxid = 0x2000c432b
ctime = Fri Jul 01 16:42:42 CST 2016
mZxid = 0x2000c432b
mtime = Fri Jul 01 16:42:42 CST 2016
pZxid = 0x2000c432b
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x2550b2029dbbccd
dataLength = 167
numChildren = 0

2.codis的proxy需要指定jodis

 

 

你可能感兴趣的:(codis&redis)