一、本地单机安装Consul
服务器安装及Docker安装参见:Docker安装
1. 下载二进制安装文件
下载地址:https://www.consul.io/downloads.html
#安装wget yum install wget #下载Consul wget https://releases.hashicorp.com/consul/1.8.0/consul_1.8.0_linux_amd64.zip
2. 解压缩安装包
unzip consul_1.8.0_linux_amd64.zip
3. 解压之后将consul复制到我们的自定义文件目录中
#创建目录 mkdir /usr/local/consul_1.8 #拷贝到新创建的目录中 cp consul /usr/local/consul_1.8/consul #删除现在和解压后文件 rm consul rm consul_1.8.0_linux_amd64.zip
3. 启动服务和客户端
参考资料:https://www.consul.io/docs/agent/basics.html
为agent机器和server机器 同为 192.168.2.171 为例。
#创建data、log目录 mkdir /usr/local/consul_1.8/data mkdir /usr/local/consul_1.8/log #启动 /usr/local/consul_1.8/consul agent -server -bootstrap-expect 1 -data-dir=/usr/local/consul_1.8/data/ -node=n1 -bind=192.168.2.171 -client=192.168.2.171 -ui
-server 表示是server模式
-bootstrap-expect=3 表示是集群中有3台服务器 bootstrap该模式node可以指定自己作为leader ,如果是非leader可不加该参数
-data-dir=/tmp/consul 目录
-node=n2 该服务器节点名
-bind=127.0.0.1 节点绑定的ip
-ui 非必须 webui的路径 用web来管理consul
如下图启动成功。
打开浏览器访问 http://192.168.2.171:8500/ 出现下图,启动成功。
如果不能访问查看一下是否防火墙影响,Ctrl + C 退出Consul,关闭防火墙,再重新执行启动试试。
二、本地单机配置Consul 开机自启动
1. 创建服务脚本
路径/usr/lib/systemd/system/,新建一个service命名为,consul.service
cd /usr/lib/systemd/system/ vi consul.service
在vi编辑器,编写如下写脚本:
[Unit] Description=ConsulServer After=network.target [Service] ExecStart=/usr/local/consul_1.8/consul.start.sh KillSignal=SIGTERM [Install] WantedBy=multi-user.target
2. 创建启动脚本
创建启动脚本文件
cd /usr/local/consul_1.8/ vi consul.start.sh
写入启动脚本
#!/bin/bash /usr/local/consul_1.8/consul agent -server -ui -bootstrap-expect=1 -node=192.168.2.171 -data-dir=/usr/local/consul_1.8/data/ -log-file=/usr/local/consul_1.8/log/consul_log-$(date +%Y-%m-%d--%H-%M) -client=192.168.2.171 -bind=192.168.2.171 -datacenter=dc1 echo "consul startup"
2. 尝试服务启动
重新加载配置
systemctl daemon-reload
Consul 启动
systemctl start consul
查看服务状态
systemctl status consul
如果出现下图,服务启动成功。
如果失败,这是因为用户没有权限,而导致无法执行。
用命令chmod 修改一下.sh权限就可以了,这里的u 这里指文件所有者,+x 添加可执行权限,*.sh表示所有的sh文件。
chmod u+x *.sh
3. 设置开机自启动
systemctl enable consul.service
三、Docker部署Consul集群(本项目采用这种方式)
部署到4个server,注意防火墙问题
192.168.2.171 SERVER1
192.168.2.172 SERVER2
192.168.2.173 SERVER3
192.168.2.174 SERVER4
1、拉取consul镜像
docker pull consul #验证镜像 docker images
2、SERVER1上操作,server作为leader
docker run -d --name consul1 -h=node1 --net=host -e CONSUL_BIND_INTERFACE=eth0 consul agent -server=true -client=0.0.0.0 -bind=192.168.2.171 -ui -bootstrap-expect=3
# 参数说明
--net=host:docker内部对于虚拟机的来说也是localhost 如果主机上的其他容器也使用--net=host,这将是一个很好的配置,它还会将代理暴露给直接在容器外部的主机上运行的进程
-bind:这是给其他consul server来加入集群的ip
-join:加入集群
-client:使用此配置,Consul的客户端接口将绑定到网桥IP,并可供该网络上的其他容器使用,但不能在主机网络上使用。
Consul还将接受-client=0.0.0.0绑定到所有接口的选项。
-bootstrap-expect设置服务数量,当达到设定数量启动集群。
-bind的这台机器成为leader
-ui管理界面
-h:设置node的名称,集群的服务器不能取同名的node名称
CONSUL_BIND_INTERFACE:ifconfig查看,好像虚拟机的这个名称不一样,我的是eth0,还有叫ens33的。
3、SERVER2、SERVER3、SERVER4上分别操作,加入集群
docker run -d --name consul2 -h=node2 --net=host -e CONSUL_BIND_INTERFACE=eth0 consul agent -server=true -client=0.0.0.0 -join=192.168.2.171 -ui docker run -d --name consul3 -h=node3 --net=host -e CONSUL_BIND_INTERFACE=eth0 consul agent -server=true -client=0.0.0.0 -join=192.168.2.171 -ui docker run -d -v /consulconfig:/config/file --name consul4 -h=node4 --net=host -e CONSUL_BIND_INTERFACE=eth0 consul agent -config-dir=/config/file -server=false -client=0.0.0.0 -join=192.168.2.171 -ui
打开浏览器访问 http://192.168.2.171:8500/ 出现下图,成功。
4、查看状态
#查看投票状态 docker exec -t consul1 consul operator raft list-peers #查看集群成员 docker exec -t consul名称 consul members docker exec -t consul1 consul members
通过管理网站查看集群状态
5、docker容器自动启动设置
如果已经启动了则可以使用如下命令:
docker update --restart=always 容器ID/容器Name
在运行docker容器时可以加如下参数来保证每次docker服务重启后容器也自动重启:
docker run --restart=always
--restart具体参数值详细信息:
no - 容器退出时,不重启容器;
on-failure - 只有在非0状态退出时才从新启动容器;如果容器由于错误而退出,则将其重新启动,非零退出代码表示错误
unless-stopped - 重新启动容器,除非明确停止容器或者 Docker 被停止或重新启动
always -只要容器停止了,就重新启动