点击上方"IT牧场",选择"设为星标"技术干货每日送达!
TIPS
•本文基于Consul 1.5.3,理论适用于Consul 1.6及更低版本。•安装单机版Consul详见:《安装单机版Consul》
知识预热
Consul常用命令
命令 | 解释 | 示例 |
agent | 运行一个consul agent | consul agent -dev |
join | 将agent加入到consul集群 | consul join IP |
members | 列出consul cluster集群中的members | consul members |
leave | 将节点移除所在集群 | consul leave |
参考文档
这里只列出几个常用的命令,consul有将近20个命令,本文不作展开,详见:https://www.consul.io/docs/commands/index.html[1]
consul agent
命令详解
常用选项
consul agent
命令的常用选项如下:
•-data-dir
•作用:指定agent储存状态的数据目录•这是所有agent都必须的•对于server尤其重要,因为他们必须持久化集群的状态
•-config-dir
•作用:指定service的配置文件和检查定义所在的位置•通常会指定为"某一个路径/consul.d"(通常情况下,.d表示一系列配置文件存放的目录)
•-config-file
•作用:指定一个要装载的配置文件•该选项可以配置多次,进而配置多个配置文件(后边的会合并前边的,相同的值覆盖)
•-dev
•作用:创建一个开发环境下的server节点•该参数配置下,不会有任何持久化操作,即不会有任何数据写入到磁盘•这种模式不能用于生产环境(因为第二条)
•-bootstrap-expect
•作用:该命令通知consul server我们现在准备加入的server节点个数,该参数是为了延迟日志复制的启动直到我们指定数量的server节点成功的加入后启动。
•-node
•作用:指定节点在集群中的名称•该名称在集群中必须是唯一的(默认采用机器的host)•推荐:直接采用机器的IP
•-bind
•作用:指明节点的IP地址•有时候不指定绑定IP,会报Failed to get advertise address: Multiple private IPs found. Please configure one.
的异常
•-server
•作用:指定节点为server•每个数据中心(DC)的server数推荐至少为1,至多为5•所有的server都采用raft一致性算法来确保事务的一致性和线性化,事务修改了集群的状态,且集群的状态保存在每一台server上保证可用性•server也是与其他DC交互的门面(gateway)
•-client
•作用:指定节点为client,指定客户端接口的绑定地址,包括:HTTP、DNS、RPC•默认是127.0.0.1,只允许回环接口访问•若不指定为-server,其实就是-client
•-join
•作用:将节点加入到集群
•-datacenter(老版本叫-dc,-dc已经失效)•作用:指定机器加入到哪一个数据中心中
示例1:命令参数方式执行
consul agent -data-dir /tmp/node2 -node=node2 -bind=192.168.11.145 -datacenter=dc1 -ui -client=192.168.11.145
示例2:配置文件方式执行
准备一个配置文件,名称任意,例如consul.json,内容如下:
{
"datacenter": "us-east-1",
"data_dir": "/Users/zhouli/develop/software/consul-data/",
"addresses": {
"https": "0.0.0.0"
},
"ports": {
"http": 8500
},
"acl" : {
"enabled": true,
"default_policy": "deny",
"down_policy": "extend-cache",
"tokens" : {
"master" : "b1gs33cr3t"
}
}
}
启动时,让consul读取配置文件:
consul agent -dev -config-file="consul-config/consul.json"
参考文档
consul agent
有20来个选项,本文只列出了常用选项,其他选项未作展开,详见: https://www.consul.io/docs/agent/options.html[2]
Consul集群搭建
主机规划
准备三台CentOS 7的虚拟机,主机规划如下:
主机名称 | IP | 作用 | 是否允许远程访问 |
node0 | 192.168.11.143 | consul server | 是 |
node1 | 192.168.11.144 | consul client | 否 |
node2 | 192.168.11.145 | consul client | 是 |
搭建步骤
•启动node0机器上的Consul(node0机器上执行):
consul agent -data-dir /tmp/node0 -node=node0 -bind=192.168.11.143 -datacenter=dc1 -ui -client=192.168.11.143 -server -bootstrap-expect 1
•启动node1机器上的Consul(node1机器上执行):
consul agent -data-dir /tmp/node1 -node=node1 -bind=192.168.11.144 -datacenter=dc1 -ui
•启动node2机器上的Consul(node2机器上执行):
consul agent -data-dir /tmp/node2 -node=node2 -bind=192.168.11.145 -datacenter=dc1 -ui -client=192.168.11.145
•将node1节点加入到node0上(node1机器上执行):
consul join 192.168.11.143
•将node2节点加入到node0上(node2机器上执行):
consul join -rpc-addr=192.168.11.145:8400 192.168.11.143
•这样一个简单的Consul集群就搭建完成了,在node1上查看当前集群节点:
consul members -rpc-addr=192.168.11.143:8400
结果如下:
Node Address Status Type Build Protocol DC
node0 192.168.11.143:8301 alive server 0.7.0 2 dc1
node1 192.168.11.144:8301 alive client 0.7.0 2 dc1
node2 192.168.11.145:8301 alive client 0.7.0 2 dc1
说明集群已经搭建成功了。
我们分析一下,为什么第5步和第6步需要加-rpc-addr
选项,而第4步不需要加任何选项呢?原因是-client
指定了客户端接口的绑定地址,包括:HTTP、DNS、RPC,而consul join
、consul members
都是通过RPC与Consul交互的。
访问测试
如上,我们三个节点都加了-ui
参数启动了内建的界面。我们可以通过:http://192.168.11.143:8500/ui/
或者 http://192.168.11.145:8500/ui/
进行访问,也可以在node1机器上通过 http://127.0.0.1:8500/ui/
进行访问,原因是node1没有开启远程访问 ,三种访问方式结果一致。
必看文章
•使用Consul做服务发现的若干姿势[3]
干货分享
最近将个人学习笔记整理成册,使用PDF分享。关注我,回复如下代码,即可获得百度盘地址,无套路领取!
•001:《Java并发与高并发解决方案》学习笔记;•002:《深入JVM内核——原理、诊断与优化》学习笔记;•003:《Java面试宝典》•004:《Docker开源书》•005:《Kubernetes开源书》•006:《DDD速成(领域驱动设计速成)》•007:全部•008:加技术讨论群
近期热文
•安装单机版Consul•微服务治理实践:探寻业务的单点异常自愈能力•支付宝的架构到底有多牛逼!还没看完我就跪了!•配置热更新,不想重启,如何更新Bean的状态?•如何模拟 5 万的并发用户•一篇文章搞定:扫码登录实现原理
References
[1]
: https://www.consul.io/docs/commands/index.html[2]
: https://www.consul.io/docs/agent/options.html[3]
使用Consul做服务发现的若干姿势: http://blog.bossma.cn/consul/consul-service-register-and-discovery-style/
想知道更多?长按/扫码关注我吧↓↓↓>>>技术讨论群<<<喜欢就点个"在看"呗^_^