我在做codis的测试, 测试方式如下:
系统环境centos 6.2
3台虚拟机 A:192.168.1.10 B:192.168.1.20 C:192.168.1.30
codis服务与zookeeper都跑在A机器上, B和C机器跑两个codis-server
服务跑起来以后,我写了个shell脚本循环set,之后将组中当前处于master的服务器网卡down掉,脚本就会卡无法运行, 而且是一直无法运行,当使用了 codis-ha将slave自动切换到master 也无法正常使用。 就卡在那不动了,通过命令行连接到proxy上以后 敲打命令也会卡在那里。请问这个是什么问题.
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您描述的问题,结合知识库中的相关资料,以下是针对问题的详细分析和解决方案:
环境与测试背景
set
操作,并模拟网络故障(将当前master的网卡down掉),观察Codis的高可用性表现。问题现象
codis-ha
进行主从切换,仍然无法正常使用,且命令行连接到proxy后也会卡住。可能的原因 根据您的描述,问题可能涉及以下几个方面:
codis-ha
未能正确完成主从切换,或者切换后新的master未能正常接管流量。使用traceroute
命令检查网络路径是否正常。例如,在B或C机器上执行以下命令,探测到A机器的连通性:
traceroute -n -T -p 2181 192.168.1.10
如果发现网络路径中存在丢包或阻断,需排查网络配置或防火墙规则。
确保所有节点之间的网络延迟较低,建议在局域网内进行测试,避免跨区域网络带来的延迟问题。
codis-ha
的日志文件,确认其是否成功检测到master节点的故障并触发主从切换。codis-ha
的行为是否符合预期。例如,手动将B机器的Codis-server提升为master,观察proxy是否能正确连接到新的master。zkCli.sh -server 192.168.1.10:2181
get /codis/proxy/master
如果Zookeeper中的元数据未及时更新,可能是Zookeeper集群本身存在问题,需检查其日志和状态。
config.ini
中增加以下配置:
proxy_timeout = 5s
maxmemory
和timeout
参数设置合理,避免因内存不足或连接超时导致服务不可用。sysctl -w net.ipv4.tcp_retries2=15
sysctl -w net.ipv4.tcp_keepalive_time=60
如果您在实施上述步骤时遇到具体问题,可进一步提供日志或错误信息,以便更精准地定位问题。您也可以通过ECS一键诊断全面排查并修复ECS问题。