Consul server集群安装

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的区别:

  1. SIGINT与字符ctrl+c关联,SIGTERM没有任何控制字符关联。

  2. SIGINT只能结束前台进程,SIGTERM则不是。

  3. 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
Consul是一种用于服务发现、配置管理和分布式协调的工具。Consul采用了分布式一致性协议,可以确保在多个节点之间进行数据同步。 Consul ServerConsul集群中的一个角色,用于存储和处理Consul的元数据和配置信息。Consul Server之间需要进行数据同步,以确保整个集群的数据一致性。 Consul Server之间的数据同步是通过Raft一致性协议实现的。Raft协议是一种强一致性的分布式一致性协议,它通过选举一个Leader节点来负责处理所有的写操作,并将写操作的结果同步给其他节点。 当一个Consul Server接收到写操作时,它会将该写操作发送给Leader节点。Leader节点会将该写操作在自身上执行,并将执行结果发送给其他节点。其他节点收到执行结果后,会更新自身的数据,从而实现数据同步。 Consul Server之间的数据同步是实时的,即时更新。只要有写操作发生,就会立即进行同步,确保所有节点之间的数据保持一致。 在Consul集群中,由于多个Consul Server之间都能处理读操作,所以对于读操作来说,可以在任何一个Consul Server上进行,而不需要特定地访问Leader节点。 总而言之,Consul Server之间的数据同步是通过Raft协议实现的,实现了强一致性的数据复制和同步。这确保了Consul集群中的每个节点都拥有相同的元数据和配置信息,从而保证了整个集群的可靠性和一致性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值