Consul
一、基本概念
支持多数据中心下、支持ACL访问控制
-
Agent
Agent是长期运行在每个consul集群成员节点上守护进程。通过命令consul agent启动。Agent有client和server两种模式。由于每个节点都必须运行agent,所有节点要么是client要么是server。所有的Agent都可以调用DNS或HTTP API,并负责检查和维护服务同步。 -
client
运行client模式的Agent,将所有的RPCs转发到Server。Client是相对无状态的。Client唯一所做的是在后台参与LAN gossip pool。只消耗少量的资源,少量的网络带宽。 -
Server
运行Server模式的Agent,参与Raft quorum,维护集群的状态,响应RPC查询,与其他数据中心交互WAN gossip,转发查询到Leader或远程数据中心。 -
Datacenter
数据中心的定义似乎是显而易见的,有一些细节是必须考虑的。例如,在EC2,多个可用性区域是否被认为组成了单一的数据中心?我们定义数据中心是在同一个网络环境中——私有的,低延迟,高带宽。这不包括基于公共互联网环境,但是对于我们而言,在同一个EC2的多个可用性区域会被认为是一个的数据中心。 -
Consensus
当本系列文档中,consensus,意味着leader election协议,以及事务的顺序。由于这些事务是基于一个有限状态机,consensus的定义意味着复制状态机的一致性。 -
Gossip
consul是建立在Serf之上,提供了完成的Gossip协议,用于成员维护故障检测、事件广播。详细细节参见gossip documentation。这足以知道gossip是基于UDP协议实现随机的节点到节点的通信,主要是在UDP。 -
LAN Gossip
指的是LAN gossip pool,包含位于同一个局域网或者数据中心的节点。 -
WAN Gossip
指的是WAN gossip pool,只包含server节点,这些server主要分布在不同的数据中心或者通信是基于互联网或广域网的。 -
RPC
远程过程调用。是允许client请求服务器的请求/响应机制。
Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件.
Consul 由 HashiCorp公司用Go语言开发, 基于Mozilla Public License 2.0的协议进行开源.
Consul 支持健康检查,并允许 HTTP 和 DNS 协议调用 API 存储键值对.
命令行超级好用的虚拟机管理软件 vgrant 也是 HashiCorp 公司开发的产品.
一致性协议采用 Raft 算法,用来保证服务的高可用. 使用 GOSSIP 协议管理成员和广播消息, 并且支持 ACL 访问控制.
参数说明
–net=host docker参数, 使得docker容器越过了net namespace的隔离,免去手动指定端口映射的步骤
-server consul支持以server或client的模式运行, server是服务发现模块的核心, client主要用于转发请求
-advertise 将本机私有IP传递到consul
-bootstrap-expect 指定consul将等待几个节点连通,成为一个完整的集群
-retry-join 指定要加入的consul节点地址,失败会重试, 可多次指定不同的地址
-client consul绑定在哪个client地址上,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1
-bind 该地址用来在集群内部的通讯,集群内的所有节点到地址都必须是可达的,默认是0.0.0.0
allow_stale 设置为true, 表明可以从consul集群的任一server节点获取dns信息, false则表明每次请求都会经过consul server leader
架构图
二、环境准备
操作系统:Centos7.4
IP地址规划
192.168.64.101 devops-consul-server01
192.168.64.102 devops-consul-server02
192.168.64.103 devops-consul-server03
三、部署安装
1、下载安装包
wget https://releases.hashicorp.com/consul/1.8.4/consul_1.8.4_linux_amd64.zip
2、解压
unzip consul_1.8.4_linux_amd64.zip
3、拷贝到/usr目录下
mv consul /usr/consul
3、Consul 启动
cd /usr/consul
./consul agent -server -bootstrap -ui -data-dir=/tmp/consul-data -bind=192.168.64.101 -client=0.0.0.0 -node=n1 -dc=dc1
./consul agent -server -join=192.68.64.101 -ui -data-dir=/tmp/consul-data -bind=192.168.64.102 -client=0.0.0.0 -node=n2 -dc=dc1
./consul agent -server -join=192.168.64.101 -ui -data-dir=/tmp/consul-data -bind=192.168.64.103 -client=0.0.0.0 -node=n3 -dc=dc1
4、查看集群状态
consul members
Node Address Status Type Build Protocol DC Segment
n1 192.168.64.101:8301 alive server 1.8.4 2 dc1 <all>
n2 192.168.64.102:8301 alive server 1.8.4 2 dc1 <all>
n3 192.168.64.103:8301 alive server 1.8.4 2 dc1 <all>
效果图:
5、开机自启动
- 新建consul.sevice文件
vi /lib/systemd/system/consul.service
在consul.sevice中配置启动命令,其中ExecStart=/usr/bin/consul agent -config-dir /etc/consul.d 就是执行命令,/usr/bin/consul实际安装目录,根据情况修改
[Unit]
Description=Consul
After=network.target
[Service]
ExecStart=/usr/bin/consul agent -config-dir /etc/consul.d
KillSignal=SIGINT
[Install]
WantedBy=multi-user.target
按“Esc+ shift : + wq”保存,若忘记安装目录,可用 whereis consul命令查询
- 创建执行命令文件目录
mkdir -p /etc/consul.d/
- 新建命令文件,并在此文件中输入下面的代码,需根据时间情况修改,保存
vi /etc/consul.d/server.json
{
"datacenter": "bc-dc-1",
"data_dir": "/tmp/consul",
"log_level": "INFO",
"node_name": "bc-dc-1",
"server": true,
"ui": true,
"acl_enforce_version_8":false,
"bootstrap": true,
"client_addr": "0.0.0.0",
"bind_addr": "192.168.0.1",
"advertise_addr_wan": "192.168.0.1",
"domain":"consul",
"ports":{
"dns": 53
},
"telemetry": {
"statsd_address": "127.0.0.1:8125"
}
}
可通过/usr/bin/consul agent -config-dir /etc/consul.d 这个命令直接执行,测试看是否正常
reboot重启验证开机自动重启
reboot