consul挂了
因为某个项目使用了consul作为服务注册发现中心
今天尝试跑测试环境的时候发现statusCode=500, statusMessage='Internal Server Error', statusContent='No cluster leader'的错误,观察了一下测试环境的consul发现只有两个节点还在运行了,一般情况consul有3-5个节点同时运行。
在尝试恢复节点的时候,发现虚拟机都无法ssh上去了。决定随便找一台空机器来做一个单节点的consul来支持测试环境。
k8s还是docker
看到linux安装教程还要去下载和配置就决定要么用k8s要么用docker版,权衡利弊因为k8s的网络配置比较复杂最后决定使用docker。
consul版本决定跟线上保持一致使用1.13.2
跟老节点产生了关系
一开始想把旧consul集群恢复所以尝试使用新建的consul里的join命令加入旧consul集群,但是因为其中一个node状态实在是诡异,所以加入失败也不清楚原因。
后续删除consul重新建立consul之后,发现老节点不断的尝试主动来建立联系,感觉一旦注册过去之后应该会反复尝试拉进自己的集群。
最后无奈通过新建了一个datacenter来解决的。
注册了私有IP地址
启动consul之后在本机跑示例程序时候发现注册的是私有地址,似乎因为装了一些虚拟网卡所以选择了虚拟网卡的地址注册给consul了。参考文章3看过之后觉得不会影响测试环境,故未处理。
最后单条命令实施如下
docker run -id --name=consul --net=host consul:1.13.3 agent -server -ui -node=n1 -bootstrap -bootstrap-expect=1 -client=0.0.0.0 -advertise=192.xxx.xxx.162 -datacenter=dctest -bind=192.xxx.xxx.162
访问192.xxx.xxx.162:8500一切正常
部署正式环境
部署正式环境时候发现又拿到私有地址了 在rancher中把网络模式改为主机解决了问题
原理跟上一条docker命令中的--net=host是一样的