docker之Consul环境的部署

目录

[一.Docker consul的介绍](#一.Docker consul的介绍)

1.1template模板(更新)

1.2registrator(自动发现)

1.3agent(代理)

二.consul的工作原理

三.Consul的特性

四.Consul的使用场景

五.搭建Consul的集群

5.1需求

5.2部署consul

5.3主服务器[192.168.40.20]

5.4client部署(192.168.40.21)

5.5配置template模板自动更新

六.测试访问代理服务器

[七 consul 多节点](#七 consul 多节点)

一.Docker consul的介绍

1.1template模板(更新)

  • 先发现再更新,发现的是后端节点上容器的变化(registrator),更新的是nginx配置文件(agent)

1.2registrator(自动发现)

  • 是consul安插在docker容器里的眼线,用于监听监控节点上容器的变化(增加或减少,或者宕机),一旦有变化会把这些信息告诉并注册在consul server端(使用回调和协程的方式,所以它的延迟和资源消耗会很少),consul server发生一旦发生注册列表的变化后,会把注册的信息告诉agent。
  • 后端每构建出一个容器,会向registrator进行注册,控制consul 完成更新操作,consul会触发consul template模板进行热更新

1.3agent(代理)

  • 用来控制consul template模板,用template组件去和nginx.conf来进行对接,模板里全是变量,用变量的方式去加载后端由注册到consul server端之后,server端会把信息告诉agent,agent和template进行对接,写入template,template就有了镜像,更新完之后会作为nginx.conf子配置文件被前端的nginx识别,consul agent会控制reload之后会识别nginx.conf配置文件中的变化,相当于识别后端的节点,就可以在地址池中动态调整自己后端资源。

总结:核心机制:consul :自动发现、自动更新,为容器提供服务(添加、删除、生命周期)

二.consul的工作原理

复制代码
数据流向:
 
1、registrator:用于监控返现和注册到consul服务内
 
2、consul服务:存储reg注册的变化的容器信息,然后变化信息以参数的方式传给template
 
3、template会接收参数,然后将参数改为具体的upstream的配置放入ng的子配置文件中(1.conf)
 
最后,nginx -s reload

三.Consul的特性

  • 支持健康检查,允许存储键值对基于Golong语言,可移植性强
  • 支持ACL访问控制

四.Consul的使用场景

consul的应用场景包括服务发现,服务隔离,服务配置:

  • 服务发现场景中consul作为注册中心,服务地址被注册到consul中以后,可以使用consul提供的dns、http接口查询,consul支持health check。
  • 服务隔离场景中consul支持以服务为单位设置访问策略,能同时支持经典的平台和新兴的平台,支持tls证书分发,service-to-service加密。
  • 服务配置场景中consul提供key-value数据存储功能,并且能将变动迅速地通知出去,借助Consul可以实现配置共享,需要读取配置的服务可以从Consul中读取到准确的配置信息。
  • Consul可以帮助系统管理者更清晰的了解复杂系统内部的系统架构,运维人员可以将Consul看成一种监控软件,也可以看成一种资产(资源)管理系统。

五.搭建Consul的集群

建立consul服务

  • 每个提供服务的节点上都要部署和运行Consul的agent

Consul agent有两种运行模式

  • Server
  • Client

Server和Client只是Consul集群层面的区分,与搭建在Cluster之上的应用服务无关

5.1需求

  • 使用 Docker 将 Consul、Consul template、Registrator 与 Nginx 组成一个值得新人且可扩展的服务架构
  • 添加或者移除服务时,不需要重写任何配置,也不需要重启任何服务,一切都能够正常运行,以实现自动化运维

5.2部署consul

复制代码
主服务器:192.168.40.20 Docker-ce、Compose 3、Consul、Consul-template
服务器:192.168.40.21 Docker-ce、registrator

5.3主服务器[192.168.40.20]

复制代码
#两台节点上都安装 Docker-ce,记得关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
setenforce 0 && sed -i "s/SELINUX=*/SELINUX=disabled/g" /etc/selinux/config
 
在主节点上部署consul 
mkdir /opt/consul
cd /opt/consul
rz consul_0.9.2_linux_amd64.zip
 
unzip consul_0.9.2_linux_amd64.zip
 
mv consul /usr/local/bin
复制代码
consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.40.20 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &
 
consul members
consul info | grep leader

|--------------|-----------------------------------------|
| 查看集群server成员 | curl 127.0.0.1:8500/v1/status/peers |
| 集群Raf leader | curl 127.0.0.1:8500/v1/status/leader |
| 注册的所有服务 | curl 127.0.0.1:8500/v1/catalog/services |
| 查看nginx服务信息 | curl 127.0.01:8500/v1/catalog/nginx |
| 集群节点详细信息 | curl 127.0.0.1:8500:/v1/cata;pg/nodes |

5.4client部署(192.168.40.21)

复制代码
容器服务自动加入nginx集群
1、安装Gliderlabs/Registrator Gliderlabs/Registrator
可检查容器运行状态自动注册,还可注销docker容器的服务 到服务配置中心
目前支持Consul、Etcd和SkyDNS2
 
在192.168.40.21节点上,执行以下操作
 
docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
-ip=192.168.40.21 \
consul://192.168.40.20:8500
 
 
systemctl restart docker
docker run -itd -p:81:80 --name test-01 -h test01 nginx
docker run -itd -p:82:80 --name test-02 -h test02 nginx
docker run -itd -p:83:80 --name test-03 -h test03 httpd
docker run -itd -p:84:80 --name test-04 -h test04 httpd

真机访问http://192.168.40.20:8500
此时应该可以发现5个服务

5.5配置template模板自动更新

server(192.168.40.20)

  • Consul-Template是一个守护进程,用于实时查询Consul集群信息,并更新文件系统上任意数量的指定模板,生成配置文件,更新完成以后,可以查询Consul中的服务目录,Key、Key-values等。

    cd consul/
    vim nginx.ctmpl

    upstream http_backend {
    {{range service "nginx"}}
    server {{.Address}}:{{.Port}};
    {{end}}
    }

    server {
    listen 100;
    server_name localhost 192.168.40.20;
    access_log /var/log/nginx/lic.com-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-Forwarded-For proxy_add_x_forwarded_for;
    proxy_pass http://http_backend;
    }
    }

复制代码
yum -y install gcc pcre-devel zlib-devel
rz nginx-1.12.2.tar.gz
tar zxvf nginx-1.12.2.tar.gz -C /opt
cd /opt/nginx-1.12.2
 
./configure --prefix=/usr/local/nginx
 
make && make install

复制代码
cd /usr/local/nginx/conf/
mkdir vhost
mkdir /var/log/nginx
 
/usr/local/nginx/sbin/nginx
 
cd /opt
rz consul-template_0.19.3_linux_amd64.zip
 
unzip consul-template_0.19.3_linux_amd64.zip
复制代码
mv consul-template /usr/bin            #将可指向文件移动到路径环境变量中,便于系统识别
 
consul-template -consul-addr 192.168.40.20:8500 -template "/opt/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/hehe.conf:/usr/local/nginx/sbin/nginx -s reload" --log-level=info

此时在192.168.40.21上操作

复制代码
docker run -itd -p:85:80 --name test-05 -h test05 nginx

六.测试访问代理服务器

是否可以完成代理访问轮询(主服务器192.168.40.20)

复制代码
docker logs -f test-01
docker logs -f test-02
docker logs -f test-05

七 consul 多节点

复制代码
#添加一台已有docker环境的服务器192.168.40.22加入已有的群集中:
 
consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/ib/consul-data \
-bind=192.168.40.22 \
-client=0.0.0.0 \
-node=consul-server02 \
-enable-script-checks=true \
-datacenter=dc1 \
-join 192.168.40.20 &> /var/log/consul.log &
 
 
--解释--
-enable-script-checks=true: 设置检查服务为可用
-datacenter: 数据中心名称
-join: 加入到已有的集群中
相关推荐
THMAIL1 小时前
mac M芯片运行docker-desktop异常问题
macos·docker·容器
两点王爷3 小时前
IDEA中springboot项目中连接docker
spring boot·docker·intellij-idea
家庭云计算专家3 小时前
还没用过智能文档编辑器吗?带有AI插件的ONLYOFFICE介绍
服务器·人工智能·docker·容器·编辑器
孤的心了不冷5 小时前
【Docker】CentOS 8.2 安装Docker教程
linux·运维·docker·容器·eureka·centos
头疼的程序员6 小时前
docker学习与使用(概念、镜像、容器、数据卷、dockerfile等)
学习·docker·容器
IT小郭.6 小时前
使用 Docker Desktop 安装 Neo4j 知识图谱
windows·python·sql·docker·知识图谱·database·neo4j
淡水猫.6 小时前
hbit资产收集工具Docker(笔记版)
运维·docker·容器
旧故新长15 小时前
访问 Docker 官方镜像源(包括代理)全部被“重置连接”或超时
运维·docker·容器
white.tie15 小时前
Docker部署单节点Elasticsearch
elasticsearch·docker·jenkins
haven-85220 小时前
win11安装Joplin Server私有化部署(docker)
运维·docker·容器