Consul集群搭建
2019-07-30 本文已影响0人
雨落千木的时节
- 介绍
Consul和Eureka一样也可以用来做注册中心, 但是Consul不同于Eureka,Consul包含多个组件,使用go语言开发,包含以下功能:
(1)服务发现
(2)健康检查
(3)Key/Value存储
(4)多数据中心
Consul官网:https://www.consul.io
整体架构如下:
微信截图_20190729192611.png
一个Consul集群可以有多个数据中心,每个数据中心运行一个Consul Server集群,server数目一般在3-5个,因为Consul是强一致性的,server的数目太多在同步数据的时候会产生性能问题。client的数目没有限制,可以成千上万个。
- 集群搭建
(1)首先去官网下载consul安装包并解压即可安装consul
wget https://releases.hashicorp.com/consul/1.5.3/consul_1.5.3_linux_amd64.zip
unzip consul_1.5.3_linux_amd64.zip
(2)将解压后的consul文件移动到/usr/local/bin目录下,执行consul命令查看安装情况
mv consul /usr/loca/bin
consul
微信截图_20190730102135.png
(3)修改环境变量使consul安装永久生效
vim /etc/profile
#在最后一行添加:
export PATH=$PATH:/usr/local/bin
#保存后执行
source /etc/profile
(4)启动集群
准备3台节点服务器:
192.168.203.130 consul1
192.168.203.131 consul2
192.168.203.132 consul3
启动consul1
nohup consul agent -server -bootstrap-expect 3 -bind=192.168.203.130 -client=0.0.0.0 -data-dir=/home/consul/data -node=consul1 -ui >> /home/consul/logs/consul.log 2>&1
参数介绍:
server:定义agent以server的身份启动
bootstrap-expect: 一个数据中心中,集群要求的server的数量,当少于这个数量的时候,集群不生效
bind:监听的ip地址,用来在集群内部通信(集群内部的所有节点都是可达的,默认为:0.0.0.0)
client:客户端地址
node:节点id,同一集群中不能重复,默认是节点主机名
data-dir:数据存放目录
ui:启动web客户端
启动另外两个节点(192.168.203.131,192.168.203.132):
nohup consul agent -server -bootstrap-expect 3 -bind=192.168.203.131 -client=0.0.0.0 -data-dir=/home/consul/data -node=consul2 -ui >> /home/consul/logs/consul.log 2>&1
nohup consul agent -server -bootstrap-expect 3 -bind=192.168.203.132 -client=0.0.0.0 -data-dir=/home/consul/data -node=consul3 -ui >> /home/consul/logs/consul.log 2>&1
分别将consul2,consul3加入到集群中
#在192.168.203.131,192.168.203.132上执行如下命令:
consul join 192.168.203.130
至此整个集群搭建完成,执行consul operator raft list-peers
命令查看集群状态,如下图
微信截图_20190730140433.png
遇到的坑:
在执行consul join 192.168.203.130时会遇到如下错误:
Failed to join 192.168.203.130:dial tcp 192.168.203.130:8301:connect:no route to host
解决办法:
分别将8301,8300,8500端口加入防火墙就好了
firewall-cmd --zone=public --add-port=8301/tcp --permanent
#必须添加,否则重启之后会失效
firewall-cmd --reload
(5)web页面查看
微信截图_20190730102002.png