Consul实践之Consul是什么
https://note.aiwaly.com/note/59d99e9fcbfa2f12e6000001
官方文档
https://www.consul.io/docs/install/index.html
Consul 原理和使用简介
https://note.aiwaly.com/note/5a2296dfcbfa2f69bb000003
Spring Cloud Consul 服务治理实现
https://segmentfault.com/a/1190000012245512
consul集群搭建参考
https://www.cnblogs.com/shanyou/p/6286207.html
实际配置实例
#server 配置
consul agent -server -bootstrap -dev -bind 172.16.11.106 -data-dir=/data/consuldata/consuldata01/ -datacenter r102
#带ui的 server配置
consul agent -server -bootstrap-expect 2 -data-dir=/data/consuldata/consuldata01/ -datacenter r102 -client 0.0.0.0 -ui &
#加入集群配置
/data/apps/bin/consul agent -server -data-dir=/data/consuldata/consuldata01/ -datacenter r105 -client 0.0.0.0 -join 10.26.105.23
#agent 其他配置
consul agent -dev -bind 172.16.11.106 -data-dir=/data/consuldata/consuldata01/ -datacenter r102
/data/apps/bin/consul agent -server -data-dir=/data/consuldata/consuldata01/ -datacenter r105 -client 0.0.0.0 -join 10.26.105.23
开启Bootstrap Server
一开始学习consul, 我们需要让consul 运行起来。consul server推荐至少在3~5个之间,推荐的方法是一开始启动其中一台server,并且配置到bootstrap的模式,该模式node可以指定自己作为leader,而不用进行选举。然后再依次启动其他server,配置为非bootstrap的模式。最后把第一个serverbootstrap模式停止,重新以非bootstrap模式启动,这样server之间就可以自动选举leader。
在上面的表中,我们需要指定server 1 做为bootstrap server,可以run下面的命令,以下是启动的过程。可以看到bootstrap模式下配置自己为leader
agent有各种各样的配置项可以在命令行或者配置文件进行定义,所有的配置项都是可选择的,当加载配置文件的时候,consul从配置文件或者配置目录加载配置。后面定义的配置会合并前面定义的配置,但是大多数情况下,合并的意思是后面定义的配置会覆盖前面定义的配置,但是有些情况,例如event句柄,合并仅仅是添加到前面定义的句柄后面。consul重新加载配置文件也支持以信号的方式接收update信号。
下面看看命令行参数:
-advertise:通知展现地址用来改变我们给集群中的其他节点展现的地址,一般情况下-bind地址就是展现地址
-bootstrap:用来控制一个server是否在bootstrap模式,在一个datacenter中只能有一个server处于bootstrap模式,当一个server处于bootstrap模式时,可以自己选举为raft leader。
-bootstrap-expect:在一个datacenter中期望提供的server节点数目,当该值提供的时候,consul一直等到达到指定sever数目的时候才会引导整个集群,该标记不能和bootstrap公用
-bind:该地址用来在集群内部的通讯,集群内的所有节点到地址都必须是可达的,默认是0.0.0.0
-client:consul绑定在哪个client地址上,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1
-config-file:明确的指定要加载哪个配置文件
-config-dir:配置文件目录,里面所有以.json结尾的文件都会被加载
-data-dir:提供一个目录用来存放agent的状态,所有的agent允许都需要该目录,该目录必须是稳定的,系统重启后都继续存在
-dc:该标记控制agent允许的datacenter的名称,默认是dc1
-encrypt:指定secret key,使consul在通讯时进行加密,key可以通过consul keygen生成,同一个集群中的节点必须使用相同的key
-join:加入一个已经启动的agent的ip地址,可以多次指定多个agent的地址。如果consul不能加入任何指定的地址中,则agent会启动失败,默认agent启动时不会加入任何节点。
-retry-join:和join类似,但是允许你在第一次失败后进行尝试。
-retry-interval:两次join之间的时间间隔,默认是30s
-retry-max:尝试重复join的次数,默认是0,也就是无限次尝试
-log-level:consul agent启动后显示的日志信息级别。默认是info,可选:trace、debug、info、warn、err。
-node:节点在集群中的名称,在一个集群中必须是唯一的,默认是该节点的主机名
-protocol:consul使用的协议版本
-rejoin:使consul忽略先前的离开,在再次启动后仍旧尝试加入集群中。
-server:定义agent运行在server模式,每个集群至少有一个server,建议每个集群的server不要超过5个
-syslog:开启系统日志功能,只在linux/osx上生效
-ui-dir:提供存放web ui资源的路径,该目录必须是可读的
-pid-file:提供一个路径来存放pid文件,可以使用该文件进行SIGINT/SIGHUP(关闭/更新)agent
[root@aws72-16-11-106 ~]# curl 'http://localhost:8500/v1/agent/members?segment=_all'
[
{
"Name": "aws172-16-11-106.in.aiwaly.com",
"Addr": "172.16.11.106",
"Port": 8301,
"Tags": {
"bootstrap": "1",
"build": "1.0.1:9564c29",
"dc": "r102",
"id": "3c628240-3493-346f-565b-f46aec06618b",
"port": "8300",
"raft_vsn": "3",
"role": "consul",
"segment": "",
"vsn": "2",
"vsn_max": "3",
"vsn_min": "2",
"wan_join_port": "8302"
},
"Status": 1,
"ProtocolMin": 1,
"ProtocolMax": 5,
"ProtocolCur": 2,
"DelegateMin": 2,
"DelegateMax": 5,
"DelegateCur": 4
}
]
端口介绍
8500,客户端http api接口
8600,客户端DNS服务端口
8400,客户端RPC通信端口
8300,集群server RPC通信接口
8301,集群DC内部通信接口
8302,集群DC之间通信接口
consul的主要接口是RESTful HTTP API,该API可以用来增删查改nodes、services、checks、configguration
所有的endpoints主要分为以下类别:
kv - Key/Value存储
agent - Agent控制
catalog - 管理nodes和services
health - 管理健康监测
session - Session操作
acl - ACL创建和管理event - 用户Events
status - Consul系统状态
agent endpoints:agent endpoints用来和本地agent进行交互,一般用来服务注册和检查注册,支持以下接口
/v1/agent/checks : 返回本地agent注册的所有检查(包括配置文件和HTTP接口)
/v1/agent/services : 返回本地agent注册的所有 服务
/v1/agent/members : 返回agent在集群的gossip pool中看到的成员
/v1/agent/self : 返回本地agent的配置和成员信息/v1/agent/join/<address>
: 触发本地agent加入node/v1/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的服务项
catalog endpoints:catalog endpoints用来注册/注销nodes、services、checks
/v1/catalog/register : Registers a new node, service, or check/v1/catalog/deregister : Deregisters a node, service, or check/v1/catalog/datacenters : Lists known datacenters
/v1/catalog/nodes : Lists nodes in a given DC
/v1/catalog/services : Lists services in a given DC
/v1/catalog/service/<service> : Lists the nodes in a given service
/v1/catalog/node/<node> : Lists the services provided by a node
health endpoints:health
endpoints用来查询健康状况相关信息,该功能从catalog中单独分离出来
/v1/healt/node/<node>: 返回node所定义的检查,可用参数?dc=
/v1/health/checks/<service>: 返回和服务相关联的检查,可用参数?dc=
/v1/health/service/<service>: 返回给定datacenter中给定node中service
/v1/health/state/<state>: 返回给定datacenter中指定状态的服务,state可以是"any", "unknown", "passing", "warning", or "critical",可用参数?dc=
session endpoints:session endpoints用来create、update、destory、query sessions
/v1/session/create: Creates a new session
/v1/session/destroy/<session>: Destroys a given session
/v1/session/info/<session>: Queries a given session
/v1/session/node/<node>: Lists sessions belonging to a node
/v1/session/list: Lists all the active sessions
acl endpoints:acl endpoints用来create、update、destory、query acl
/v1/acl/create: Creates a new token with policy
/v1/acl/update: Update the policy of a token
/v1/acl/destroy/<id>: Destroys a given token
/v1/acl/info/<id>: Queries the policy of a given token
/v1/acl/clone/<id>: Creates a new token by cloning an existing token
/v1/acl/list: Lists all the active tokens
status endpoints:status endpoints用来或者consul 集群的信息
/v1/status/leader : 返回当前集群的Raft leader
/v1/status/peers : 返回当前集群中同事
服务注册:
- http方式
直接调用/v1/agent/service/register接口注册即可,需要注意的是:http method为PUT提交方式
2:通过配置文件的方式静态注册curl -X PUT -d '{"id": "jetty","name": "test1111","address": "localhost","port": 8500,"tags": ["dev"],"checks": [{"http": "http://localhost:8500/","interval": "5s"}]}' http://localhost:8500/v1/agent/service/register
创建文件夹/etc/consul.d
.d代表有许多配置文件在里面
vim /consul.d/jetty.json 内容如下:
{
"service":{
"id": "jetty",
"name": "jetty",
"address": "192.168.1.200",
"port": 8080,
"tags": ["dev"],
"checks": [
{
"http": "http://192.168.1.200:8080/health",
"interval": "5s"
}
]
}
}
- 使用python api 注册
http://python-consul.readthedocs.io/en/v0.7.0/
中文consul翻译帮助文档
http://consul.la/intro/what-is-consulconsul 服务模板
https://github.com/hashicorp/consul-template
FAQ
consul UI用127可以访问,指定ip无法访问
./consul agent -dev
-client 0.0.0.0 -ui