> 文章列表 > consul集群搭建教程 - 单机器集群

consul集群搭建教程 - 单机器集群

consul集群搭建教程 - 单机器集群

简言

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