Docker Consul 介绍与使用理论+实战

Consul理论

Consul 简介与特性

  • Consul是HashiCorp公司推出的开源工具,Consul是分布式的、高可用的、 可横向扩展的用于实现分布式系统的服务发现与配置。
    主要特性:
  • Consul 支持健康检查,并允许 HTTP 、GRPC 和 DNS 协议调用 API 存储键值对。
  • 一致性协议采用 Raft 算法,用来保证服务的高可用。
  • 使用 GOSSIP 协议管理成员和广播消息, 并且支持 ACL 访问控制。
  • consul的实例叫agent,agent有两种运行模式:server和client 。
  • 官方建议每个Consul Cluster数据中心至少有3个或以上的运行在Server Mode的Agent,Client节点不限。

Consul 使用场景

  • 服务发现场景中consul作为注册中心,服务地址被注册到consul中以后,可以使用consul提供的dns、http接口查询,consul支持health check。
  • 服务隔离场景中consul支持以服务为单位设置访问策略,能同时支持经典的平台和新兴的平台,支持tls证书分发,service-to-service加密。
  • 服务配置场景中consul提供key-value数据存储功能,并且能将变动迅速地通知出去,通过工具consul-template可以更方便地实时渲染配置文件。
  • 举例说明docker实例的注册与配置共享、coreos实例的注册与配置共享、vitess集群、SaaS应用的配置共享、Consul与confd服务集成,动态生成nginx和haproxy配置文件或者Consul结合nginx构建高可用可扩展的Web服务。

Consul架构图

在这里插入图片描述

  • Consul Cluster由部署和运行了Consul Agent的节点组成,在Cluster中有两种角色Server和Client;
  • Server和Client的角色和Consul Cluster上运行的应用服务无关,是基于Consul层面的一种角色划分;
  • Consul Server:用于维护Consul Cluster的状态信息。官方建议至少要运行3个或者3个以上的Consul Server。 多个server之中需要选举一个leader,这个选举过程Consul基于Raft协议实现,多个Server节点上的Consul数据信息保持强一致性。在局域网内与本地客户端通讯,通过广域网与其他数据中心通讯;
  • Consul Client:只维护自身的状态, 并将HTTP和DNS接口请求转发给服务端。

Consul的优势

  • Consul使用Raft算法来保证一致性,比复杂的Paxos算法更直接,相比较而言zookeeper采用的是Paxos,而etcd使用的则是Raft;
  • Consul支持多数据中心,内外网的服务采用不同的端口进行监听,多数据中心集群可以避免单数据中心的单点故障,而其部署则需要考虑网络延迟、分片等情况等。zookeeper和etcd均不提供多数据中心功能的支持;
  • Consul支持健康检查,etcd不提供此功能(必须设置etcdctl命令检查);
  • Consul支持http和dns协议接口,zookeeper的集成较为复杂,etcd只支持http协议;
  • Consul官方提供web管理界面,etcd无此功能。

Docker Consul实验操作

实验准备

服务器IP地址部署应用
Consul服务器192.168.18.165Docker-ce、Consul、Consul-template模板、nginx服务
Docker服务器192.168.18.163Docker-ce registrator

实验步骤

部署consul服务
  1. 创建工作目录,并将配置文件拷贝到目录里
mkdir -p /root/consul
cd consul
  1. 解压文件,并且移动执行文件
unzip consul_0.9.2_linux_amd64.zip
mv consul /usr/bin/
  1. 创建consul代理agent
consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.18.165 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &
  1. 查看端口及群集信息
netstat -ntap |grep 8500
consul members
consul info |grep leader

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

容器服务自动加入nginx群集
  1. 在容器服务器上安装 gliderlabs/registrator
docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
-ip=192.168.18.163 \
consul://192.168.18.165:8500 
  1. 测试 consul 服务发现功能是否正常
docker run -itd -p:83:80 --name test-1 -h test1 nginx
docker run -itd -p:84:80 --name test-2 -h test2 nginx
docker run -itd -p:88:80 --name test-3 -h test3 httpd
docker run -itd -p:89:80 --name test-4 -h test4 httpd
  1. 验证consul 的服务发现功能
  • 打开浏览器输入http://192.168.18.165:8500,“单击NODES”,然后单击“consurl-server01”,出现5个服务,表示nginx服务已经注册到consul里。
    在这里插入图片描述
部署consul-template和nginx
  • Consul-Template 是一个守护进程,用于实时查询Consul 集群信息,并更新文件系统上任意数量的指定模板,生成配置文件。 更新完成以后,可以选择运行shell 命令执行更新操作,重新加载Nginx。
  • Consul-Template可以查询 Consul 中的服务目录、Key、Key-values 等。
    这种强大的抽象功能和查询语言模板可以使Consul-Template 特别适合动态的创建配置文件。
  • 例如:创建Apache/Nginx Proxy Balancers、Haproxy Backends
  1. 准备template nginx模板
vim /root/consul/nginx.ctmpl
upstream http_backend {
   {{range service "nginx"}}
    server {{.Address}}:{{.Port}};
     {{end}}
}

server {
  listen 88;
  server_name ct 192.168.18.165;
  access_log /var/log/nginx/cz.cn-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;
  }
}
  1. 编译安装nginx
  2. 配置nginx
vim /usr/local/nginx/conf/nginx.conf

在这里插入图片描述

#创建虚拟主机目录
mkdir /usr/local/nginx/conf/vhost
#创建日志文件目录
mkdir /var/log/nginx
#建立软链接
ln -s /usr/local/nginx/sbin/nginx /usr/bin/
#启动 nginx 服务
nginx
  1. 配置启动template
cd /root/consul
#解压
unzip consul-template_0.19.3_linux_amd64.zip
#移动文件
mv consul-template /usr/bin/
#启动服务,并指明nginx的配置文件名
consul-template -consul-addr 192.168.18.165:8500 \
-template "/root/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/cz.conf:/usr/local/nginx/sbin/nginx -s reload" \
--log-level=info

在这里插入图片描述

  1. 在另一个终端查看生成配置文件
cat /usr/local/nginx/conf/vhost/cz.conf 
upstream http_backend {
   
    server 192.168.18.163:83;
     
    server 192.168.18.163:84;
     
}

server {
  listen 88;
  server_name ct 192.168.18.165;
  access_log /var/log/nginx/cz.cn-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;
  }
}
  • 测试网页:http://192.168.18.165:88
    在这里插入图片描述
  1. 查看日志
docker logs -f test-1
docker logs -f test-2

在这里插入图片描述

  1. 增加一个nginx容器节点,测试服务发现及配置更新功能
docker run -itd -p:85:80 --name test-5 -h test5 nginx

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

实验总结

  • 本次实验consul实现了自动化发现新增服务服务,加入到群集中,并通过反向代理进行测试,配置文件实时更新,template动态配置服务的配置文件。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值