Consul集群部署

283 阅读6分钟

本文已参与「新人创作礼」活动.一起开启掘金创作之路。

image.png 这个是官网提供的一个事例系统图,图中的Server是consul服务端高可用集群,Client是consul客户端。consul客户端不保存数据,客户端将接收到的请求转发给响应的Server端。Server之间通过局域网或广域网通信实现数据一致性。每个Server或Client都是一个consul agent。Consul集群间使用了GOSSIP协议通信和raft一致性算法。上面这张图涉及到了很多术语:

Agent——agent是一直运行在Consul集群中每个成员上的守护进程。通过运行 consul agent来启动。

agent可以运行在client或者server模式。指定节点作为client或者server是非常简单的,除非有其他agent实例。所有的agent都能运行DNS或者HTTP接口,并负责运行时检查和保持服务同步。

Client——一个Client是一个转发所有RPC到server的代理。这个client是相对无状态的。client唯一执行的后台活动是加入LAN

gossip池。这有一个最低的资源开销并且仅消耗少量的网络带宽。

Server——一个server是一个有一组扩展功能的代理,这些功能包括参与Raft选举,维护集群状态,响应RPC查询,与其他数据中心交互WAN gossip和转发查询给leader或者远程数据中心。

DataCenter——虽然数据中心的定义是显而易见的,但是有一些细微的细节必须考虑。例如,在EC2中,多个可用区域被认为组成一个数据中心?我们定义数据中心为一个私有的,低延迟和高带宽的一个网络环境。这不包括访问公共网络,但是对于我们而言,同一个EC2中的多个可用区域可以被认为是一个数据中心的一部分。

Consensus——在我们的文档中,我们使用Consensus来表明就leader选举和事务的顺序达成一致。由于这些事务都被应用到有限状态机上,Consensus暗示复制状态机的一致性。

Gossip——Consul建立在Serf的基础之上,它提供了一个用于多播目的的完整的gossip协议。Serf提供成员关系,故障检测和事件广播。更多的信息在gossip文档中描述。这足以知道gossip使用基于UDP的随机的点到点通信。

LAN Gossip——它包含所有位于同一个局域网或者数据中心的所有节点。 WAN

Gossip——它只包含Server。这些server主要分布在不同的数据中心并且通常通过因特网或者广域网通信。

启动参数术语

server: 以server身份启动。

bootstrap-expect:集群要求的最少server数量,当低于这个数量,集群即失效。

data-dir:data存放的目录,更多信息请参阅consul数据同步机制

node:节点id,在同一集群不能重复。

bind:监听的ip地址。

client 客户端的ip地址

& :在后台运行,此为linux脚本语法

ui:启动web客户端

更多参数及配置说明见consul官方说明文档 www.consul.io/docs/agent/…


一、 简单集群的搭建:

CentOS 7.8192.168.30.128Server
CentOS 7.8192.168.30.129Server
CentOS 7.8192.168.30.130Server
CentOS 7.8192.168.30.131Client

1,下载consul的文件包

创建文件夹mkdir /software && cd /softwaresudo wget releases.hashicorp.com/consul/0.7.… consul_0.7.2_linux_amd64.zip,移动到mv consul /usr/local/bin/ 这个目录下 使用它成为全局的命令

2,关闭全部防火墙

systemctl stop firewalld && systemctl disable firewalld

3,检测安装是否成功

consul version --出现版本信息就代表成功

consul -autocomplete-install #命令补全【见附录】

4,启动consul server

mkdir -p /consul/{config,data}

consul agent -server -bootstrap-expect=3 \

 -data-dir=/consul/data \

 -node=agent128 -bind=192.168.30.128 \

 -enable-script-checks=true -config-dir=/consul/config \

 -client 0.0.0.0 -ui &> /consul/data/consul.log &

参数信息:

-node:节点的名称

-bind:绑定的一个地址,用于节点之间通信的地址,可以是内外网,必须是可以访问到的地址

-server:表示这个节点是个Server

-bootstrap-expect:表示期望提供的Server节点数目。数目一达到,它就会被激活,然后就是leader了

-data-dir:Agent用于存储状态的数据目录,这是所有Agent所必需的

-datacenter:指明数据中心的名字,默认是"dc1"。同一数据中心中的节点应位于单个LAN上

-client:将Client接口(包括HTTP和DNS服务器)绑定到的地址

-ui:启动UI

5,其他两台机器也创建 consul server,与 192.168.30.128 类似。

• 创建 consul client:

mkdir -p /consul/{config,data}

consul agent -data-dir=/consul/data \

 -node=agent131 -bind=192.168.30.131 \

 -enable-script-checks=true -config-dir=/consul/config \

 -client 0.0.0.0 -ui &> /consul/data/consul.log &

6,加入集群

除了128的之外别的机器创建server后都加入集群

consul join 192.168.30.128

7,检测

consul members

Node  Address  Status Type  Build Protocol  DC  Segment

agent128  192.168.30.128:8301  alive  server 1.8.3 2  dc1  

agent129  192.168.30.129:8301  alive  server 1.8.3 2  dc1  

agent130  192.168.30.130:8301  alive  server 1.8.3 2  dc1  

agent131  192.168.30.131:8301  alive  client 1.8.3 2  dc1  

可以看得,集群中有3个server和1个client,它们在数据中心dc1中。

访问页面可视化的界面浏览器输入http://192.168.30.128:8500/ui,访问consul ui界面,

 

附录:

这里拓展下consul常用的命令参数

acl 与 Consul 的ACL进行交互

agent 运行一个 Consul agent

catalog 与 Consul 的目录进行交互

config 与 Consul 的配置进行交互

connect 与 Consul 的Connect子系统进行交互

debug 记录 Consul operators 的调试归档

event 触发一个新事件

exec 在 Consul 节点上执行命令

force-leave  强制一个集群成员进入离开状态,一般用来强制删除发生故障或已关闭且没有正常离开的节点

info 对 Consul operators 提供调试的信息

intention 与通过Connect对服务的访问控制交互

join 将 Consul agent 加入集群

keygen 生成新的加密密钥

keyring 检查和修改 gossip 池中使用的加密密钥

kv 与 k/v 存储进行交互

leave Consul agent 正常离开集群并关闭

lock 在 k/v 存储中的给定前缀处创建一个锁

login 使用所请求的auth方法将提供的第三方凭据交换为新创建的 Consul ACL令牌

logout 销毁从 consul login 命令中创建的 Consul 令牌

maint 提供对节点或服务的维护模式的控制

members 列出 Consul 集群的所有成员

monitor 用于连接并追踪正在运行的 Consul agent 的日志

operator 为 Consul operators 提供集群级别的工具

reload 触发 agent 配置文件的重载

rtt 估计两个节点之间的网络往返时间

services 与注册的服务进行交互

snapshot 保存、还原和检查 Consul Server 状态以进行灾难恢复

tls 内置帮助创建Consul TLS的CA和证书

validate 对 Consul 的配置文件或目录执行完整性测试

version 显示 Consul 版本信息

watch 监视 Consul 特定数据视图(节点列表,服务成员,k/v等)中的更改