Consul集群间使用了GOSSIP协议通信和raft一致性算法。其中学习涉及到了很多术语:
1.Agent——agent是一直运行在Consul集群中每个成员上的守护进程。通过运行consul agent来启动。agent可以运行在client或者server模式。指定节点作为client或者server是非常简单的,除非有其
2.Client——一个Client是一个转发所有RPC到server的代理。这个client是相对无状态的。client唯一执行的后台活动是加入LAN gossip池。这有一个最低的资源开销并且仅消耗少量的网络带宽。
3.Server——一个server是一个有一组扩展功能的代理,这些功能包括参与Raft选举,维护集群状态,响应RPC查询,与其他数据中心交互WAN gossip和转发查询给leader或者远程数据中心。
4.DataCenter——虽然数据中心的定义是显而易见的,但是有一些细微的细节必须考虑。例如,在EC2中,多个可用区域被认为组成一个数据中心。我们定义数据中心为一个私有的,低延迟和高带宽的一个网络环境。这不包括访问公共网络,但是对于我们而言,同一个EC2中的多个可用区域可以被认为是一个数据中心的一部分。
5.Consensus——一致性,使用Consensus来表明就leader选举和事务的顺序达成一致。为了以容错方式达成一致,一般有超过半数一致则可以认为整体一致。Consul使用Raft实现一致性,进行leader选举,在consul中的使用bootstrap时,可以进行自选,其他server加入进来后bootstrap就可以取消。
6.Gossip——Consul建立在Serf的基础之上,它提供了一个用于多播目的的完整的gossip协议。Serf提供成员关系,故障检测和事件广播。Serf是去中心化的服务发现和编制的解决方案,节点失败侦测与发现,具有容错、轻量、高可用的特点。
7.LAN Gossip——它包含所有位于同一个局域网或者数据中心的所有节点。
8.WAN Gossip——它只包含Server。这些server主要分布在不同的数据中心并且通常通过因特网或者广域网通信。
9.RPC——远程过程调用。这是一个允许client请求server的请求/响应机制。
在每个数据中心,client和server是混合的。一般建议有3-5台se
同一个数据中心的所有节点都必须加入gossip协议。这意味着gossip协议包含一个给定数据中心的所有节点。这服务于几个目的:第一,不需要在client上配置server地址。发现都是自动完成的。第二,检测节点故障的工作不是放在server上,而是分布式的。这是的故障检测相比心跳机制有更高的可扩展性。第三:它用来作为一个消息层来通知事件,比如leader选举发生时。
每个数据中心的server都是Raft节点集合的一部分。这意味着它们一起工作并选出一个leader,一个有额外工作的server。leader负
server节点也作为WAN gossip Pool的一部分。这个Pool不同于LAN Pool,因为它是为了优化互联网更高的延迟,并且它只包含其他Consul server节点。这个Pool的目的是为了允许数据中心能够以low-touc
这使得数据中心之间只有一个很低的耦合,但是由于故障检测,连接缓存和复用,跨数据中心的请求都是相对快速和可靠的。
创建用户与工作目录
#创建目录
mkdir -p /usr/local/consul-cluster/{bin,conf}
mkdir -p /data/consul-cluster/data
#创建consul运行用户
useradd -s /sbin/nologin -M -U consul
#下载安装
wget -P /usr/local/consul-cluster/bin https://releases.hashicorp.com/consul/1.5.0/consul_1.5.0_linux_amd64.zip &&unzip consul_1.5.0_linux_amd64.zip && rm -rf *.zip
#目录用户授权
chown -R consul:consul /usr/local/consul-cluster /data/consul-cluster/data
配置文件
more ../conf/consul.json
{
"datacenter": "dc1",
"data_dir": "/data/consul-cluster/data",
"log_level": "INFO",
"node_name": "consul-server02",
"server": true,
"bootstrap_expect": 3,
"bind_addr": "192.168.0.234",
"client_addr": "0.0.0.0",
"pid_file":"/data/consul-cluster/consul.pid",
"retry_join": ["192.168.0.223","192.168.0.231","192.168.0.234"],
"retry_interval": "30s",
"enable_debug": false,
"rejoin_after_leave": true,
"start_join": ["192.168.0.223","192.168.0.231","192.168.0.234"],
"enable_syslog": true,
"syslog_facility": "local5"
}
启动配置
#!/bin/bash
su consul -s /bin/bash -c 'nohup /usr/local/consul-cluster/bin/consul agent -config-file=/usr/local/consul-cluster/conf/consul.json -rejoin -ui -syslog &'
常用命令
#集群状态查看
consul operator raft list-peers
#查看members状态
consul members
#set操作
consul kv put key_add value_test
#get操作
consul kv get key_add
#DNS解析查看
dig @192.168.0.234 -p 8600 consul-server02.node.consul
Consul常用端口说明
dns - The DNS server, -1 to disable. Default 8600.
http - The HTTP API, -1 to disable. Default 8500.
https - The HTTPS API, -1 to disable. Default -1 (disabled).
rpc - The CLI RPC endpoint. Default 8400.
serf_lan - The Serf LAN port. Default 8301.
serf_wan - The Serf WAN port. Default 8302.
server - Server RPC address. Default 8300.