Docker的consul集群搭建

  • consul集群的工作流程
  • 1、Consul:
  • 2、建立 Consul 服务:
  • 搭建 consul 集群:


consul集群的工作流程

docker集群部署greenplum docker consul集群_docker


在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 &

docker集群部署greenplum docker consul集群_linux_02


docker集群部署greenplum docker consul集群_IP_03


通过命令查看节点状态和成员信息:

[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

docker集群部署greenplum docker consul集群_docker_04


用httpd api查看集群信息:

docker集群部署greenplum docker consul集群_IP_05


查看集群的详细信息

curl 127.0.0.1:8500/v1/catalog/nodes

docker集群部署greenplum docker consul集群_IP_06


在上游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

docker集群部署greenplum docker consul集群_nginx_07


使用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

docker集群部署greenplum docker consul集群_nginx_08


现在看到的是consul开始监控web集群是否新增加容器。

在consul集群中打开新的终端查看配置文件。

docker集群部署greenplum docker consul集群_nginx_09


其中的配置文件清楚地写着和后端的IP地址。验证

在web端在创建一个nginx容器

docker集群部署greenplum docker consul集群_IP_10


在代理端可以看见新的容器已经添加进反向代理中。

docker集群部署greenplum docker consul集群_docker集群部署greenplum_11


同时访问代理的1216端口访问后端web也可以查看到日志情况。

docker集群部署greenplum docker consul集群_linux_12


可以清楚的看到是代理端进行的访问而非其他IP地址。

docker集群部署greenplum docker consul集群_docker集群部署greenplum_13