docker consul部署

一、定义

Consul 是一个支持多数据中心分布式高可用的 服务发现 和 配置共享 的服务软件,由 HashiCorp 公司用 Go 语言开发, 基于 Mozilla Public License 2.0 的协议进行开源。 Consul 支持 健康检查,并允许 HTTP 、GRPC 和 DNS 协议调用 API 存储键值对.
命令行超级好用的虚拟机管理软件 vgrant 也是 HashiCorp 公司开发的产品.
一致性协议采用 Raft 算法,用来保证服务的高可用. 使用 GOSSIP 协议管理成员和广播消息, 并且支持 ACL 访问控制.
在这里插入图片描述

1、Consul 使用场景

Docker 实例的注册与配置共享
Coreos 实例的注册与配置共享
SaaS 应用的配置共享、服务发现和健康检查。
vitess 集群
与 confd 服务集成,动态生成 nginx 和 haproxy 配置文件

2、Consul 优势

使用 Raft 算法来保证一致性, 比复杂的 Paxos 算法更直接. 相比较而言, zookeeper 采用的是 Paxos, 而 etcd 使用的则是 Raft.
支持 多数据中心,内外网的服务采用不同的端口进行监听。 多数据中心集群可以避免单数据中心的单点故障,而其部署则需要考虑网络延迟,分片等情况等. zookeeper 和 etcd 均不提供多数据中心功能的支持。
支持 健康检查。 etcd 不提供此功能。
支持 HTTP、DNS 和 GPRS 协议接口。 zookeeper 的集成较为复杂,etcd 只支持 http 协议。
官方提供 WEB管理界面,etcd 无此功能。
综合比较, Consul 作为服务注册和配置管理的新星,比较值得关注和研究。

3、Consul的四大核心特性:

consul是分布式的、高可用、横向扩展的
服务发现:可以方便的实现服务注册,通过DNS或者HTTP应用程序可以很容易的找到他所依赖的服务.
Key/Value存储:使用Key/Value进行数据存储。
多数据中心:Consul支持开箱即用的多数据中心。这意味着用户不需要担心建立额外的抽象层让业务扩展到多个区域
健康检查:可以对指定服务进行健康检查例如,Response Status是否为200,避免将流量转发到不健康的服务上。

4、构建核心

template 模板(更新)
registrator (自动发现+注册到consul-server端)后端每构建出一个容器,会向registrator进行注册,控制consul完成更新操作,consul会触发consul template模板进行热更新( reload)
核心机制: consul :自动发现、自动更新,为容器提供服务(添加、删除、生命周期)

二、容器服务更新与发现拓扑图

在这里插入图片描述
核心就是nginx+后面的容器服务,代理的是容器暴露的端口
让前面nginx不重启服务的情况下识别到后面服务的更新
更新的位置就是nginx里的upstream池
给nginx一个模板,直接识别模板
通过consul
1、registrator 部署在 server上,运行为容器进行操作,发现容器发生变更,识别IP和端口注册在registrator上
2、汇报给consul,更新的IP和端口,agent为代理,consul server只是consul agent其中一个模式。agent控制server收集变更信息并展示出来,在注册中心看到更新信息,并通过templat模板方式定义为标准格式。模板里就有了后端的配置,通过传入变量的方式写入模板中,这样模板中就有了upstraem的配置和后端的信息
3、nginx通过include加载和识别,consul控制nginx重载reload就可以了

三、部署

服务器consul:192.168.226.101 Docker-ce、Consul、 Consul-template
服务器docker:192.168.226.50 Docker-ce、 registrator

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# hostname consul
[root@localhost ~]# su
[root@consul ~]# 
[root@localhost ~]# hostname docker
[root@localhost ~]# su
[root@docker ~]# 

1、consul服务器操作

[root@consul ~]# mkdir /root/consul
[root@consul ~]# cd consul/

在这里插入图片描述

[root@consul consul]# unzip consul_0.9.2_linux_amd64.zip

在这里插入图片描述

[root@consul consul]# mv consul /usr/bin
或者
[root@consul consul]# ln -s /root/consul /usr/bin
[root@consul ~]# consul agent \                                     agent 模式
> -server \                                                          使用其中的server模式
> -bootstrap \                                                       前端框架
> -ui \                                                              可被访问的界面
> -data-dir=/var/lib/consul-data \                                   数据目录
> -bind=192.168.133.101 \                                            consul服务器地址
> -client=0.0.0.0 \                            监听所有地址,主要是含有registror服务的机器地址
> -node=consul-server01 &> /var/log/consul.log &                    节点名称写入日志
[root@consul consul]# jobs
[1]+  Running                 consul agent -server -bootstrap -ui -data-dir=/var/lib/consul-data -bind=192.168.133.101 -client=0.0.0.0 -node=consul-server01 &>/var/log/consul.log &
[root@consul consul]# 
[root@consul consul]# consul members
Node             Address               Status  Type    Build  Protocol  DC
consul-server01  192.168.133.101:8301  alive   server  0.9.2  2         dc1
[root@consul consul]# consul info |grep leader                     此条命令可查询leader信息
	leader = true
	leader_addr = 192.168.133.101:8300

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

[root@consul consul]# curl 127.0.0.1:8500/v1/status/peers                         查看集群server成员
["192.168.133.101:8300"]
[root@consul consul]# curl 127.0.0.1:8500/v1/status/leader                       集群Raf leader
"192.168.133.101:8300"
[root@consul consul]# curl 127.0.0.1:8500/v1/catalog/services                  注册所有服务
{"consul":[]}
[root@consul consul]# curl 127.0.0.1:8500/v1/catalog/nginx                      查看nginx服务信息
[root@consul consul]# curl 127.0.0.1:8500/v1/catalog/nodes                      集群节点详细信息
[{"ID":"727c935f-c6d2-84cf-7628-c01983737f55","Node":"consul-server01","Address":"192.168.133.101","Datacenter":"dc1","TaggedAddresses":{"lan":"192.168.133.101","wan":"192.168.133.101"},"Meta":{},"CreateIndex":5,"ModifyIndex":6}]

2、容器服务自动注册到consul集群

2.1、安装 Gliderlabs/Registrator Gliderlabs/Registrator

可检查容器运行状态自动注册,还可注册docker容器的服务到服务配置中心( consul 8300———》8500展示)

[root@docker ~]# docker run -d \                              运行容器并给与守护进程
> --name=registrator \                                        容器名称
> --net=host \                                                网络使用host与宿主机同IP
> -v /var/run/docker.sock:/tmp/docker.sock \                  挂载sock
> --restart=always \                                          重启策略,非UP就运行
> gliderlabs/registrator:latest \                             镜像文件及标签
> -ip=192.168.133.50 \                                        容器地址
> consul://192.168.133.101:8500                               配置中心位置
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE                           COMMAND                  CREATED          STATUS                         PORTS     NAMES
bfab913fcaa7   gliderlabs/registrator:latest   "/bin/registrator -i…"   12 seconds ago   Restarting (1) 4 seconds ago             registrator

2.2、测试服务发现功能是否正常

在docker服务器上运行4个容器

[root@docker ~]#docker run -itd -p:83:80 --name test-01 -h test01 nginx
[root@docker ~]#docker run -itd -p:84:80 --name test-02 -h test02 nginx
[root@docker ~]#docker run -itd -p:88:80 --name test-03 -h test03 httpd
[root@docker ~]#docker run -itd -p:89:80 --name test-04 -h test04 httpd 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在consul服务器上查看

[root@consul ~]# curl 127.0.0.1:8500/v1/catalog/services

在这里插入图片描述

再到网站上看,已发现和注册了4个新建的容器
在这里插入图片描述

3、安装nginx

[root@consul ~]# yum install gcc pcre-devel zlib-devel -y
[root@consul ~]# cd /opt

在这里插入图片描述

[root@consul opt]# tar zxf nginx-1.12.0.tar.gz 
[root@consul opt]# cd nginx-1.12.0/
[root@consul nginx-1.12.0]# ./configure --prefix=/usr/local/nginx
[root@consul nginx-1.12.0]# make && make install

4、配置nginx

[root@consul ~]# cd /usr/local/nginx/conf/
[root@consul conf]# vim nginx.conf

在这里插入图片描述
在这里插入图片描述

[root@consul conf]# mkdir vhost

在这里插入图片描述

[root@consul sbin]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@consul sbin]# nginx                                         启动nginx
[root@consul sbin]# ss -natp |grep nginx
LISTEN     0      128          *:80                       *:*                   users:(("nginx",pid=5294,fd=6),("nginx",pid=5293,fd=6))

5、配置模板

[root@consul ~]# cd /root/consul/
[root@consul consul]# ls
consul_0.9.2_linux_amd64.zip
[root@consul consul]# vim nginx.ctmpl
upstream http_backend {                                协议的后端
  {{range service "nginx"}}                           服务的范围只收集nginx信息
   server {{.Address}}:{{.Port}};     此处引用的变量会指向后端的地址和端口(动态变化)
   {{end}}
}

server {
  listen 84;
  server_name localhost 192.168.133.101;                    反向代理的服务器地址,前端服务器地址
  access_log /var/log/nginx/zy.com-access.log;
  index index.html index.php;
  location / {
    proxy_set_header HOST $host;
    proxy_set_header X-Real-IP $remote_addr;                    后端真实IP
    proxy_set_header Client-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;           转发地址
    proxy_pass http://http_backend;
  }
}

在这里插入图片描述

6、配置并启动consul-template

Consul-Template是一个守护进程,用于实时查询Consul集群信息,并更新文件系统上任意数量的指定模板,生成配置文件。
更新完成以后,可以选择运行 shell命令执行更新操作,重新加载Nginx。Consul-Template可以查询consul 中的服务目录、Key、Key-values 等。
这种强大的抽象功能和查询语言模板可以使Consul-Template 特别适合动态的创建配置文件。

[root@consul ~]# cd /opt

在这里插入图片描述

[root@consul opt]# unzip consul-template_0.19.3_linux_amd64.zip

在这里插入图片描述

[root@consul opt]# mv consul-template /usr/bin
[root@consul opt]# consul-template \
-consul-addr 192.168.133.101:8500 \                            指向可视化端口
-template "/root/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/zy.conf:/usr/local/nginx/sbin/nginx -s reload" \                                                 通过哪个文件重载nginx
--log-level=info                                              日志级别
[root@consul vhost]# cat /usr/local/nginx/conf/vhost/zy.conf

在这里插入图片描述

7、测试

在docker服务器上再创建一个nginx容器

[root@docker ~]# docker run -itd -p:85:80 --name test-05 -h test05 nginx 
85d367c0ecd14099e6737f02c0ee71d7cdcf71da1c0933c6398d41cddf8423f5

在这里插入图片描述
在这里插入图片描述
创建日志文件夹,如果没有consul上的nginx无法启动,必须要有这个目录根据模板内的设定建立
在这里插入图片描述

[root@docker ~]# mkdir -p /var/log/nginx                          创建日志文件夹
[root@docker ~]# nginx -s reload                                  重载nginx
 [root@docker ~]# curl 127.0.0.1:83

在这里插入图片描述
在这里插入图片描述

[root@docker ~]# docker logs -f test-01

在这里插入图片描述

在这里插入图片描述

[root@docker ~]# docker rm -f 5ceb74bfaeb7
5ceb74bfaeb7

在这里插入图片描述

[root@consul vhost]# pwd
/usr/local/nginx/conf/vhost
[root@consul vhost]# cat zy.conf 

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker Consul是一个用于服务发现、配置和分布式协调的开源工具。它可以帮助您在Docker环境中管理和监控多个容器的状态和连接。 使用Docker Consul,您可以注册和发现容器中的服务,并利用其提供的API进行服务发现、健康检查和负载均衡。它还提供了键值存储和事件系统,用于共享和同步配置信息。 下面是一些使用Docker Consul的常见场景: 1. 服务发现:您可以在Docker容器中运行Consul代理,并将每个容器注册为Consul服务。这样,其他容器或应用程序可以通过Consul发现和访问这些服务。 2. 健康检查:Consul可以定期检查容器中的服务是否正常运行,并根据检查结果自动更新服务的状态。这样,其他容器或应用程序可以根据服务的健康状态进行决策。 3. 配置管理:Consul提供了一个键值存储系统,用于存储和管理配置信息。您可以将配置信息存储在Consul中,并使用其API在容器中访问这些配置。 4. 事件订阅:Consul的事件系统允许您订阅特定类型的事件,例如服务注册或注销、健康检查状态变化等。这样,您可以根据事件触发自定义逻辑。 要使用Docker Consul,您可以在Docker环境中部署Consul容器,并使用其提供的API和命令行工具进行配置和管理。您可以通过Docker Compose或Docker Swarm等工具来编排和管理Consul集群。 请注意,这里提到的Docker Consul是指使用Docker容器部署和管理的Consul实例,并不是指Consul本身由Docker开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值