一、集群规划
consul借助agent来运行,类似elk的logstash agent 或 zabbix监控系统的agent ,每个需要被发现的服务上,通过consul agent client 来收集服务本身的信息,然后向consul agent server汇报, consul server 可以集群部署。
规划一下:
序号 | 节点ip | 节点名称 | 角色 |
1 | 192.168.32.134 | server1 | server |
2 | 192.168.32.135 | server2 | server |
3 | 192.168.32.136 | server3 | server |
4 | 192.168.32.138 | client1 | client & web ui |
这是按正式生产环境来规划的,如果本机开发,有一个方便的dev模式(后面再讲)。 上述表格中,我们打算组建3个server节点的consul server cluster,另外有1个client,模拟客户端以及充当consul的web admin ui(管理界面)。
二、下载安装
目前consul的最高版本为1.2.0,只需要把相应的release压缩包 下载到机器上解压即可。
2.1 wget https://releases.hashicorp.com/consul/1.2.0/consul_1.2.0_linux_amd64.zip
2.2 unzip consul_1.2.0_linux_amd64.zip
假设都解压到~/consul/bin目录下,解压后会得到1个名为consul的可执行文件
2.3 sudo cp ./consul /usr/local/bin
为了方便,可以将其复制到/usr/local/bin下(本步骤可选,需要root权限)
然后检查下是否安装成功:
|
如果出现版本输出,就表示可以了(4个节点上,每台机器上都重复上述操作,全安装好)
三、启动
3.1 启动server端
基本的命令为:
|
看着一大堆参数,其实不复杂
-server 表示是以服务端身份启动
-bind 表示绑定到哪个ip(有些服务器会绑定多块网卡,可以通过bind参数强制指定绑定的ip)
-client 指定客户端访问的ip(consul有丰富的api接口,这里的客户端指浏览器或调用方),0.0.0.0表示不限客户端ip
-bootstrap-expect=3 表示server集群最低节点数为3,低于这个值将工作不正常(注:类似zookeeper一样,通常集群数为奇数,方便选举,consul采用的是raft算法)
-data-dir 表示指定数据的存放目录(该目录必须存在)
-node 表示节点在web ui中显示的名称
启动成功后,终端窗口不要关闭,可以在浏览器里,访问下,类似 http://192.168.32.134
:8500/,正常的话,应该会看到一行文字:Consul Agent。
为了防止终端关闭后,consul退出,可以在刚才命令上,加点东西,类似:
nohup xxx > /dev/null 2>&1 &
即:
|
将其转入后台运行。
另外2台节点上,也做类似操作:
1 |
|
注意更改bind参数的ip,以及node参数里的节点名称。
1 |
|
3.2 启动client端
几乎完全一样,只是把-server 去掉,在192.168.32.138
上运行:
1 |
|
四、组建cluster
现在我们有了3个server node + 1个client node,但是这4个节点都是相互独立的,可以在任一节点上运行:
consul members
可以看到,只有自身节点的信息。
要加自己加入集群,可以运行以下命令(假设:其它3个节点,都加入192.168.32.134)
consul join 192.168.32.134
成功后,会输出:
Successfully joined cluster by contacting 1 nodes.
其它2个节点(指:192.168.32.134之外的节点)上类似上述操作,都加入集群中,完成后,可以再次验证
可以看到4台节点的信息都有了。
tips: 如果反过来,要将1个节点从集群中撤掉,可以在该节点上运行consul leave 即可。
五、web ui
192.168.32.138上,可能有同学注意到了,启动consul时,我们加了一个 -ui 的参数,这代表将启动consul自带的web管理界面,访问 http://192.168.32.138:8500/ui
可以看到各节点的信息。
六、dev开发者模式
前面这一阵折腾需要好几台机器,本机调试开发时不太方便,为此consul体贴的提供了dev模式,使用方式极为简单
1 |
|
开发模式,自带了web ui,直接http://localhost:8500/ 即可,非常方便。