Consul
Consul 是由 HashiCorp 开发的一个开源的服务网格解决方案,它主要用于服务发现和配置。Consul 提供了一个完整的控制平面,使得服务能够注册自身、发现其他服务以及配置管理等
这里结合Prometheus可以实现node节点的自动注册,主机管理
部署
| Bash |
|---|
| root@pts/12 # yum install -y yum-utils
root@pts/12 # yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
root@pts/12 # yum -y install consul
root@pts/12 # screen -S consul
root@pts/12 # consul agent -server -bootstrap-expect 1 -bind 172.16.1.18 -client 0.0.0.0 -data-dir=/opt/consul/ -config-dir=/etc/consul.d/ -enable-local-script-checks -log-file=/var/log/ -node=server1 -ui
|
浏览器:http://172.16.1.18:8500/
查看成员
consul members
优雅停服
consul leave
重新加载 Consul 的配置
consul reload
集群部署
3台主机分别将服务启动
| Bash |
|---|
| consul agent -server -bootstrap-expect 3 -bind 172.16.1.18 -client 0.0.0.0 -data-dir=/opt/consul/ -config-dir=/etc/consul.d/ -enable-local-script-checks -log-file=/var/log/ -node 172.16.1.18 -ui
consul agent -server -bootstrap-expect 3 -bind 172.16.1.19 -client 0.0.0.0 -data-dir=/opt/consul/ -config-dir=/etc/consul.d/ -enable-local-script-checks -log-file=/var/log/ -node 172.16.1.19 -ui
consul agent -server -bootstrap-expect 3 -bind 172.16.1.20 -client 0.0.0.0 -data-dir=/opt/consul/ -config-dir=/etc/consul.d/ -enable-local-script-checks -log-file=/var/log/ -node 172.16.1.20 -ui
|
参数一些含义
| Bash |
|---|
| server: 以server身份启动。默认是client
bootstrap-expect: 集群要求的最少server数量,当低于这个数量,集群即失效。
data-dir: data存放的目录,更多信息请参阅consul数据同步机制
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
|
加入到集群
| Bash |
|---|
| ssh 172.16.1.19
consul join 172.16.1.18
ssh 172.16.1.20
consul join 172.16.1.18
|
HTTP API使用
| Bash |
|---|
| # 查询服务,后边添加?pretty可以友好展示
curl http://172.16.1.18:8500/v1/catalog/service/consul?pretty
# ---agent本地注册---
## 本地代理注册服务的健康状态check
curl http://172.16.1.18:8500/v1/agent/checks
## services配置文件(all)
curl http://172.16.1.18:8500/v1/agent/services
## service配置文件(单个)
curl http://172.16.1.18:8500/v1/agent/service/node_172.16.1.21
## 本地service健康状态
curl http://172.16.1.18:8500/v1/agent/health/service/name/yy_node
## 注册服务
curl --request PUT --data @payload.json http://172.16.1.18:8500/v1/agent/service/register
## 注销服务
curl --request PUT http://172.16.1.18:8500/v1/agent/service/deregister/my-service-id
# ---catalog存在于server端,agent端注册之后,过一段时间会同步到catalog---
## 数据中心
curl http://172.16.1.18:8500/v1/catalog/datacenters
## 集群节点
curl http://172.16.1.18:8500/v1/catalog/nodes
## 集群服务
curl http://172.16.1.18:8500/v1/catalog/services
## 给出服务的node信息
curl http://172.16.1.18:8500/v1/catalog/service/yy_node
## 给出节点的service信息
curl http://172.16.1.18:8500/v1/catalog/node/server1
# ---health健康检查---
## node节点检查信息(本身、每个service)
curl http://172.16.1.18:8500/v1/health/node/server1
## 给出service的健康状态(所有node健康状态)
curl http://172.16.1.18:8500/v1/health/checks/yy_node
curl http://172.16.1.18:8500/v1/health/service/yy_node
## 所有异常节点信息
curl http://172.16.1.18:8500/v1/health/state/critical
|
基本注册
| Bash |
|---|
| curl -X PUT -d '{"id":"node-172.16.1.21","name": "qst-node","address": "172.16.1.21","port": 9100,"tags": ["prome","node"],"checks": [{"http": "http://172.16.1.21:9100/metrics", "interval": "300s"}]}' http://172.16.1.18:8500/v1/agent/service/register
|
删除注册
| Bash |
|---|
| curl -X PUT http://172.16.1.18:8500/v1/agent/service/deregister/node-172.16.1.21
# put请求,后边拼的是serviceId,服务名称+ip.最后是ID
|
找出检查失败的地址
| Bash |
|---|
| curl http://172.16.1.18:8500/v1/health/state/critical|python -m json.tool|grep -Eo "http://[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}:9100/metrics"|awk -F'/' '{print $3}'|awk -F':' '{print $1}' > /opt/registry_consul/critical_ip
|