概述:
Consul是一种分布式,高度可用且具有数据中心感知能力的解决方案,用于跨动态,分布式基础架构连接和配置应用程序。
特性:
-
服务发现 :Consul的客户端可用提供一个服务,比如 api 或者mysql ,另外一些客户端可用使用Consul去发现一个指定服务的提供者.通过DNS或者HTTP应用程序可用很容易的找到他所依赖的服务.
-
健康检查 :Consul客户端可用提供任意数量的健康检查,指定一个服务(比如:webserver是否返回了200 OK 状态码)或者使用本地节点(比如:内存使用是否大于90%). 这个信息可由operator用来监视集群的健康.被服务发现组件用来避免将流量发送到不健康的主机.
-
Key/Value存储: 应用程序可用根据自己的需要使用Consul的层级的Key/Value存储.比如动态配置,功能标记,协调,领袖选举等等,简单的HTTP API让他更易于使用。
-
多数据中心: Consul支持开箱即用的多数据中心.这意味着用户不需要担心需要建立额外的抽象层让业务扩展到多个区域.
基础架构图
单机部署
consul 模式简介
#CLIENT
CLIENT表示consul的client模式,就是客户端模式。是consul节点的一种模式,这种模式下,所有注册到当前节点的服务会被转发到SERVER,
本身是不持久化这些信息。
#SERVER
SERVER表示consul的server模式,表明这个consul是个server,这种模式下,功能和CLIENT都一样,唯一不同的是,
它会把所有的信息持久化的本地,这样遇到故障,信息是可以被保留的。
#SERVER-LEADER
它和其它SERVER不一样的一点是,它需要负责同步注册的信息给其它的SERVER,同时也要负责各个节点的健康监测
安装consul
consul 下载地址: https://www.consul.io/downloads
# 解压到本地可执行路径
unzip consul_1.7.3_linux_amd64.zip -d /usr/local/bin/
# 验证consul
consul -h
# 使用自动补全
consul -autocomplete-install
complete -C /usr/local/bin/consul consul
# 配置文件
{
"bind_addr": "192.168.6.3",
"bootstrap_expect": 1,
"client_addr": "192.168.6.3",
"data_dir": "/var/consul",
"datacenter": "BoyunDevops",
"disable_update_check": false,
"enable_syslog": true,
"log_level": "INFO",
"server": true,
"syslog_facility": "local0",
"ui": true,
"performance": {
"raft_multiplier": 1
}
}
# 常用参数说明
server: 以server身份启动。默认是client
bootstrap-expect:集群要求的最少server数量,当低于这个数量,集群即失效。
data-dir:data存放的目录
node:节点id,集群中的每个node必须有一个唯一的名称。默认情况下,Consul使用机器的hostname
bind:监听的ip地址。默认绑定0.0.0.0,可以不指定。表示Consul监听的地址,而且它必须能够被集群中的其他节点访问。
Consul默认会监听第一个private IP,但最好还是提供一个。生产设备上的服务器通常有好几个网卡,所以指定一个不会出错
client: 客户端的ip地址,0.0.0.0是指谁都可以访问(不加这个,下面的ui :8500无法访问)
ui: 可以访问UI界面
-config-dir指定配置文件夹,Consul会加载其中的所有文件
-datacenter 指定数据中心名称,默认是dc1
# 指定配置文件启动consul
nohup consul agent -config-file=/etc/consul/config.json > /var/log/consul.log 2>&1 &
集群模式
#集群规划
一个数据中心中server节点应该使用3台或者5台。
node-1: 192.168.6.3、 node-2: 192.168.6.4、node-3: 192.168.6.110
这里使用三台运行server模式,执行以上单机部署的步骤,主要不同的是修改下配置文件
"bind_addr": "192.168.6.3", #修改为本机地址
"bootstrap_expect": 3, #三个节点
#加入集群
在节点2和节点3上执行join加入到节点1
consul join 192.168.6.3
#查看集群状态
consul operator raft list-peers
Node ID Address State Voter RaftProtocol
vm-1 1e18a1fa-8a85-b821-ee47-29972b23cb3b 192.168.6.3:8300 follower true 3
vm-3 6ebe7097-7a3b-ea07-7de6-9d3fbe419089 192.168.6.4:8300 follower true 3
vm-2 e80032ec-5f03-0eb4-756a-ebdb8ea4cef9 192.168.6.110:8300 leader true 3
#查看consul members状态
Node Address Status Type Build Protocol DC Segment
vm-1 192.168.6.3:8301 alive server 1.7.3 2 boyundevops <all>
vm-2 192.168.6.110:8301 alive server 1.7.3 2 boyundevops <all>
vm-3 192.168.6.4:8301 alive server 1.7.3 2 boyundevops <all>
#访问Web界面
http://192.168.6.3:8500
启用acl token
启用了token访问的话,在集群下的配置
{
"acl": {
"default_policy": "deny",
"down_policy": "extend-cache",
"enabled": true,
"token_ttl": "30s",
"tokens": {
"agent": "687bd467-a93e-8558-1aaf-f7c4036c406b",
"master": "687bd467-a93e-8558-1aaf-f7c4036c406b"
}
},
"bind_addr": "192.168.6.3",
"bootstrap_expect": 3,
"client_addr": "192.168.6.3",
"data_dir": "/var/consul",
"datacenter": "BoyunDevops",
"disable_update_check": false,
"enable_syslog": true,
"log_level": "INFO",
"server": true,
"syslog_facility": "local0",
"ui": true,
"performance": {
"raft_multiplier": 1
}
}
consul服务状态备份还原
#备份: consul开启了ACL,执行consul snapshot save时必须带Management Token
consul snapshot save --http-addr=http://192.168.6.3:8500 -token=687bd467-a93e-8558-1aaf-f7c4036c406b consul_state.snap
#查看consul服务器状态文件
consul snapshot inspect consul_state.snap
# 还原consul服务器状态
consul snapshot restore --http-addr=http://192.168.6.3:8500 -token=687bd467-a93e-8558-1aaf-f7c4036c406b consul_state.snap
KV存储的导入导出
#导出所有kv键值对,注意最后一个参数是导出键值对的前缀,为空字符串说明要导出所有
consul kv export --http-addr=http://192.168.6.3:8500 -token=687bd467-a93e-8558-1aaf-f7c4036c406b '' > consul_kv.json
#导出的value为键值对Value的base64编码,使用base64 -d命令编码就可以看到原始的value值,如:
$ echo 'eyJ2ZXJzaW9uX3RpbWVzdGFtcCI6IC0xfQ==' | base64 -d
{"version_timestamp": -1}
#导入
consul kv import --http-addr=http://192.168.6.3:8500 -token=687bd467-a93e-8558-1aaf-f7c4036c406b @consul_kv.json
#@后面也可以是路径:@/usr/local/consul_kv.json