Consul server集群安装
1、机器准备
-
准备三台机器:2CPU 4G内存
-
修改三台机器的hostname分别为consul1、consul2、consul3
-
配置host
vim /etc/hosts
10.0.0.11 consul1
10.0.0.12 consul2
10.0.0.13 consul3
2. 创建相应的目录
mkdir -p /opt/server/consul
mkdir -p /data/logs/consul
mkdir -p /data/consul/data
mkdir -p /data/consul/config
mkdir -p /data/consul/run
3. 下载安装包
wget https://releases.hashicorp.com/consul/1.6.1/consul_1.6.1_linux_amd64.zip
unzip consul_1.6.1_linux_amd64.zip
cp consul /usr/local/bin/
4、编写启动脚本
cd /opt/server/consul
vim start.sh
- consul1(注意node、bind参数)
#!/bin/bash
consul agent -server -bootstrap-expect=3 \
-log-file=/data/logs/consul/consul.log \
-log-rotate-bytes=104857600 \
-log-rotate-max-files=10 \
-data-dir=/data/consul/data \
-config-dir=/data/consul/config \
-pid-file=/data/consul/run/consul.pid \
-bind=10.0.0.11 \
-client=0.0.0.0 \
-datacenter=shenzhen \
-ui
- consul2(注意node、bind、join参数)
#!/bin/bash
consul agent -server -bootstrap-expect=3 \
-log-file=/data/logs/consul/consul.log \
-log-rotate-bytes=104857600 \
-log-rotate-max-files=10 \
-data-dir=/data/consul/data \
-config-dir=/data/consul/config \
-pid-file=/data/consul/run/consul.pid \
-bind=10.0.0.12 \
-client=0.0.0.0 \
-datacenter=shenzhen \
-join=10.0.0.11 \
-ui
- consul3(注意node、bind、join参数)
#!/bin/bash
consul agent -server -bootstrap-expect=3 \
-log-file=/data/logs/consul/consul.log \
-log-rotate-bytes=104857600 \
-log-rotate-max-files=10 \
-data-dir=/data/consul/data \
-config-dir=/data/consul/config \
-pid-file=/data/consul/run/consul.pid \
-bind=10.0.0.13 \
-client=0.0.0.0 \
-datacenter=shenzhen \
-join=10.0.0.11 \
-ui \
命令参数说明
-
-server:定义agent运行在server模式还是Client模式,提供时即为Server端,每个集群至少有一个server并且每台机器上不要超过5个dataceter.所有服务器采用一致性算法Raft保证数据一致,确保在故障的情况下的可用性。
-
-bootstrap-expect:在一个datacenter中期望提供的server节点数目,当该值提供的时候,consul一直等到达到指定sever数目的时候才会引导整个集群,该标记不能和bootstrap共用(推荐使用的方式)
-
-log-file
: 将所有Consul代理日志消息重定向到一个文件。这可以用完整路径和日志名指定。如果路径没有文件名,则文件名默认为“consul-{timestamp}.log”。可以与[-log rotate bytes]和[-log rotate duration]结合使用,以获得细粒度的日志旋转体验。 -
-log-rotate-bytes
- 指定在日志需要旋转之前应写入日志的字节数。除非指定,否则可以写入日志文件的字节数没有限制. -
-log-rotate-duration
- 要指定日志在需要旋转之前应写入的最长持续时间。必须是持续时间值,如30秒。默认值为24小时. -
-log-rotate-max-files
- 指定要保留的旧日志文件存档的最大数目。默认为0(不删除任何文件)。设置为-1以在创建新日志文件时丢弃旧日志文件. -
-data-dir:提供一个目录用来存放agent的状态,所有的agent允许都需要该目录,该目录必须是稳定的,系统重启后都继续存在
-
-node:节点在集群中的名称,在一个集群中必须是唯一的,默认是该节点的主机名(代表一个机器)
-
-datacenter:该标记控制agent运行的datacenter的名称,默认是dc1
-
-pid-file
-此标志提供代理存储其PID的文件路径。这对于发送信号很有用(例如,“SIGINT”关闭代理或“SIGHUP”更新check define
赋予可执行权限
chmod +x start.sh
4、将consul注册为Systemd服务
- 创建一个用于启动Consul的专有用户
useradd -M -s /sbin/nologin consul
chown -R consul.consul /opt/server/consul
chown -R consul.consul /data/logs/consul
chown -R consul.consul /data/consul/data
chown -R consul.consul /data/consul/config
chown -R consul.consul /data/consul/run
- 创建Systemd配置文件
cd /usr/lib/systemd/system/
vim consul.service
[Unit]
Description=consul
After=network.target
[Service]
User=consul
Group=consul
ExecStart=/opt/server/consul/start.sh
KillSignal=SIGTERM
[Install]
WantedBy=multi-user.target
这时Kill用的SIGTERM
信号,因为SIGTERM
信号在集群环境下可以避免leader重选。SIGINT和SIGTERM的区别:
-
SIGINT与字符ctrl+c关联,SIGTERM没有任何控制字符关联。
-
SIGINT只能结束前台进程,SIGTERM则不是。
-
SIGTERM可以被阻塞、处理和忽略。KILL命令的默认不带参数发送的信号就是SIGTERM,SIGTERM可以让程序优雅的退出。
6、 启动consul
systemctl start consul
6、查询服务状态
systemctl status consul
8、查询日志
tailf /data/logs/consul/consul.log
9、 集群状态查看
[root@dev004 tmp]# consul operator raft list-peers
Node ID Address State Voter RaftProtocol
consul1 ca182aa4-2e1e-b7d3-91b4-fa1e4cfb332a 10.0.0.11:8300 leader true 3
consul2 62534895-35a4-5204-aca8-d7c89118c747 10.0.0.12:8300 follower true 3
consul3 c333280d-d9e0-1f51-9249-637aedc19c7e 10.0.0.13:8300 follower true 3
10、 查看members状态
[root@dev004 tmp]# consul members
Node Address Status Type Build Protocol DC Segment
consul1 10.0.0.11:8301 alive server 1.6.1 2 shenzhen <all>
consul2 10.0.0.12:8301 alive server 1.6.1 2 shenzhen <all>
consul3 10.0.0.13:8301 alive server 1.6.1 2 shenzhen <all>
11、访问UI
打开浏览器访问 http://10.0.0.11:8500
12、删除注册的服务
去client节点执行
curl http://127.0.0.1:8500/v1/agent/service/deregister/service2-8080
或者
consul services deregister -id=service2-8080