日常梳理-Consul
·
文章目录
一.常见问题
consul节点启动时,提示端口已被占用或node id 冲突
原因:
server 端和客户端部署在同一台服务器
修改server配置文件serverconfig/server.json,调用ports端口
修改client配置文件clientconfig/client.json,修改data_dir路径,与server端区分开。
consul节点启动时,提示“Multiple private IPV4 addresses found”
启动时,指定bind ip,具体如下:
-bind 10.xx.xxx.xxx(本地IP)
consul ui报500错误
找到集群注册信息
datacenter/raft/
删除raft下内容:
rm -rf datacenter/raft/*
二.命令
查看集群成员
bin/consul members
当服务端和客户端在同一台机子时,使用命令指定server端口:
bin/consul members --http-addr 127.0.0.1:8501
退出
bin/consul leave
指定端口退出
bin/consul leave --http-addr 127.0.0.1:8501
强制退出
bin/consul force-leave --http-addr 127.0.0.1:8501
删除某个service服务
Consul提供了一个删除服务的接口,请求方式为PUT,格式如下,ip、port、实例id这三个值按实际情况替换.
curl --request PUT http://127.0.0.1:8500/v1/agent/service/deregister/cloud-docker-service-8001
查看consul集群所有 service
/v1/internal/ui/services
查看consul集群内某个service下的服务详情
/v1/health/service/${service_name}
三.Consul集群选举机制-Raft算法
1.三种节点状态
每个节点任何时刻只处于三种状态之一:
- Leader(领导者)
- 唯一写入口
- 定时发心跳,维持权威
- 所有写操作先到 Leader,再同步给 Follower
- Follower(追随者)
- 被动,只接收、不主动发请求(不会主动参选)
- 收不到心跳 → 变成候选人
- Candidate(候选人)
- 发起选举,先给自己投票,再向其他节点拉票
状态流转:
Follower →(收不到心跳)→ Candidate →(得票过半)→ Leader
2.选举机制
Raft 里的 “过半”= 集群配置的总节点数的一半≠ 当前活着的节点数的一半
1. 心跳触发
- Leader 每隔一段时间发心跳(AppendEntries)
- Follower 收到心跳就保持沉默
2. 选举超时(随机)
- Follower 一段时间没收到心跳 → 超时
- 超时时间:150ms~300ms 随机
- 随机 = 避免平票、避免同时抢主
3. 选举过程
1. Follower → Candidate
2. 自己投自己一票
3. 给其他节点发投票请求
4. 谁得到 > 半数票,谁立刻变成 Leader
4. 为什么不会卡死?
- 随机超时 → 一定有一个先发起选举
- 先发起的人更容易拿到票
- 平票了就等下一轮随机超时,一定会选出主
3.日志复制(保证一致)
所有写操作都走这个流程:
- 客户端 → Leader
- Leader 把日志先存在本地
- Leader 并发发给所有 Follower
- Follower 收到后回复 ACK
- Leader 收到 过半 ACK
→ 提交(commit)
→ 应用到状态机
→ 告诉客户端成功 - 之后 Leader 通过心跳让所有节点最终一致
保证:只要提交成功,所有节点最终都会有这条日志。
4.安全性(不会乱)
Raft 有几条铁律:
- 选举安全性
一个任期内 最多只有一个 Leader - 日志匹配原则
- 如果两个节点某条日志 index & term(任期) 相同
- 那么这条日志之前的所有日志都完全相同
- Leader 只追加、不覆盖、不删除日志
Follower 冲突时,Leader 强制覆盖 Follower,保证一致 - 投票限制
节点只会给日志比自己新的候选人投票 → 保证新主一定拥有全部已提交日志
5.Term(任期)
你可以理解为时代、纪元:
- 每个任期有一个全局唯一数字
- 每次选举,任期 +1
- 不同任期的消息直接拒绝
- 用来识别过期的 Leader
6.Consul(Raft)集群存活能力表
| 节点总数 | 至少需要节点数(过半) | 最多能挂几台还能正常选主 |
|---|---|---|
| 3 | 2 | 1 |
| 5 | 3 | 2 |
| 7 | 4 | 3 |
更多推荐



所有评论(0)