Consul建立docker集群

一、概述

1、什么是consul

Consul是HashiCorp公司推出的开源工具,Consul由Go语言开发,部署起来非常容易,只需要极少的可执行程序和配置文件,具有绿色、轻量级的特点。
Consul是分布式的、高可用的、可横向扩展的用于实现分布式系统的服务发现与配置。

Consul的作用

  • 服务注册与发现(主要功能),提供HTTP和DNS两种发现方式
  • 健康检查,支持多种协议,HTTP、TCP等
  • Key/Value存储
  • 支持多数据中心
  • 基于Golong语言,可移植性强
  • 支持ACL访问控制
  • 与Docker等轻量级容器可无缝配合

2、consul-template概述

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

3、registrator的作用

一个由Go语言编写的,针对docker使用的,可以用于检测容器状态自动注册和注销docker容器的服务到服务配置中心。目前支持Consul、Etcd和SkyDNS2。

4、docker容器

这个就不多说了,具体看之前的博客

二、搭建consul集群环境

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

案例环境

主机操作系统IP地址主要软件及版本
consulCentos 7192.168.163.100Docker 、Consul、Consul-template
registratorCentos 7192.168.163.150Docker、registrator

案例需求
实现单机网络下容器与容器之间互通
使用Docker Compose创建容器
搭建Consul服务实现自动发现和更新

实验准备
两台主机配置好docker

1、安装Consul

consul:192.168.163.100
consul包下载
编译安装consul

mkdir /root/consul
cd /root/consul
//放入安装包
unzip consul_0.9.2_linux_amd64.zip
mv consul /usr/bin
consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.163.100 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &

 
 

    在这里插入图片描述
    查看集群信息

    consul members
    consul info | grep leader
    这里查询到的8300端口用于集群内数据的读写和复制
    
     
     

      在这里插入图片描述
      通过httpd api获取集群信息

      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、配置容器服务自动加入nginx集群

          registrator:192.168.163.150

          (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.163.150 \
          consul://192.168.163.100:8500
          
           
           

            在这里插入图片描述

            (2)测试服务

            测试发现功能是否正常

            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:91:80 --name test-03 -h test03 httpd
            docker run -itd -p:92:80 --name test-04 -h test04 httpd
            
             
             

              在这里插入图片描述

              3、验证http和nginx服务是否注册到consul

              真机
              浏览器输入http://192.168.163.100:8500,“单击NODES”,然后单击“consurl-server01”,会出现5个服务
              在这里插入图片描述

              consul:192.168.163.100

              curl 127.0.0.1:8500/v1/catalog/services
              
               
               

                在这里插入图片描述

                4、安装consul-template

                consul:192.168.163.100
                consul-template的压缩包下载链接

                unzip consul-template_0.19.3_linux_amd64.zip
                mv consul-template /usr/bin/
                
                 
                 

                  在这里插入图片描述

                  5、准备template nginx模板文件

                  consul:192.168.163.100

                  vim /root/consul/nginx.ctmpl
                  upstream http_backend {
                    {{range service "nginx"}}
                    server {{.Address}}:{{.Port}};
                    {{end}}
                  }
                  server {
                    listen 81;
                    server_name localhost 192.168.163.100;
                    access_log /var/log/nginx/nginx01-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;
                    }
                  }
                  
                   
                   

                    在这里插入图片描述

                    6、部署nginx

                    consul:192.168.163.100
                    编译安装nginx

                    yum install -y gcc pcre-devel zlib-devel
                    cd /opt
                    tar zxvf nginx-1.12.0.tar.gz
                    cd nginx-1.12.0/
                    ./configure --prefix=/usr/local/nginx
                    make && make install
                    
                     
                     

                      在这里插入图片描述

                      配置 nginx

                      vim /usr/local/nginx/conf/nginx.conf
                      http {
                        include    mime.types;
                        include vhost/*.conf;  //添加虚拟主机目录
                        default_type application/octet-stream;
                      //创建虚拟主机目录
                      mkdir /usr/local/nginx/conf/vhost
                      //创建日志文件目录
                      mkdir /var/log/nginx
                      //启动nginx
                      /usr/local/nginx/sbin/nginx
                      
                       
                       

                        在这里插入图片描述

                        7、启动template

                        consul:192.168.163.100

                        consul-template -consul-addr 192.168.163.100:8500 \
                        -template "/root/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/nginx01.conf:/usr/local/nginx/sbin/nginx -s reload" \
                        --log-level=info
                        
                         
                         

                          在这里插入图片描述

                          重开一个consul终端

                          cat /usr/local/nginx/conf/vhost/nginx01.conf
                          upstream http_backend {
                            server 192.168.163.150:81;
                            server 192.168.163.150:82;
                          server {
                            listen 81;
                            server_name localhost 192.168.163.100;
                            access_log /var/log/nginx/ljj-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;
                            }
                          }
                          
                           
                           

                            在这里插入图片描述

                            8、测试

                            • 增加一个nginx容器节点,测试服务发现及配置更新功能

                            registrator:192.168.163.150
                            在registrator服务端注册

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

                              在这里插入图片描述
                              consul:192.168.163.100
                              在consul服务器监控装填会有提示自动更新
                              在这里插入图片描述
                              在这里插入图片描述
                              在这里插入图片描述

                              查看三台nginx容器日志,请求正常轮询到各个容器节点上
                              registrator:192.168.163.150

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

                                在这里插入图片描述

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

                                9、部署consul多节点

                                192.168.163.200
                                添加一台已有docker环境的服务器192.168.163.200/24加入已有的群集中

                                mkdir /root/consul
                                cd /root/consul
                                //放入安装包
                                unzip consul_0.9.2_linux_amd64.zip
                                mv consul /usr/bin
                                consul agent \
                                -server \
                                -bootstrap \
                                -ui \
                                -data-dir=/var/lib/consul-data \
                                -bind=192.168.163.200 \
                                -client=0.0.0.0 \
                                -node=consul-server02 \
                                -enable-script-checks=true \
                                -datacenter=dc1 \
                                -join 192.168.163.100 &> /var/log/consul.log &
                                #--------参数解释--------------------------------
                                -enable-script-checks=true:设置检查服务为可用
                                -datacenter:数据中心名称
                                -join:加入到已有的集群中
                                
                                 
                                 

                                  在这里插入图片描述
                                  consul:192.168.163.100192.168.163.200上检查是否加入
                                  在这里插入图片描述
                                  真机上验证

                                  在这里插入图片描述

                                  • 0
                                    点赞
                                  • 1
                                    收藏
                                    觉得还不错? 一键收藏
                                  • 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、付费专栏及课程。

                                  余额充值