趁周六想把eureka升级consul,说一下遇到的坑。

一、consul官网下载安装包巨慢无比。。翻墙后很快。

二、consul官方文档不给力,建立集群的例子居然是用虚拟机。实际生产环境不需要虚拟机。而且官方例子中的集群,是一个server和一个client。这种方式我经过实际测试,已证明是假集群,测试方法是kill掉consul的server,client进去就是500error错误,无法使用。

下面是真正的集群方法:

consul agent -data-dir /opt/data -node=111.1.11.43 -bind=111.1.11.43 -datacenter=dc1 -ui -client=111.1.11.43 -server -bootstrap-expect 3 > /opt/data/consul.log 2>&1 &


consul agent -data-dir /opt/data -node=111.1.11.44 -bind=111.1.11.44 -datacenter=dc1 -ui -client=111.1.11.44 -server -bootstrap-expect 3 > /opt/data/consul.log 2>&1 &


consul join -http-addr=111.1.11.44:8500 111.1.11.43


consul agent -data-dir /opt/data -node=111.1.11.46 -bind=111.1.11.46 -datacenter=dc1 -ui -client=111.1.11.46 -server -bootstrap-expect 3 > /opt/data/consul.log 2>&1 &

consul join -http-addr=111.1.11.46:8500 111.1.11.43


三个服务器,-server表示每台服务器都作为server,-bootstrap-expect 3表示集群有3台。

join命令将自身server加入其他server,这一步是构成集群的关键。

-http-addr命令是指定ip。consul很多命令默认是访问127.0.0.1,但我这几台centos设置问题,127.0.01访问不了,所以要指定。


三、当前consul最新版是1.2.1,将微服务注册到consul后,显示有大bug:如果微服务地址为111.1.11.41:7102,注册到地址为111.1.11.43的consul上,consul界面上显示service为错误的 111.1.11.43:7102。但是在健康检查页面,actuator health前面的地址又是对的111.1.11.41:7102 。试了修改yml注册consul时的选项,也都没生效。解决方式是使用1.1.0版本的consul,重新安装。


四、折腾了我6小时的问题:spring cloud gateway 注册到consul的问题。

    问题过于复杂,简单来说,就是历史注册的已停止服务的错误节点,会影响正确的新注册的服务。导致网关无法使用。

    这个问题的解决方式也是将consul从1.2.1版本退回到1.1.0版本。


最后,在注册consul服务的时候,id最好根据微服务的ip端口服务名之类的制定,不要像网上写的使用random.value随机数。

这样最大的问题是,微服务一旦重启,id就会重新随机生成,但ip和端口又不变。consul就会认为2个id都是有效的。

虽然不影响使用,但重启一次就加一个service也是非常蛋疼的吧。


附:手工删除无用服务,替换ip和serviceid即可。注意,需要使用工具,method必须选择PUT。

http://ip:8500/v1/agent/service/deregister/serviceid






Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐