从浅入深 学习 SpringCloud 微服务架构(五)Consul(2)
段子手168
一、consul 集群:consul 集群的基础知识
1、启动 sonsul 服务命令:
以开发者模式快速启动:
consul agent -dev -client=0.0.0.0
agent: 表示启动一个 consul 的守护进程。
dev: 表示开发者模式。
client: 表示是 consul 代理,和 consul server 交互。
一个微服务对应一个 client ,微服务和 client 部署到一台机器上。
server: 真正干活的 consul 服务。一般部署 3-5个。
2、Gossip:流言协议
所有的 consu 都会参与到 gossip 协议中(多节点中数据赋值)。
3、Raft 协议:
保证 server 集群的数据一致。
Leader: 是 server 集群中唯一处理客户端请求的。
Follower: 相当于选民,被动接收数据。
候选人: 可以被选举为 leader。
过程:1)选主,2)数据同步。
官方网站演示 Raft 协议:
http://thesecretlivesofdata.com/raft/
二、consul 集群:搭建 consul 集群
consul 集群搭建说明:
首先需要有一个正常的 Consul 集群,有 Server, 有 Leader,
这里在服务器 Server1, Server2, Server3 上分别部署了 Consul Server。
这些服务器上最好只部署 Consul 程序,以尽量维护 Consul Server 的稳定。
服务器 Server4 上通过 Consul Client 注册 Service 1, 2, 3,
(一般微服务和 Client 绑定)。
1、准备环境,启动三台虚拟机,一个本地客户机:
192.168.74.101 server server-1 s1
192.168.74.102 server server-2 s2
192.168.74.103 server server-3 s3
192.168.71.1 client clent-1 s4
Agent 以 client 模式启动的节点。在该模式下,该节点会采集相关信息,
通过 RPC 的方式向 server 发送。Client 模式节点有无数个,官方建议搭配微服务配置。
Agent 以 server 模式启动的节点。一个数据中心中至少包含1个 server 节点。
不过官方建议使用3或5个 server 节点组建成集群,以保证高可用且不失效率。
server 节点参与 Raft、维护会员信息、注册服务、健康检查等功能。
2、安装 consul 并启动
1)在每个 consul 节点上安装 consuI 服务,下载安装过程和单节点一致。
– 从官网下载 Consu] 服务
wget https://releases.hashicorp.com/consu/1.5.3/consu1_1.5.3_1inux_amd64.zip
– 使用 unzip 命令解压
unzip consu11.5.3 inux_amd64.zip
– 将解压好的 consu] 可执行命令拷贝到 /usr/1ocal/bin 目录下
cp consul /usr/local/bin
– 测试一下
consu1
2)启动每个 consulserver 节点
– 登录 s1 虚拟机,以 server 形式运行
consul agent -server -bootstrap-expect 3 -data-dir /etc/consul.d -node=server-1 -bind=192.168.74,101 -ui -cient 0.0.0.0 &
– 登录 s2 虚拟机,以 server 形式运行
consul agent -server -bootstrap-expect 2 -data-dir /etc/consul.d -node=server-2 -bind=192.168.74.102 -ui -client 0.0.0.0 &
– 登录 s3 虎拟机,以 server 形式运行
consul agent -server -bootstrap-expect 2 -data-dir /etc/consul.d -node=server-3 -bind=192.168.74.103 -ui -client 0.0.0.0 &
3)命令参数说明:
-server: 以 server 身份启动
-bootstrap-expect: 集群要求的最少 server 数量,当低于这个数量,集群即失效。
-data-dir: data 存放的目录,更多信息请参阅consul数据同步机制
-node: 节点 id,在同一集群不能重复。
-bind: 监听的ip地址。
-client: 客户端的 ip 地址 (0.0.0.0表示不限制)。
&: 在后台运行,此为 linux 脚本语法。
至此三个 Consul Server 模式服务全部启动成功。
3、在本地电脑中使用 client 形式启动 consu1
consul agent -client=0.0.0.0 -data-dir /etc/consul.d -node=client-1
4、每个节点加入集群:
在 S2, S3, S4 服务器上通过 consul join 命令加入 S1 中的 consul 集群中。
consul join 192.168.74.101
5、测试:
在任意一台服务器中输入 consul members 查看集群中的所有节点信息。
consul members
三、consul 集群:集群测试以及问题说明
1、Consul 常见问题–节点和服务注销
当服务或者节点失效,Consul 不会对注册的信息进行剔除处理,仅仅标记已状态进行标记(并且不可使用)。
如果担心失效节点和失效服务过多影响监控。可以通过调用HTTP API的形式进行处理。
节点和服务的注销可以使用 HTTP API:
注销任意节点和服务: /catalog/deregister
注销当前节点的服务: /agent/service/deregister/:service_id
如果某个节点不继续使用了,也可以在本机使用 consulleave 命令,
或者在其它节点使用 consulforce-leave 节点 ld。
2、Consul 常见问题–健康检查与故障转移
在集群环境下,健康检查是由服务注册到的 Agent 来处理的,
那么如果这个 Agent 挂掉了,那么此节点的健康检查就处于无人管理的状态。
从实际应用看,节点上的服务可能既要被发现,又要发现别的服务,
如果节点挂掉了,仅提供被发现的功能实际上服务还是不可用的。
当然发现别的服务也可以不使用本机节点,
可以通过访问一个 Nginx 实现的若干 Consul 节点的负载均衡来实现。