目录
1.consul安装
1.1 先安装go环境
2.2 安装consul
wget https://releases.hashicorp.com/consul/1.4.0/consul_1.4.0_linux_amd64.zip
unzip consul_1.4.0_linux_amd64.zip
mv consul /usr/local/go/bin/
consul -v //成功
2.开始使用
2.1运行consul agent
consul agent -dev
2.2 查看集群成员
consul members -- -detailed 可查看详细信息
curl http://localhost:8500/v1/catalog/nodes
2.3 注册服务
mkdir /etc/consul.d -- ".d"结尾指目录包含一组配置文件
vi /etc/consul.d /web.json
{
"service": {
"name": "web",
"tags": ["rails"],
"address": "114.55.40.20",
"port": 80
}
}
consul agent -dev -config-dir=/etc/consul.d --设置配置目录,启动代理
curl -X PUT -d '{"Datacenter":"dc1","Node":"agent-two","Address":"ebg.conzhu.net","Service":{"Service":"verify","port":80}}' http://localhost:8500/v1/catalog/register -- 请求注册服务
curl -X PUT -d '{"Datacenter":"dc1","Node":"agent-two"}' http://localhost:8500/v1/catalog/deregister -- 注销服务
结果
2.4 发现服务
dig @127.0.0.1 -p 8600 web.service.consul --使用DNS查询服务
dig @127.0.0.1 -p 8600 web.service.consul SRV --使用DNS查询服务,显示服务详情
结果
curl http://localhost:8500/v1/catalog/service/web --api查询
结果
curl http://localhost:8500/v1/health/service/web --查询健康实例
结果
3.Consul 集群
3.1 部署集群
必须:
(1)集群节点设置名称 如: -node=agent-one
(2)数据存储目录 如:data-dir=/tmp/consul
指令详解:
(1) -bind =<address> #绑定监听的地址:默认0.0.0.0
(2)-data-dir=</path/to/data-dir> #存储数据的目录
(3)-config-dir =</path/to/config-dir> #注册服务配置目录
(4)-bootstrap-expect=<num> #延迟复制日志,直至预期数量的服务器陈宫加入。
(5)-enable-script-checks=<boolean> #是否允许外部脚本运行健康检查
(6)-server
--- join
(7)-join=<address> #启动时自动加入集群
(8)-retry-join=<adress> #类似 “-join” ,失败时尝试重新连接
(10)-retry-interval=30 #尝试连接等待的时间。默认:30s
(11)-retry-max=3 #尝试连接的最大次数。默认:不限制
3.2 启动代理
#启动服务代理
consul agent -server -data-dir=/tmp/consul -node=agent-one -bootstrap-expect=1 -config-dir=/etc/consul.d
#启动客户端代理
consul agent -node=agent-two -data-dir=/tmp/consul -config-dir=/etc/consul.d -enable-script-checks=true
#启动客户端代理并加入集群
consul agent -node=agent-two -data-dir=/tmp/consul -config-dir=/etc/consul.d -enable-script-checks=true -join=172.17.0.4
#或
consul agent -node=agent-two -data-dir=/tmp/consul -config-dir=/etc/consul.d -enable-script-checks=true -retry-join=172.17.0.4
3.3 加入集群
consul join 172.17.0.4
结果
查看集群节点
dns查询某个节点信息
dig @127.0.0.1 -p 8600 agent-one.node.consul
结果
3.4 离开集群
consul leave
执行结果
客户端代理结果
4 健康检查
4.1 设置健康检查文件
vi /etc/consul/web2-check.json
{
"check": {
"id": "web2",
"name": "http web2 check",
"http": "http://www.aa.com",
"tls_skip_verify": false,
"method": "GET",
"interval": "5s",
"timeout": "2s"
}
}
结果:下面是出错的情况
4.2 查询健康状况
curl http://localhost:8500/v1/health/state/critical --api进行健康检查(可以在任一节点上运行)
结果
5 KV Data
5.1 设置值
consul kv put mysql/config/max_binlog_size 100m --设置kv值(修改值会修改ModifyIndex)
consul kv put -cas -modify-index=19998 mysql/config/max_binlog_size 400m --check-and-set的原子操作
结果
5.2 查询
consul kv get mysql/config/max_binlog_size --获取值
consul kv get -detailed mysql/config/max_binlog_size --获取详细值
consul kv get -recurse [prefix] --迭代查询匹配的结果,支持前缀匹配
consul kv get -detailed -recurse [prefix] --迭代查询匹配的详细结果
结果
5.3 删除
consul kv delete mysql/config/sync_binlog --删除单个
consul kv delete -recurse [prefix] --批量删除匹配前缀的key
结果
6 常用请求url
6.1 agent
请求例子:curl http://localhost:8500/v1/agnect/services | python -m json.tool
/v1/agent/checks --获取本地agent注册的所有检查(包括配置文件和http注册)
/v1/agent/services --获取本地agent注册的所有服务
/v1/agent/members --获取集群中的成员
/v1/agent/self --获取本地agent的配置和成员信息
/v1/agent/join/<address> --触发本地agent加入node
/vq/agent/force-leave/<node> --强制删除node
/v1/agent/check/register --在本地agent增加一个检查项,使用PUT方法传输一个json格式的数据
/v1/agent/check/deregister/<checkID> --注销一个本地agent的检查项
/v1/agent/check/pass/<checkID> --设置一个本地检查项的状态为passing
/v1/agent/check/warn/<checkID> --设置一个本地检查项的状态为warning
/v1/agent/check/fail<checkID> --设置一个本地检查项的状态为critical
/v1/agent/service/register --在本地agent增加一个新的服务项,使用PUT方法传输一个json格式的数据
/v1/agent/service/deregister/<serviceID> --注销一个本地agent的服务项
6.2 status
/v1/status/leader --获取当前集群的leader(如:"172.17.0.4:8300")
/v1/status/peers --获取当前集群中的同事(如:["172.17.0.4:8300"])
6.3 catalog
/v1/catalog/register --注册一个新的service、node、check
/v1/catalog/deregister --注销一个service、node、check
/v1/catalog/datacenters --列出知道的数据中心
/v1/catalog/nodes --在给定的数据中心列出node
/v1/catalog/services --在给定的数据中心列出service
/v1/catalog/service/<service> --查看某个服务的信息
/v1/catalog/node/<node> --查看某个节点的信息
7 进阶
7.1 配置gossip加密
consul keygen -- 随机生成16bytes的字符并已转为base64
# 编写服务配置文件,保存在"/etc/consul.d"目录中
{
"datacenter": "dc1",
"node_name": "agent_one",
"data_dir": "/opt/consul",
"log_level": "INFO",
"server": true,
"encrypt": "83XxiHG3OmMng7qV8Gtaww==",
"encrypt_verify_incoming": false,
"encrypt_verify_outgoing": false
}
#启动服务
consul agent -config-dir=/etc/consul.d
结果
# 编写客户端配置文件,保存在"/etc/consul.d"目录,注意"disable_keyring_file"
{
"datacenter": "dc1",
"data_dir": "/tmp/consul",
"log_level": "INFO",
"node_name": "agent-two",
"encrypt": "83XxiHG3OmMng7qV8Gtaww==",
"disable_keyring_file": true,
"encrypt_verify_incoming": true,
"encrypt_verify_outgoing": true,
"retry_join": ["172.17.0.4"]
}
#启动客户端
consul agent -config-dir=/etc/consul.d
7.2 autopilot
#默认配置
{
"cleanup_dead_servers": true,
"last_contact_threshold": "200ms",
"max_trailing_logs": 250,
"server_stabilization_time": "10s",
"redundancy_zone_tag": "",
"disable_upgrade_migration": false,
"upgrade_version_tag": ""
}
#获取autopilot配置信息
consul operator autopilot get-config
#设置autopilot
conusl operator autopilot set-config —cleanup-dead-servers=false [...]
#查看健康状态(测试只返回已服务方式启动的节点)
curl http://localhost:8500/v1/operator/autopilot/health
一个server服务认定为健康,满足以下要求:
8 cli
8.1 catalog
consul catalog nodes -- 获取所有节点信息
consul catalog services -- 获取所有服务
consul catalog datacenters -- 获取所有数据中心
### 配置文件例子
{
"datacenter": "dc1",
"data_dir": "/tmp/consul",
"log_level": "INFO",
"log_file": "/var/lib/consul/log/consul",
"node_name": "agent-two",
"pid_file": "/var/lib/consul/consul.pid",
"encrypt": "83XxiHG3OmMng7qV8Gtaww==",
"disable_keyring_file": true,
"encrypt_verify_incoming": true,
"encrypt_verify_outgoing": true,
"retry_join": ["172.17.0.4"],
"retry_interval": "30s",
"retry_max": 0
}