当前位置:主页 > 查看内容

Docker consul系统构架

发布时间:2021-05-12 00:00| 位朋友查看

简介:文章目录 一、consul概述 架构术语 Consul的使用场景 二、consul环境搭建 1.server192.168.220.110部署 2.client部署192.168.220.120 3.配置template模板自动更新 4.测试访问代理服务器以及多节点 一、consul概述 Consul 是一个复杂的系统它是HashiCorp公司……

一、consul概述

Consul 是一个复杂的系统,它是HashiCorp公司的一个用于实现分布式系统的服务发现于配置工具,Consul内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,同时,Consul具有功能完善,部署简单,使用方便等特点

架构术语

  • Agent:Agent是长期运行在每个consul集群成员节点上守护进程。通过命令consul agent启 动。Agent有client和server两种模式。由于每个节点都必须运行agent,所有节点要么是client要 么是server。所有的Agent都可以调用DNS或HTTPAPI,并负责检查和维护服务同步
  • client:运行client模式的Agent,将所有的RPCs转发到Server。Client是相对无状态的。 Client唯一所做的是在后台参与LAN gossip pool。只消耗少量的资源,少量的网络带宽。
  • Server:运行Server模式的Agent,参与Raft quorum,维护集群的状态,响应RPC查询,与 其他数据中心交互WAN gossip,转发查询到Leader或远程数据中心
  • datacenter:数据中心,定义为:网络环境是私有,低延迟,高带宽的,排除和公网的通 信。但有一些细节需要注意,比如在AWS的EC2,多个可用性区域是否被认为组成了单一的数据 中心?而数据中心的定义不包括基于公共互联网环境,但是对于我们使用者而言,在同一个EC2 的多个可用性区域会被认为是一个的数据中心
  • Consensus :consensus,意味着leader election协议,以及事务的顺序。由于这些事务是基 于一个有限状态机,consensus的定义意味着复制状态机的一致性。
  • Gossip :consul是建立在Serf(去中心化服务发现和编排)之上,提供了完成的Gossip协议(下文会简单介绍此协议),用于成员维护故障检测、事件广播。
    gossip是基于UDP协议实现随机的节点到节点的通信,主要是在UDP。
  • LAN Gossip:指的是LAN gossip pool,包含位于同一个局域网或者数据中心的节点。
  • WAN Gossip:指的是WANgossip pool,只包含server节点,这些server主要分布在不同的数 据中心或者通信是基于互联网或广域网的。
  • RPC:远程过程调用。是允许client请求服务器的请求/响应机制。

在这里插入图片描述

Consul的使用场景

Consul的应用场景包括服务发现、服务隔离、服务配置

比如:docker实例的注册与配置共享、coreos实例的注册与配置共享、vitess集群、SaaS应用的配置共享、Consul与confd服务集成,动态生成nginx和haproxy配置文件或者Consul结合nginx构建高可用可扩展的Web服务。

二、consul环境搭建

1.server(192.168.220.110)部署

[root@localhost ~] # mkdir consul
[root@localhost ~] # cd consul/
[root@localhost ~/consul] # rz -E
rz waiting to receive. ## 这里将安装包拖入consul目录下
[root@localhost ~/consul] # ls
consul_0.9.2_linux_amd64.zip
[root@localhost ~/consul] # unzip consul_0.9.2_linux_amd64.zip 
Archive:  consul_0.9.2_linux_amd64.zip
  inflating: consul                  
[root@localhost ~/consul] # ls
consul  consul_0.9.2_linux_amd64.zip
[root@localhost ~/consul] # mv consul /usr/bin

[root@localhost ~/consul] # consul agent \
> -server \
> -bootstrap \
> -ui \
> -data-dir=/var/lib/consul-data \
> -bind=192.168.220.110 \
> -client=0.0.0.0 \
> -nade=consul-server01 &> /var/log/consul.log &
[1] 75549
[root@localhost ~/consul] # consul members
Node             Address               Status  Type    Build  Protocol  DC
consul-server01  192.168.220.110:8301  alive   server  0.9.2  2         dc1
[root@localhost ~/consul] # consul info | grep leader
	leader = true
	leader_addr = 192.168.220.110:8300

在这里插入图片描述

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

在这里插入图片描述

netstat -natp |grep consul
5个端口的作用:
8300:集群内数据的读写和复制
8301:单个数据中心gossip协议通讯
8302:跨数据中心gossip协议通讯
8500:提供获取服务列表、注册服务、注销服务等HTTP接口;提供UI服务
8600:采用DNS协议提供服务发现功能

在这里插入图片描述

2.client部署(192.168.220.120)

docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
-ip=192.168.220.120 \
consul://192.168.220.110:8500

[root@ppp ~] # docker images
REPOSITORY               TAG       IMAGE ID       CREATED       SIZE
gliderlabs/registrator   latest    3b59190c6c80   4 years ago   23.8MB

[root@ppp ~] # docker ps -a
CONTAINER ID   IMAGE                           COMMAND                  CREATED          STATUS          PORTS     NAMES
39c380b4b512   gliderlabs/registrator:latest   "/bin/registrator -i…"   22 seconds ago   Up 21 seconds             registrator


systemctl restart docker
docker run -itd -p:81:80 --name pyy01 -h pyy01 nginx
docker run -itd -p:82:80 --name pyy02 -h pyy02 nginx
docker run -itd -p:83:80 --name pyy03 -h pyy03 httpd
docker run -itd -p:84:80 --name pyy04 -h pyy04 httpd

在这里插入图片描述

此时访问浏览器
http://192.168.220.110:8500
在这里插入图片描述

在这里插入图片描述

3.配置template模板自动更新

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

server 192.168.220.110

vim nginx.ctmpl

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

server {
 listen 100;
 server_name localhost 192.168.220.110;
 access_log /var/log/nginx/pyy.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

这里将Nginx安装包拖入终端

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

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

make && make install


vim /usr/local/nginx/conf/nginx.conf
##19行插入     include vhost/*.conf;

在这里插入图片描述

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

/usr/local/nginx/sbin/nginx

cd /opt
拖入安装包  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.220.110:8500 -template "/root/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/pyy.conf:/usr/local/nginx/sbin/nginx -s reload" --log-level=info

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

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

在这里插入图片描述

4.测试访问代理服务器以及多节点

浏览器查询192.168.220.110

http://192.168.220.110

docker logs -f pyy01

在这里插入图片描述

在这里插入图片描述

consul多节点
###添加一台有docker环境的服务器192.168.220.130加入已有的集群

consul agent \
-server \
--bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.220.130 \
-client=0.0.0.0 \
-node=consul-server02 \
-enable-script-checks=true \
-datacenter=dc1 \
-join 192.168.220.130 &> /var/log/consul.log &

###############################################
--enable-script-ckecks=true:设置检查服务为可用
-datacenter:数据中心名称
-join:加入到已有的集群中
;原文链接:https://blog.csdn.net/Pyy0928/article/details/115324730
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!
上一篇:MySQL 运维 - 从零开始学习 | 超详细 下一篇:没有了

推荐图文


随机推荐