微服务学习实战笔记 3.1-系统部署篇-安装配置Consul

一、本地单机安装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 -只要容器停止了,就重新启动

 

相关资料

.NET Core微服务之基于Consul实现服务治理    

Consul部署多台Docker集群

Docker命令详解(run篇) 

 

posted @ 2020-08-02 09:46  燕马越空  阅读(549)  评论(0编辑  收藏  举报