Docker ---Consul部署

Docker —Consul部署

Consul 简化了分布式环境中的服务的注册和发现流程,通过 HTTP 或者 DNS 接口发现。支持外部 SaaS 提供者等

服务发现

  • 服务发现是分布式应用程序之间管理相互关系的一种机制。一个分布式程序一般由多个组件组成。这些组件可以都放在一台机器上,也可以分布在多个数据中心,甚至分布在不同的地理区域。这些组件通常可以为其他组件提供服务,或者为其他组件消费服务
  • 服务发现 允许某个组件在想要与其他组件交互时,自动找到对方 。由于这些应用沈本是分布式的,服务发现机制也需要分布式的。而且,服务发现作为分布式应用不同组件之间的“胶水”,其本身还需要足够动态、可开,适应性强,而且可以快速且一致地共享关于这些服务的数据
  • 另外,Docker主要关注分布式应用以及 面向服务架构与微服务架构 。这些关注点很适合与某个服务发现工具集成。每个Docker容器可以将其中运行的服务注册到服务发现工具里。注册的信息可以是IP地址或者端口,或者两者都有,以便服务之间进行交互

consul介绍

Consul是一个使用一致性算法的特殊数据存储器。Consul使用Raft一致性算法来提供确定的写入机制。Consul暴露了键值存储系统和服务分类系统,并提供可用性、高容错能力,并保证强一致性。服务可以将自己注册到Consul,并以高可用且分布式的方式共享这些信息

Consul还提供了一些有趣的功能:

  • 提供了根据API进行服务分类,代替了大部分传统服务发现工具的键值对存储提供两种接口来查询信息:基于内置的DNS服务的DNS查询接口和基于HTTP的REST API查询接口。选择适合的接口,尤其是基于DNS的接口,可以很方便地将Consul与现有环境集成
  • 提供了服务监控,也称作健康监控。Consul内置了强大的服务监控系统
    为了更好地理解Consul是如何工作的,本文先介绍如何在Docker容器里分布式运行Consul。之后会从Docker容器将服务注册到Consul,并从其他Docker容器访问注册的数据。为了更有挑战,会让这些容器运行在不同的Docker宿主机上

为了做到这些,需要做到以下几点:

  • 创建Consul服务的Docker镜像
  • 构建3台运行Docker的宿主机,并在每台上运行一个Consul。这3台宿主机会提供一个分布式环境,来展现Consul如何处理弹性和失效工作的
  • 构建服务,并将其注册到Consul,然后从其他服务查询该数据

搭建consul集群

建立consul服务

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

Consul agent有两种运行模式

  • Server
  • Client

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

环境

操作系统 IP 服务
centos7 192.168.116.134 server
centos7 192.168.116.135 client

server部署(192.168.161.12)

cd /opt
上传consul_0.9.2_linux_amd64.zip

unzip consul_0.9.2_linux_amd64.zip

mv consul /usr/bin

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OEYSstSB-1666571051098)(F:\typorase\jpg\937.png)]

consul agent \
-server \         server模式
-bootstrap \      前端框架(node.js)
-ui \             可被访问的web界面
-data-dir=/var/lib/consul-data \
-bind=192.168.116.134 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &


consul agent \
-server \         
-bootstrap \      
-ui \             
-data-dir=/var/lib/consul-data \
-bind=192.168.116.134 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &

Docker ---Consul部署_第1张图片

consul members       #查看集群信息

netstat -natp | grep 8500

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eMSm69w9-1666571051099)(F:\typorase\jpg\939.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3KYSpUlB-1666571051100)(F:\typorase\jpg\940.png)]

192.168.116.134:8500

Docker ---Consul部署_第2张图片

client部署

容器服务自动加入consul集群

在192.168.116.135

docker run -d \
--name=registrator \    #容器名称
--net=host \            #域名空间host
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
-ip=192.168.116.135 \
consul://192.168.116.134:8500

Docker ---Consul部署_第3张图片

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

两个nginx容器、两个apache容器

systemctl restart docker
docker run -itd -p:83:80 --name test-01 -h test01 nginx
docker run -itd -p:84:80 --name test-02 -h test02 nginx
docker run -itd -p:88:80 --name test-03 -h test03 httpd
docker run -itd -p:89:80 --name test-04 -h test04 httpd

Docker ---Consul部署_第4张图片

Docker ---Consul部署_第5张图片

Docker ---Consul部署_第6张图片

配置template模板自动更新

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

cd /opt
mkdir consul
cd consul/
vim nginx.ctmpl


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

server {
  listen 85;
  server_name localhost 192.168.116.134;
  access_log /var/log/nginx/kgc.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;
  }
}

Docker ---Consul部署_第7张图片

consul-template_0.19.3_linux_amd64.zip上传

unzip consul-template_0.19.3_linux_amd64.zip

mv consul-template /usr/bin/

Docker ---Consul部署_第8张图片

安装nginx

yum -y install gcc pcre-devel zlib-devel

tar zxvf nginx-1.12.0.tar.gz
cd /opt/nginx-1.12.10

./configure --prefix=/usr/local/nginx

make && make install

Docker ---Consul部署_第9张图片

vim /usr/local/nginx/conf/nginx.conf
//19行添加  include vhost/*.conf;
添加,包含chost目录下所有以.conf结尾的文件

Docker ---Consul部署_第10张图片

cd /usr/local/nginx/conf/
mkdir vhost
mkdir /var/log/nginx


Docker ---Consul部署_第11张图片

consul-template -consul-addr 192.168.116.134:8500 \
-template "/opt/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/benet.conf:/usr/local/nginx/sbin/nginx -s reload" \
--log-level=info

Docker ---Consul部署_第12张图片

再开一个终端

cat /usr/local/nginx/conf/vhost/yun.conf

Docker ---Consul部署_第13张图片

 docker run -itd -p:85:80 --name test-05 -h test05 nginx

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wrsiMlvb-1666571051103)(F:\typorase\jpg\955.png)]

Docker ---Consul部署_第14张图片

Docker ---Consul部署_第15张图片

测试访问代理服务器

192.168.116.134:85

docker logs -f test-01
docker logs -f test-02

Docker ---Consul部署_第16张图片

你可能感兴趣的:(云,IT,Linux,1024程序员节)