consul集群遇到的问题记录

consul的架构图

consul部署架构.png

每个数据中心可以视为一个地区(北上广),每个数据中心内存在一个LAN Gossip池,它包含数据中心的所有成员——client和server。
LAN池用于以下几个目的:
1、 成员关系运行,client自动发现server,减少配置量
2、 分布式的故障检测,允许故障检测的工作由整个集群承担,而不是集中在少数server上
3、 Gossip池允许可靠和快速的事件广播,比如leader选举。

多个数据中心根据consul
keygen构成一个集群,一个集群存在唯一一个WAN Gossip池,所有的server都(应)加入 WAN Gossip池,不论是哪个数据中心的。WAN池提供的成员关系,允许server执行跨数据中心请求。

#一、 consul集群的部署方式
无client模式的consul集群,三个server角色,他们的ip地址分别是192.168.10.16,192.168.10.17,192.168.10.18。
启动命令为:


 consul agent -server -ui -config-dir=/etc/consul

三个节点的名称分别为xh-jvm-01t ,xh-jvm-02t ,xh-jvm-03t。
下面以xh-jvm-01t为例,看下启动的配置参数:

#二、consul的停止和启动
killall consul
nohup /bin/consul agent -server -ui -config-dir=/etc/consul 2>&1 >/tmp/consul.log &

PS:遇到杀掉consul进程,立马又重新开启了一个consul进程的怪事。
后来发现rc.local里的启动命令是start consul,想要杀掉它,必须stop consul。

三、consul集群的加入和退出

1、查看集群状态:
consul operator raft list-peers

2、退出集群
consul operator raft remove-peer -id=192.168.10.16:8500

3、查看members状态
consul members



 参考:https://blog.csdn.net/chenchong08/article/details/77885989

 

四、client的作用

1、最普适最简单的方案:

 

consul集群中的client.png

2、如果你不想在每个主机部署Consul Client,还有一个多路注册的方案可供选择。

 

 

 

这个架构的优势:
Consul节点服务器与应用服务器隔离,互相干扰少;
不用每台主机都部署Consul,方便Consul的集中管理;
某个Consul Client挂掉的情况下,注册到其上的服务仍有机会被访问到;

但也需要注意其缺点:
引入更多技术栈:负载均衡的实现,不仅要考虑Consul Client的负载均衡,还要考虑负载均衡本身的单点问题。
Client的节点数量:单个Client如果注册的服务太多,负载较重,需要有个算法(比如hash一致)合理分配每个Client上的服务数量,以及确定Client的总体数量。
服务发现要过滤掉重复的注册,因为注册到了多个节点会认为是多个部署(DNS接口不会有这个问题)

3、实际部署过程中,在服务节点数量不多的情况下,有些未加入client角色。

不管是client还是server,都是consul集群中的一个节点,在consul中,不存在传统的server管理client这样的概念,它们之间是平等的,client与server具体的区别如下:

Client:这种模式下,所有注册到当前节点的服务会被转发到SERVER,本身是不持久化这些信息。

Server:功能和client都一样,唯一不同的是,它会把所有的信息持久化的本地,这样遇到故障,信息是可以被保留的。

Server-leader:负责同步注册的信息给其它的SERVER,同时也负责各个节点的健康监测

参考:https://blog.csdn.net/j3T9Z7H/article/details/83629334
https://www.zhihu.com/question/68005259

五、spring cloud 结合consul集群

consul节点有多个,导致程序的配置项不固定,需要与具体的机器环境变量一致。
当然,还有一种办法是:在每个虚拟机上安装一个client角色的consul,这样每个spring cloud的配置项
spring:
--application:
----name: assist-service
--cloud:
----consul:
------host: localhost
------port: 8500

1、在机器设置环境变量
export CONFIG_SERVICE_ENABLED=true
export CONFIG_SERVICE_PORT=8500
export CONFIG_SERVICE_HOST=192.168.10.16
export CONFIG_SCHEDULE_ENABLED=true
2、spring cloud配置项

 

spring cloud配置项.png

参考:https://www.hi-linux.com/posts/28048.html#consul-agent%E9%85%8D%E7%BD%AE%E8%AF%B4%E6%98%8E

PS: consul 端口说明

consul 内使用了很多端口,理解这些端口的用处对你理解 consul 架构很有帮助:

TCP/8300
8300 端口用于服务器节点。客户端通过该端口 RPC 协议调用服务端节点。

TCP/UDP/8301
8301 端口用于单个数据中心所有节点之间的互相通信,即对 LAN 池信息的同步。它使得整个数据中心能够自动发现服务器地址,分布式检测节点故障,事件广播(如领导选举事件)。

TCP/UDP/8302
8302 端口用于单个或多个数据中心之间的服务器节点的信息同步,即对 WAN 池信息的同步。它针对互联网的高延迟进行了优化,能够实现跨数据中心请求。

8500
8500 端口基于 HTTP 协议,用于 API 接口或 WEB UI 访问。

8600
8600 端口作为 DNS 服务器,它使得我们可以通过节点名查询节点信息。



 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值