Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

3.1版本的sentinel,在从众多的从中选举出新的主后,proxy退出 #1080

Closed
ghost opened this issue Dec 14, 2016 · 21 comments
Closed

Comments

@ghost
Copy link

ghost commented Dec 14, 2016

2016/12/14 13:07:05 router.go:218: [WARN] fill slot 0031, backend.addr = 192.168.34.6:6479, locked = false
2016/12/14 13:07:05 router.go:218: [WARN] fill slot 0032, backend.addr = 192.168.34.6:6479, locked = false
2016/12/14 13:07:05 router.go:218: [WARN] fill slot 0033, backend.addr = 192.168.34.6:6479, locked = false
2016/12/14 13:07:05 router.go:218: [WARN] fill slot 0034, backend.addr = 192.168.34.6:6479, locked = false
2016/12/14 13:07:05 router.go:218: [WARN] fill slot 0035, backend.addr = 192.168.34.6:6479, locked = false
2016/12/14 13:07:05 router.go:218: [WARN] fill slot 0036, backend.addr = 192.168.34.6:6479, locked = false
这个6479是sentinel选举出的新的主redis实例,但是proxy却无法连接,导致proxy异常退出,而且还是需要给新的主手动点击一下PROMPTE,然后proxy才好使

更重要的是 哨兵的日志里也都显示成功了,但是就是需要手动PROMPTE;而且手动提升主后,还需要点击哨兵的同步按钮,让哨兵知道现在主从的状态,所有一次完整的提升需要点击两次按钮,这样就根本没有解决ha的问题

@spinlock
Copy link
Member

spinlock commented Dec 14, 2016

你能发完整的 log 吗?你发的这个只是你点 promote 之后的动作。

另外,异常退出 是什么,是 crash 吗?

@ghost
Copy link
Author

ghost commented Dec 14, 2016

@spinlock 发给你整个proxy日志吗

@spinlock
Copy link
Member

spinlock commented Dec 14, 2016 via email

@ghost
Copy link
Author

ghost commented Dec 14, 2016

@spinlock 邮件发给您proxy.log

@spinlock
Copy link
Member

spinlock commented Dec 14, 2016 via email

@ghost
Copy link
Author

ghost commented Dec 14, 2016

额,发日志问题,但是我只记录了proxy的,其他的启动的时候都没指定日志输入,所以就只能发给您proxy的了

@ghost
Copy link
Author

ghost commented Dec 14, 2016

@spinlock 发到您wnzheng@gmail.com这个邮箱了,您看一下吧,我在启动的时候就指定了proxy的这个一个日志,sentinel启动和选举过程中,还有redis,我都没有指定日志,因为 毕竟是测试,所以就没有指定

@spinlock
Copy link
Member

@Umbraller log 已经收到。我建议你看一下 log,里面全是 error 似乎你都忽略了。

  • log 里全是这个,说明 slot129+ 全都是 offline 的,要么用 codis-admin --slots-assign + resync 强制刷一下,要么发起一次 migration 让 offline 的 slots 生效。请参考 example/setup.py 里面的操作。
  185 2016/12/14 11:19:44 router.go:218: [WARN] fill   slot 0128, backend.addr = 192.168.34.6:6379, locked = false
  186 2016/12/14 11:19:44 router.go:218: [WARN] fill   slot 0129, backend.addr = , locked = false
  187 2016/12/14 11:19:44 router.go:218: [WARN] fill   slot 0130, backend.addr = , locked = false
  188 2016/12/14 11:19:44 router.go:218: [WARN] fill   slot 0131, backend.addr = , locked = false
  189 2016/12/14 11:19:44 router.go:218: [WARN] fill   slot 0132, backend.addr = , locked = false
  190 2016/12/14 11:19:44 router.go:218: [WARN] fill   slot 0133, backend.addr = , locked = false
  • proxy 根本连不上 codis-server,确认一下 codis-server 启动是否正确。同理,sentinel 也连不上,log 我就不贴了,是不是 bind 的 127.0.0.1?
1083 2016/12/14 11:19:44 proxy_api.go:44: [WARN] [0xc8200b89c0] API call /api/proxy/start/5c8aac144656e1734424988552b26b3b from 192.168.34.6:47102 []
1084 2016/12/14 11:19:44 backend.go:195: [WARN] backend conn [0xc82000b770] to 192.168.34.6:6379, writer-[0] exit
1085 [error]: dial tcp 192.168.34.6:6379: getsockopt: connection refused
1086     3   /usr/local/go/src/github.com/CodisLabs/codis/pkg/proxy/redis/conn.go:30
1087             github.com/CodisLabs/codis/pkg/proxy/redis.DialTimeout
1088     2   /usr/local/go/src/github.com/CodisLabs/codis/pkg/proxy/backend.go:79
1089             github.com/CodisLabs/codis/pkg/proxy.(*BackendConn).newBackendReader
1090     1   /usr/local/go/src/github.com/CodisLabs/codis/pkg/proxy/backend.go:197
1091             github.com/CodisLabs/codis/pkg/proxy.(*BackendConn).loopWriter
1092     0   /usr/local/go/src/github.com/CodisLabs/codis/pkg/proxy/backend.go:147
1093             github.com/CodisLabs/codis/pkg/proxy.(*BackendConn).run

@spinlock
Copy link
Member

错误都是 connection refused 这就说不过去了。

@ghost
Copy link
Author

ghost commented Dec 14, 2016

@spinlock 不是啊,这些错误,都是sentinel选举出新的主节点6479之后,启动以及添加异常报的错,并不是从一开始就有错,这样吧,我一会把截图也发一下吧

@spinlock
Copy link
Member

@Umbraller 你看一下 proxy 的启动时间以及出错的时间,就是说 proxy 刚启动完成注册就报错了。同时 proxy 尝试去通 sentinel 建立连接全部失败,也就不能从 HA 上获得任何信息了。

@spinlock
Copy link
Member

@Umbraller 我了解了,log 包含了多次启动的结果,我看一下最后的。

@spinlock
Copy link
Member

@Umbraller 建议你重新做一次测试,这个 log 里面混合了好几次启动的结果。

PS,我看后面 HA 的确是生效了的啊。另外 proxy 映射表是否正确,你从 FE 上有跳转链接看每个 slot 的状态,同时也可以用 redis-cli 打到 proxy 上用 SLOTSMAPPING 指令查看。

@ghost
Copy link
Author

ghost commented Dec 14, 2016

@spinlock 从12月14上午11点以后开始看,我大概是在11点左右kill掉主节点6379的,然后sentinel就选举出来了6479,但是后面 proxy就退出,在之后我还重启过其他组件,然后多次启动和添加proxy都报错,后来我点击完prompte按钮,然后再点击sentinel的sync后是没问题了,这就是您在日志的后面看到的是最后是没问题的

@ghost
Copy link
Author

ghost commented Dec 14, 2016

@spinlock 你看到的shutdown是因为sentinel在完成选举出来6479这个新的主节点后,我发现proxy异常退出了,我才使用shutdown命令关闭proxy,想尝试重新启动并添加proxy,但是发现还是不行,就出现了日志里面,你看到的shutdown,您 明白了吗
我在邮件里面说的很清楚,还有截图啊

@spinlock
Copy link
Member

@Umbraller shutdown log 是 proxy 自己打印的,并且接受的是外部 shutdown 指令。那么如果 proxy 异常退出了,那么他怎么打印的这句日志。。。

@spinlock
Copy link
Member

还是那句话,proxy 一开始都连不上 sentinel,proxy 怎么响应 HA 动作。你说的我都懂。问题是 proxy 连不上 HA 啊。

@ghost
Copy link
Author

ghost commented Dec 14, 2016

@spinlock 这样吧,这文字说什么都有延时和逻辑上的误导,您有时间,您搭建一下3.1版本的sentinel,您查看下 整个过程,您就知道proxy的异常退出是怎么回事了,也 明白,我那些截图,还有说的是什么样的状况了

@ghost
Copy link
Author

ghost commented Dec 14, 2016

@spinlock 还有一点强调下,我用的是3.1版本的sentinel功能,不是codis-ha

@spinlock
Copy link
Member

image

这是 HA 生效前的状态。之后让 127.0.0.1:16380 下线了。

image

image

随便查看一个 proxy 显示 HA 生效,group-1 已经切换到 127.0.0.1:17380
image

spinlock added a commit that referenced this issue Dec 15, 2016
    json doesn't support map[int]string, using map[string]string instead
@spinlock
Copy link
Member

问题确认了

  1. proxy 没有自动退出,而是手动触发的。
  2. codis-admin --slot-status json error:unsurpport type map[][string] #1078 问题一样:map[int]string 的序列化不符合 json 标准,导致 dashboard/proxy 的查询状态的 api 接口不工作,而误以为 proxy 不工作了。(go1.7 做了扩展,所以问题只出现在 1.5 & 1.6 上)

anywhy added a commit to anywhy/codis that referenced this issue Dec 17, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant