安装
- 下载地址:
https://www.consul.io/downloads
(官网) - 下载命令(CentOS):
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo yum -y install consul
使用分布式
前提
3台虚拟机,c1,c2,c3。其中c1,c2作服务端,c3作客户端。
c1中
输入命令:
// 其中c1ip为虚拟机的ip地址, comip为共享ip
consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -node=n1 -bind=c1ip -ui -config-dir /etc/consul.d -rejoin -join comip -client 0.0.0.0
其中:
- -server:定义agent运行在server模式
- -bootstrap-expect:在一个datacenter中期望提供的server节点的数目,当该值提供时,consul一直等到达到制定server数目的时候才会引导整个集群,该标记不可以和bootstrap共用
- -data-dir:提供一个目录来存放agent的状态,所有的agent许可都需要该目录,该目录必须是稳定的,系统重启后应当继续存在。
- -node:节点在集群中的名称,在一个集群中必须是唯一的,默认是该节点的主机名
- -bind:该地址用来在集群内部的通讯,集群内的所有节点到地址都必须是可达的,默认是0.0.0.0
- -ui:启动Web界面
- -config-dir:配置文件目录,里面所有以.json结尾的文件都会被加载
- -rejoin:使consul忽略先前的离开,再次启动后仍旧尝试加入集群中
- -client:consul服务侦听地址,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1,所以不对外提供服务。对外服务需改成0.0.0.0
c2中
输入命令:
c2ip为虚拟机c2的ip,comip为共享ip
consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -node=n2 -bind=c2ip -ui -rejoin -join comip
c3中
输入命令:
// c3ip为虚拟机c3的ip,comip为共享ip
consul agent -data-dir /tmp/consul -node n3 -bind=c3ip -config-dir /etc/consul.d -rejoin -join comip
- 可以通过comip:8500访问web界面,来查看服务状况。
- 可以通过命令
consul members
查看consul集群的成员 - 可以通过命令
consul leave
优雅地退出集群
可能会出现的问题:
Failed to join 192.168.125.118:dial tcp 192.168.125.118:8301:connect:no route to host
,即comip所在的机器防火墙阻隔了链接。除这个外,还需要将8300端口(用于通信),8500端口(WebUI),64058端口(内部方法调用)用以下命令都打开。
解决方法:
//不同防火墙 命令不同 仅供参考
firewall-cmd --zone=public --add-port=8301/tcp --permanent
firewall-cmd --zone=public --add-port=8300/tcp --permanent
firewall-cmd --zone=public --add-port=8500/tcp --permanent
firewall-cmd --zone=public --add-port=64058/tcp --permanent
firewall-cmd --reload /*必须添加,否则重启之后会失效*/
// iptables防火墙修改/etc/sysconfig/iptables文件
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8301-j ACCEPT
service iptables restart或者systemctl restart iptables