简言
1. 上一篇博客我们讲了consul多机器集群的部署,consul集群搭建教程 - 多机集群_YZF_Kevin的博客-CSDN博客
2. 很多同学没有多个机器,只想在单台机器上实验下consul集群,所以这篇博客我们讲单台机器的consul集群部署
3. consul的各个版本下载地址在 Consul Versions | HashiCorp Releases
4. 本文使用consul的版本是consul1.15.1,所以请下载名字为 consul_1.15.1_linux_amd64.zip 的文件即可
搭建集群步骤
1. 打开网址 https://releases.hashicorp.com/consul/下载consul的安装包,下载到 /usr/bin 目录,如下图
2. 运行命令 unzip consul_1.15.1_linux_amd64.zip 解压到当前目录,consul 就是我们要使用的bin文件了。运行命令 consul --version 查看版本确实是v1.15.1, 如下图
3. 运行命令 mkdir consul_1.15.1 创建目录 consul_1.15.1,我们的目的是把本次实验的东西都放在这个目录下
进入到刚才创建的目录 consul_1.15.1
执行命令 mkdir nod1 存放consul节点1的数据
执行命令 mkdir nod2 存放consul节点2的数据
执行命令 mkdir nod3 存放consul节点3的数据
最终如下图
4. 进入目录/usr/bin/consul_1.15.1/node1,创建config.json,内容如下
{
"datacenter": "dc1",
"data_dir": "/usr/bin/consul_1.15.1/node1",
"log_level": "INFO",
"server": true,
"node_name": "node1",
"ui": true,
"bind_addr": "192.168.5.47",
"client_addr": "192.168.5.47",
"advertise_addr": "192.168.5.47",
"bootstrap_expect": 3,
"ports":{
"http": 8500,
"dns": 8600,
"server": 8300,
"serf_lan": 8301,
"serf_wan": 8302
}
}
这里逐个字段解析一下
"datacenter": "dc1" 指定数据中心的名字,不设置时默认为dc,不同的cosul节点可以共用同一个数据中心
"data_dir": "/usr/bin/consul_1.15.1/node1" 也就是本文件所在的目录,表consul的数据存放路径,启动时默认所有以.json结尾的文件都会读
"log_level": "INFO" 指定consul的日志级别为INFO
"server": true 以server模式启动,不设置时默认以client模式启动,仅client模式不能提供服务,必须搭配server模式的consul才行
"node_name": "node1" 本consul节点的名字,该名字在集群内不重复即可。这里暂用node1表第一个consul节点服务
"ui": true 使用consul自带的UI界面
"bind_addr": "192.168.5.47" 内部集群通信,本consul节点绑定的地址,这里设为本机IP
"client_addr": "192.168.5.47" 绑定的客户端接口地址,客户端可以通过该地址连接到本consul
"advertise_addr": "192.168.5.47" 内部集群通信时广播出去的IP地址,不设置时默认使用bind_addr属性的IP作为集群内广播
"bootstrap_expect": 3 表consul集群期望的consul节点数量,consul会等待这么多个consul节点可用时才会开始搭建集群,选举leader节点
"ports" 字段内部
"http": 8500 提供http服务的端口
"grpc_tls": 8503 consul1.14新添加,用于GRPC加密
"dns": 8600 提供dns服务的端口
"server": 8300 选取Leader节点(raft协议通信)和提供RPC调用时,consul节点之间的通信端口
"serf_lan": 8301 集群通信端口,用在LAN网
"serf_wan": 8302 数据中心通信端口,用在WAN网
5. 启动节点1的consul,运行命令 nohup /usr/bin/consul agent -config-file=/usr/bin/consul_1.15.1/node1/config.json >/usr/bin/consul_1.15.1/node1/consul.log 2>&1 &
再运行命令 ps axu |grep consul 可以看到consul已经启动起来了,如下图
6. 在浏览器上输入地址 http://192.168.5.47:8500,consul会自动转到 192.168.5.47:8500/ui/dc1/services 可以看到此时consul返回了错误,“No cluster leader”,意为consul进程启动成功了,但是没有leader节点,不能提供任何服务
7. 进入目录/usr/bin/consul_1.15.1/node2,创建config.json,内容如下
注意:data_dir目录改成了node2的目录,节点名字改为node2,IP没变,端口都增加了10,比如node1的8500,node2这里就改成了8510等等
{
"datacenter": "dc1",
"data_dir": "/usr/bin/consul_1.15.1/node2/",
"log_level": "INFO",
"server": true,
"node_name": "node2",
"ui": true,
"bind_addr": "192.168.5.47",
"client_addr": "192.168.5.47",
"advertise_addr": "192.168.5.47",
"bootstrap_expect": 3,
"ports":{
"http": 8510,
"grpc_tls": 8513,
"dns": 8610,
"server": 8310,
"serf_lan": 8311,
"serf_wan": 8312
}
}
8. 启动节点2的consul,运行命令 nohup /usr/bin/consul agent -config-file=/usr/bin/consul_1.15.1/node2/config.json -retry-join=192.168.5.47:8301 >/usr/bin/consul_1.15.1/node2/consul.log 2>&1 &
解释下 -retry-join=192.168.5.47:8301 是为了让本节点node2加入到node1的集群中
再运行命令 ps axu |grep consul 可以看到consul已经启动起来了,如下图
9. 进入目录/usr/bin/consul_1.15.1/node3,创建config.json,内容如下
注意:data_dir目录改成了node3的目录,节点名字改为node3,IP没变,端口再次增加了10,比如node2的8510,node3这里就改成了8520等等
{
"datacenter": "dc1",
"data_dir": "/usr/bin/consul_1.15.1/node3/",
"log_level": "INFO",
"server": true,
"node_name": "node3",
"ui": true,
"bind_addr": "192.168.5.47",
"client_addr": "192.168.5.47",
"advertise_addr": "192.168.5.47",
"bootstrap_expect": 3,
"ports":{
"http": 8520,
"grpc_tls": 8523,
"dns": 8620,
"server": 8320,
"serf_lan": 8321,
"serf_wan": 8322
}
}
10. 启动节点3的consul,运行命令 nohup /usr/bin/consul agent -config-file=/usr/bin/consul_1.15.1/node3/config.json -retry-join=192.168.5.47:8301 >/usr/bin/consul_1.15.1/node3/consul.log 2>&1 &
同样的 -retry-join=192.168.5.47:8301 是为了让本节点node3加入到node1的集群中
再运行命令 ps axu |grep consul 可以看到consul已经启动起来了,至此3个consul节点都开起来了,如下图
11. 在浏览器上输入地址 http://192.168.5.47:8500,consul会自动转到 192.168.5.47:8500/ui/dc1/services 可以看到此时consul集群已经成功开起来了
运行命令 /usr/bin/consul members -http-addr=192.168.5.47:8500 可以查看集群内所有的节点
点击左侧的Nodes,可以查看集群内所有的consul节点,而且node1被选举为leader节点
12. 为了测试consul集群的高可用,也就是自动选举功能,我们模拟主节点异常断掉时的情况
然后在浏览器上输入地址 http://192.168.5.47:8510 因为我们关掉的是主节点,也就是192.168.5.47:8500的节点,UI肯定是打不开了,所以我们这次查看第二个node节点,也就是192.168.5.47:8510的地址。可以看到consul集群仍在,重新选举了node2作为新的leader