准备:4台机器
192.168.40.139
192.168.40.155
192.168.40.156
192.168.40.157
新建目录:
# cd /usr/local/bin
# mkdir admin (存放consul程序)
# mkdir webui (存放UI)
获取ui和zip包
# cd /usr/local/bin/webui
# wget https://releases.hashicorp.com/consul/0.7.5/consul_0.7.5_web_ui.zip
解压web_ui
# unzip consul_0.7.5_web_ui.zip
操作consul程序
进入目录
# cd /usr/local/bin/admin
# wget https://releases.hashicorp.com/consul/0.7.5/consul_0.7.5_linux_amd64.zip
解压
# unzip consul_0.7.5_linux_amd64.zip
检查consul版本:
# ./consul version
分别打开防火墙端口
# vi /etc/sysconfig/iptables
加入如下(三台机器都要加入):
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8300 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8500 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8301 -j ACCEPT
保存退出重启防火墙
# service iptables restart
要想利用consul提供的服务实现服务的注册与发现,我们需要建立consul cluster。
在consul方案中,每个提供服务的节点上都要部署和运行consul的agent,所有运行consul agent节点的集合构成consul cluster。
consul agent有两种运行模式:server和client。这里的server和client只是consul集群层面的区分,与搭建在cluster之上的应用服务无关。
以server模式运行的consul agent节点用于维护consul集群的状态,
官方建议每个consul cluster至少有3个或以上的运行在server mode的agent,client节点不限。
我们这里以安装三个节点为例,环境配置如下
192.168.40.139,192.168.40.155,192.168.40.156 以server模式运行
192.168.40.157以client模式运行
启动:
1.在192.168.40.139启动(server 名为web1 )
# ./consul agent -server -bootstrap -bind=0.0.0.0 -client=192.168.40.139 -data-dir=data -ui -node=192.168.40.139
或
# ./consul agent -server -bootstrap -data-dir /tmp/consul -node=web1
2.在192.168.40.155上启动(server 名为web2 )
# ./consul agent -server -bootstrap -bind=0.0.0.0 -client=192.168.40.155 -data-dir=data -node=192.168.40.155 -join=192.168.40.139
或
# ./consul agent -server -bootstrap -data-dir /tmp/consul -node=web2
3.在192.168.40.156上启动(server名为web3)
# ./consul agent -server -bootstrap -bind=0.0.0.0 -client=192.168.40.156 -data-dir=data -node=192.168.40.156 -join=192.168.40.139
或
# ./consul agent -server -bootstrap -data-dir /tmp/consul -node=web3
一开始学习consul, 我们需要让consul 运行起来。consul server推荐至少在3~5个之间,推荐的方法是一开始启动其中一台server,并且配置到bootstrap的模式,该模式node可以指定自己作为leader,而不用进行选举。然后再依次启动其他server,配置为非bootstrap的模式。最后把第一个serverbootstrap模式停止,重新以非bootstrap模式启动,这样server之间就可以自动选举leader。
web1:
# ./ consul agent -server -bootstrap -data-dir /tmp/consul -node=web1
web2、web3:用以下命令启动consul,不需要带bootstrap 选项:
# ./consul agent -server -data-dir /tmp/consul -node=web2
# ./consul agent -server -data-dir /tmp/consul -node=web3
PS:三台server都启动之后,会发现web1和web2在控制台也会有消息更新,提示NO cluster leader,说明无法选举leader,分别查看各自的集群信息时,也是无法互相查看的。
web2、web3需要加入到web的集群中:
# ./consul join 192.168.40.155
# ./consul join 192.168.40.156
当三台server都加入到集群,我们需要配置这三台机子为同等的server,并且让它们自己选择leader,这时可以停止第一台(web)的consul,然后运行如下命令:
# ./consul agent -server -data-dir /tmp/consul -node=web1
PS:此时,我们在每台机子上输入consul info,我们会发现此时的leader是web2;我们并没有指定,是集群自己选择的:
这时,我们模拟异常或者服务器退出,将web2关闭,这时我们再次输入consul info会发现,web1和web3自动选举了web1作为leader:
4.最后,将client机器连入集群,就是一个小型的完整集群了。
在192.168.40.157上启动( client )
# ./consul agent -bind=0.0.0.0 -client=192.168.40.157 -data-dir=data -node=192.168.40.157 -join=192.168.40.139 -ui
全部节点启动完之后
访问http://192.168.40.157:8500/ 即可查看consul集群的管理页面
查看集群状态:
# ./consul members
关闭节点
consul leave -rpc-addr=192.168.40.139:8400
输入consul agent -h 可以查看帮助。其中常见的参数解释如下:
-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