Docker的consul集群搭建

consul集群的工作流程

在这里插入图片描述
在Docker节点中,每当有容器被创建就会向容器中的registrator服务进行注册登记,registrator服务会向代理服务器中的consul agent进行汇报。我们在consul template中设置好变量,consul就会将docker节点IP地址自动添加到代理服务器的配置文件中并且立即生效。

1、Consul:

1、Consul 是 HashCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置;

2、Consul 特点:

consul 支持健康检查,允许存储键值对; 一致性协议采用 Raft 算法,用来保证服务的高可用; 成员管理和消息广播采用 GOSSIP
协议,支持 ACL 访问控制;

3、方便部署,与 Docker 等轻量级容器可无缝配合。

2、建立 Consul 服务:

1、每个提高服务的节点上都需要部署和运行 consul 的 agent

2、Consul agent 两种运行模式:
server; client;
3、server 与 client 只是 consul 群集层面的区分,与搭建在 cluster之上的应用服务无关。

搭建 consul 集群:

1.实验环境:
准备两台centos7虚拟机。
192.168.80.106作为代理端,运行nginx、consul template和consul。
192.168.80.105作为上游服务器,运行registrator容器和若干nginx服务容器

2.代理端安装nginx和搭建consul
安装nginx这里不再过多阐述,首先解压consul压缩包。

unzip consul_0.9.2_linux_amd64.zip

将concul复制到/usr/bin目录下。
开始安装

安装代理和server功能
consul agent \
-server \
参与consul选举
-bootstrap \
提供web的ui界面
-ui \
参数存储位置
-data-dir=/var/lib/consul-data \
绑定的IP地址
-bind=192.168.80.106 \
监听任意IP地址
-client=0.0.0.0 \
运行node1节点,并将日志生成到指定目录下
-node=consul-server01 &> /var/log/consul.log &

在这里插入图片描述
在这里插入图片描述
通过命令查看节点状态和成员信息:

[root@localhost ~]# consul members
Node             Address              Status  Type    Build  Protocol  DC
consul-server01  192.168.80.106:8301  alive   server  0.9.2  2         dc1

[root@localhost ~]# consul info | grep leader
        leader = true
        leader_addr = 192.168.80.106:8300


在这里插入图片描述
用httpd api查看集群信息:
在这里插入图片描述
查看集群的详细信息
curl 127.0.0.1:8500/v1/catalog/nodes

在这里插入图片描述
在上游web节点安装registrator容器
使用docker run命令创建registrator容器指定host网络模式指定挂载的目录并指定consul agent的IP地址和端口

docker run -d --name=registrator --net=host -v /var/run/docker.stock:/tpm/docker.stock --restart=always gliderlabs/registrator:latest -ip=192.168.80.105 consul://192.168.80.106:8500

创建nginxweb服务容器

docker run -d -itd -p 83:80 --name=web01 -h ngweb1 nginx
docker run -d -itd -p 84:80 --name=web02 -h ngweb2 nginx

在这里插入图片描述
使用template模板创建nginx的虚拟主机配置文件
在代理服务器端可以通过编写ctmpl文件,其中的web容器的IP地址和端口号作为变量传入到nginx的配置文件中并生效。

编写nginx.ctmpl文件作为nginx的配置文件的模板
#upstream模块指定web服务器池,其中的IP地址和端口作为变量引入    server {{.Address}}:{{.Port}};
upstream backend {
    {{range service "nginx"}}
     server {{.Address}}:{{.Port}};
     {{end}}
}

server {
       listen 1216;
       server_name localhost 192.168.80.106;
       access_log /var/log/nginx/nginx-access.log;
       index index.html index.php;
       location / {
          proxy_set_header HOST $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header Client-IP $remote_addr; 
          proxy_set_header X-Fprwarded-For $proxy_add_x_forwarded_for;
          proxy_pass http://backend;
                 }
       }

由于其中的日志文件路径不存在需要创建一个日志文件路径。

mkdir -p /var/log/nginx

配置nginx的配置文件

在http模块中,由于nginx配置文件可以解耦,所以定义一个虚拟主机的配置文件路径。include vhost/*.conf
http {
    include       mime.types;
    include       vhost/*.conf;
    default_type  application/octet-stream;

由于该路径不存在所以也需要创建一个路径出来。

mkdir -p /usr/local/nginx/conf/vhost

启动nginx

启用template模板
解压template压缩包,并复制到/usr/bin目录下。

#指定consul集群的IP地址和端口号
consul-template -consul-addr 192.168.80.106:8500 \
#template模板位置:虚拟主机配置文件生成位置:使用的nginx的命令为重载
-template "/root/nginx.ctmpl:/usr/local/nginx/conf/vhost/nginxweb.conf:/usr/local/nginx/sbin/nginx -s reload" \
--log-level=info

在这里插入图片描述
现在看到的是consul开始监控web集群是否新增加容器。
在consul集群中打开新的终端查看配置文件。
在这里插入图片描述
其中的配置文件清楚地写着和后端的IP地址。

验证
在web端在创建一个nginx容器
在这里插入图片描述
在代理端可以看见新的容器已经添加进反向代理中。
在这里插入图片描述
同时访问代理的1216端口访问后端web也可以查看到日志情况。
在这里插入图片描述
可以清楚的看到是代理端进行的访问而非其他IP地址。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值