目录

  • 一、Consul 简介
  • 二、Consul 特点
  • 三、Consul容器服务更新理论
  • 四、Docker consul自动发现服务架构的构建
  • 五、Consul-template参数
  • 六、consul 端口
  • 七、搭建 consul 集群
  • 八、安装 consul-template工具

一、Consul 简介

Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件,由 HashiCorp 公司用 Go 语言开发,基于 Mozilla Public License 2.0 的协议进行开源。

二、Consul 特点

● Consul 支持健康检查,并允许 HTTP 、GRPC 和 DNS 协议调用 API 存储键值对。
● 一致性协议采用 Raft 算法,用来保证服务的高可用。 使用 GOSSIP 协议管理成员和广播消息, 并且支持 ACL 访问控制。
● 方便部署,与 Docker 等轻量级容器可无缝配合。

三、Consul容器服务更新理论

Consul是一个分布式、高可用的系统,是一个为了解决在生产环境中服务注册,服务发现,服务配置的一个工具,它有多个组件,提供如下几个关键功能:

● 服务发现: Consul的某些客户端可以提供一个服务,例如api或者mysql,其它客户端可以使用Consul去发现这个服务的提供者。使用DNS或者HTTP,应用可以很容易的找到他们所依赖的服务。

● 健康检查: Consul客户端可以提供一些健康检查,这些健康检查可以关联到一个指定的服务(服务是否返回200 OK),也可以关联到本地节点(内存使用率是否在90%以下)。这些信息可以被一个操作员用来监控集群的健康状态,被服务发现组件路由时用来远离不健康的主机。

● 键值存储: 应用可以使用Consul提供的分层键值存储用于一些目的,包括动态配置、特征标记、协作、leader选举等等。通过一个简单的HTTP API可以很容易的使用这个组件。

● 多数据中心: Consul对多数据中心有非常好的支持,这意味着Consul用户不必担心由于创建更多抽象层而产生的多个区域。

四、Docker consul自动发现服务架构的构建

  1. 每个提高服务的节点上都需要部署和运行 consul 的 agent
  2. Consul agent 两种运行模式:server; client;
  3. server 与 client 只是 consul 群集层面的区分,与搭建在 cluster之上的应用服务无关。

五、Consul-template参数

参数 说明
-auth=<user[:pass]> 设置基本的认证用户名和密码
-consul= 设置Consul实例的地址
-max-stale= 查询过期的最大频率,默认是1s
-dedup 启用重复数据删除,当许多consul template实例渲染一个模板的时候可以降低consul的负载
-ssl 使用https连接Consul使用SSL
-ssl-verify 通过SSL连接的时候检查证书
-ssl-cert SSL客户端证书发送给服务器
-ssl-key 客户端认证时使用的SSL/TLS私钥
-ssl-ca-cert 验证服务器的CA证书列表
-token= 设置Consul API的token
-syslog 把标准输出和标准错误重定向到syslog,syslog的默认级别是local0
-syslog-facility= 设置syslog级别,默认是local0,必须和-syslog配合使用
-template= 增加一个需要监控的模板,格式是:‘templatePath:outputPath(:command)’,多个模板则可以设置多次
-wait= 当呈现一个新的模板到系统和触发一个命令的时候,等待的最大最小时间。如果最大值被忽略,默认是最小值的4倍
-retry= 当在和consul api交互的返回值是error的时候,等待的时间,默认是5s
-config= 配置文件或者配置目录的路径
-pid-file= PID文件的路径
-log-level= 设置日志级别,可以是"debug",“info”, “warn” (default), and “err”
-dry Dump生成的模板到标准输出,不会生成到磁盘
-once 运行consul-template一次后退出,不以守护进程运行
-reap 子进程自动收割

六、consul 端口

端口 说明
TCP/8300 8300
TCP/UDP/8301 8301端口用于单个数据中心所有节点之间的互相通信,即对LAN池信息的同步。它使得整个数据中心能够自动发现服务器地址,分布式检测节点故障,事件广播(如领导选举时间)。
TCP/UDP/8302 8302端口用于单个或多个数据中心之间的服务器节点的信息同步,即对WAN池信息的同步。它针对互联网的高延迟进行了优化,能够实现跨数据中心请求。
8500 8500端口基于HTTP协议,用于API接口或web UI访问
8600 8600端口作为DNS服务器,它使得我们可以通过节点名查询节点信息

七、搭建 consul 集群

服务器 IP地址 需要安装的软件
nginx代理服务器 192.168.112.10 Docker-ce 、Docker-Compose、Consul、Consul-template
节点服务器 192.168.112.20 Docker-ce

● 配置 consul 服务器

[root@localhost ~]# mkdir consul
[root@localhost ~]# cd consul/
[root@localhost consul]# ls
consul_0.9.2_linux_amd64.zip  consul-template_0.19.3_linux_amd64.zip  nginx-1.12.2.tar.gz
[root@localhost consul]# unzip consul_0.9.2_linux_amd64.zip
Archive:  consul_0.9.2_linux_amd64.zipinflating: consul
[root@localhost consul]# ll
总用量 55364
-rwxr-xr-x. 1 root root 42777946 8月  10 2017 consul
-rw-r--r--. 1 root root 10233177 11月 30 13:55 consul_0.9.2_linux_amd64.zip
-rw-r--r--. 1 root root  2694811 11月 30 13:55 consul-template_0.19.3_linux_amd64.zip
-rw-r--r--. 1 root root   981687 10月 14 11:18 nginx-1.12.2.tar.gz
[root@localhost consul]# mv consul /usr/bin/#便于系统识别
#安装 Consul 服务
[root@localhost consul]# consul agent \
> -server \ #服务功能
> -bootstrap \ #参与选举
> -ui \ #提供web界面
> -data-dir=/var/lib/consul-data \ #提供一个代理存储数据目录
> -bind=192.168.112.10 \ #绑定本地地址
> -client=0.0.0.0 \ #监控的地址,所有网段
> -node=consul-server01 &> /var/log/consul.log &#定义节点名称,日志混合输出到log,并且放到后台运行
[1] 47557
[root@localhost consul]# netstat -anpt | grep 8500
tcp6       0      0 :::8500                 :::*                    LISTEN      47557/consul        

● 查看集群信息

[root@localhost consul]# consul members
Node             Address              Status  Type    Build  Protocol  DC
consul-server01  192.168.112.10:8301  alive   server  0.9.2  2         dc1
[root@localhost consul]# consul info | grep leader#查看管理信息leader = trueleader_addr = 192.168.112.10:8300

● consul常用操作查看命令

[root@localhost consul]# consul members#查看集群信息
[root@localhost consul]# consul info | grep leader#查看管理信息
[root@localhost consul]# curl 127.0.0.1:8500/v1/status/peers#查看群集server成员
[root@localhost consul]# curl 127.0.0.1:8500/v1/status/leaders#群集中 Raf leader
[root@localhost consul]# curl 127.0.0.1:8500/v1/catalog/services#查看注册的所有服务
[root@localhost consul]# curl 127.0.0.1:8500/v1/catalog/nodes#群集节点详细信息
[root@localhost consul]# curl 127.0.0.1:8500/v1/catalog/nginx#查看 nginx 服务的信息

● 让容器服务自动加入 nginx 群集
配置192.168.112.20 节点

[root@client ~]# docker run -d \
> --name=registrator \ #定义容器名称
> --net=host \ #定义网络
> -v /var/run/docker.sock:/tmp/docker.sock \ #指定数据卷,存储信息
> --restart=always \
> gliderlabs/registrator:latest \ #定义镜像
> -ip=192.168.112.20 \ #指定本地地址
> consul://192.168.112.10:8500#指定consul管理节点地址、端口



● 测试服务、功能是否都正常

[root@client ~]# docker run -itd -p:83:80 --name test-01 -h test01 nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
852e50cd189d: Pull complete
571d7e852307: Pull complete
addb10abd9cb: Pull complete
d20aa7ccdb77: Pull complete
8b03f1e11359: Pull complete
Digest: sha256:6b1daa9462046581ac15be20277a7c75476283f969cb3a61c8725ec38d3b01c3
Status: Downloaded newer image for nginx:latest
8fd44ce5646726d5ec71d0f02554d540606a6c2f6dc69fe35e2d07235e961367
[root@client ~]# docker run -itd -p:84:80 --name test-02 -h test02 nginx
f7c9101d64fc2f564c591144514bbba332609d581e7c4b7ec14d4f5f9a4de9b5
[root@client ~]# docker ps -a
CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS              PORTS                NAMES
f7c9101d64fc        nginx                           "/docker-entrypoint.…"   2 minutes ago       Up 2 minutes        0.0.0.0:84->80/tcp   test-02
8fd44ce56467        nginx                           "/docker-entrypoint.…"   2 minutes ago       Up 2 minutes        0.0.0.0:83->80/tcp   test-01
7373cf5983af        gliderlabs/registrator:latest   "/bin/registrator -i…"   11 minutes ago      Up 11 minutes                            registrator

● 刷新

八、安装 consul-template工具

● consul-template

  1. 是基于 Consul 的自动替换配置文件的应用
  2. 可以查询 Consul 中的服务目录:Key、Key-values等
  3. 特别适合动态的创建配置文件
  4. 是一个守护进程,用于实时查询 consul 集群信息

● 准备 template nginx 模板文件

#在consul服务器上创建一个模板文件
[root@localhost ~]# vim consul/nginx.ctmplupstream http_backend {{{range service "nginx"}}server {{.Address}}:{{.Port}};{{end}}
}server {listen 83;server_name localhost 192.168.112.10;access_log /var/log/nginx/tom.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-Fprwarded-For $proxy_add_x_forwarded_for;proxy_pass http://http_backend;}
}
:wq

● 编译安装一个 nginx 服务

[root@localhost ~]# yum -y install gcc gcc-c++ pcre pcre-devel zlib-devel
[root@localhost ~]# cd consul/
[root@localhost consul]# ls
consul_0.9.2_linux_amd64.zip            nginx-1.12.2.tar.gz
consul-template_0.19.3_linux_amd64.zip  nginx.ctmpl
[root@localhost consul]# tar zxvf nginx-1.12.2.tar.gz -C /opt/
[root@localhost consul]# cd /opt/nginx-1.12.2/
[root@localhost nginx-1.12.2]# ./configure --prefix=/usr/local/nginx
[root@localhost nginx-1.12.2]# make && make install

● 配置nginx

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.confhttp {include       mime.types;include       vhost/*.conf;#添加虚拟主机目录default_type  application/octet-stream;


● 创建虚拟主机目录和日志文件目录

[root@localhost ~]# mkdir /usr/local/nginx/conf/vhost
[root@localhost ~]# mkdir /var/log/nginx

● 启动 nginx

[root@localhost ~]# /usr/local/nginx/sbin/nginx
[root@localhost ~]# netstat -anpt | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      54114/nginx: master

● 配置并启动 template

[root@localhost ~]# cd /usr/bin/
[root@localhost bin]# rz -E
rz waiting to receive.
[root@localhost bin]# unzip consul-template_0.19.3_linux_amd64.zip
Archive:  consul-template_0.19.3_linux_amd64.zipinflating: consul-template

● 启动template


[root@localhost ~]# consul-template -consul-addr 192.168.112.10:8500 -template "/root/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/whh.conf:/usr/local/nginx/sbin/nginx -s reload" --log-level=info#会进入监控状态
/root/consul/nginx.ctmpl#模板文件目录
/usr/local/nginx/conf/vhost/whh.conf#文件生成的路径(生成到vhost中)
/usr/local/nginx/sbin/nginx -s reload#重载服务配置
log-level=info#日志级别



● 有日志文件生成

[root@localhost ~]# cd /var/log/nginx/
[root@localhost nginx]# ls
tom.cn-access.log

● 在服务端添加一个容器测试

[root@client ~]# docker run -itd -p:85:80 --name test-03 -h test03 nginx
e74df5e3adcfd7b20e9a6157f39d725e19265f50480d657cd89aab404e91704e
[root@client ~]# docker ps -a
CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS              PORTS                NAMES
e74df5e3adcf        nginx                           "/docker-entrypoint.…"   6 seconds ago       Up 5 seconds        0.0.0.0:85->80/tcp   test-03
f7c9101d64fc        nginx                           "/docker-entrypoint.…"   2 hours ago         Up 2 hours          0.0.0.0:84->80/tcp   test-02
8fd44ce56467        nginx                           "/docker-entrypoint.…"   2 hours ago         Up 2 hours          0.0.0.0:83->80/tcp   test-01
7373cf5983af        gliderlabs/registrator:latest   "/bin/registrator -i…"   2 hours ago         Up 2 hours                               registrator
[root@client ~]# 

● 监控信息变化


● 删除一个容器

[root@client ~]# docker ps -a
CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS              PORTS                NAMES
e74df5e3adcf        nginx                           "/docker-entrypoint.…"   6 seconds ago       Up 5 seconds        0.0.0.0:85->80/tcp   test-03
f7c9101d64fc        nginx                           "/docker-entrypoint.…"   2 hours ago         Up 2 hours          0.0.0.0:84->80/tcp   test-02
8fd44ce56467        nginx                           "/docker-entrypoint.…"   2 hours ago         Up 2 hours          0.0.0.0:83->80/tcp   test-01
7373cf5983af        gliderlabs/registrator:latest   "/bin/registrator -i…"   2 hours ago         Up 2 hours                               registrator
[root@client ~]# docker stop 8fd44ce56467
8fd44ce56467
[root@client ~]# docker rm 8fd44ce56467
8fd44ce56467
[root@client ~]# docker ps -a
CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS              PORTS                NAMES
e74df5e3adcf        nginx                           "/docker-entrypoint.…"   7 minutes ago       Up 7 minutes        0.0.0.0:85->80/tcp   test-03
f7c9101d64fc        nginx                           "/docker-entrypoint.…"   2 hours ago         Up 2 hours          0.0.0.0:84->80/tcp   test-02
7373cf5983af        gliderlabs/registrator:latest   "/bin/registrator -i…"   2 hours ago         Up 2 hours                               registrator
[root@client ~]# 


● 配置文件变化


一看就懂的Docker Consul工具相关推荐

  1. 《零基础看得懂的C++入门教程 》——(1)第一个C++程序就让你知其所以然

    一.学习目标 了解第一个C++程序 了解第一个C++程序结构 了解什么是注释 了解什么是命名空间 了解C语言的输出(如何在程序运行时显示内容) 了解语句结束后需要使用什么符号表示结束 了解程序入口 目 ...

  2. 《假如编程是魔法之零基础看得懂的Python入门教程 》——(三)使用初始魔法跟编程魔法世界打个招呼吧

    学习目标 完成显示魔法的使用--输出print 完成传入魔法的使用--输入input 使魔法生效--运行python文件 目录 第一篇:<假如编程是魔法之零基础看得懂的Python入门教程 &g ...

  3. 《假如编程是魔法之零基础看得懂的Python入门教程 》——(二)魔法实习生第一步了解魔杖的使用

    学习目标 了解什么是开发环境 了解python语言的环境安装 了解python语言编程的编辑器工具 目录 第一篇:<假如编程是魔法之零基础看得懂的Python入门教程 >--(一)既然你选 ...

  4. 《假如编程是魔法之零基础看得懂的Python入门教程 》——(一)既然你选择了这系列教程那么我就要让你听得懂

    一.前言 几个月前编写了一份python语言入门的博文,近期重新审阅了一遍发现编写的质量太过随意,可能对于一部分人并不是非常友好,故此重新编写Python语言的零基础教程. 本篇教程将会尽量把一些专业 ...

  5. git指令如何葱master转到dev_小姐姐用动画图解Git命令,一看就懂!

    「 点击图片获取最近两年爆款好文 」 无论是开发.运维,还是测试,大家都知道Git在日常工作中的地位.所以,也是大家的必学.必备技能之一.之前公众号也发过很多git相关的文章: Git这些高级用法,喜 ...

  6. python如何运行_家长看的懂的Python编程---电脑要如何运行Python?

    本文是<家长看的懂的Python编程>第2节,如果你还没有看过前面的章节,请移步至如下链接! 家长看的懂的Python编程---预备知识 这一章我们要正式踏上Python的学习之旅,今天我 ...

  7. 这就是你日日夜夜想要的docker!!!---------docker+consul+ nginx集成分布式的服务发现与注册架构

    文章目录 一.Docker consul容器服务更新与发现理论 1.基本架构 2.基于nginx和consul构建高可用及自动发现的Docker服务架构 3.Docker consul自动发现服务架构 ...

  8. [免费专栏] Android安全之Android Xposed插件开发,小白都能看得懂的教程

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 Android安全付费专栏长期更新,本篇最新内容请前往: [ ...

  9. (新手版)GitHub 使用思想,上传,首次上传及日常使用教程(肯定看得懂)

    此这篇面向还不熟悉Git的新手同学 1:关于下载配置等问题 2:GitHub使用思想 3:首次上传的准备工作 4:上传 1:关于下载配置等问题 若Github还未成功安装和配置 可以移步至 (新手版) ...

最新文章

  1. swift 通知中心 进入后台多久会通知用户关闭此功能
  2. 地图之CLLocationManager的使用 定位功能使用
  3. 【星球知识卡片】模型量化的核心技术点有哪些,如何对其进行长期深入学习...
  4. 常见的Content-Type类型
  5. 编程语言的发展趋势及未来方向(2):声明式编程与DSL
  6. 亚马逊与 Uber,软件开发的方式有何不同?
  7. Windows Server 2003 R2标准版 SP2 64位 (简体中文)官方原版ISO镜像
  8. 全图范围设置(转自Esri中国社区)
  9. 基于安卓android studio的电影订票选座APP设计 前台后台
  10. android版本11下载,coloros 11正式版下载
  11. 支付宝宣布:狗年还玩五福!全网第一份集福攻略在这里
  12. 区块链能够防伪?你彷佛有什么误解!
  13. PHP学习日记0_PHP、静态网页、动态网页、静态网站访问流程、动态网站访问流程
  14. SQL学习之now()函数
  15. Notepad++文本比较
  16. 人工神经网络结构图高清,人工神经网络结构图解
  17. 群晖NAS 7.X版搭建博客网站,并内网穿透发布公网可访问 4-8
  18. JAVA乐居租房网的设计与实现计算机毕业设计Mybatis+系统+数据库+调试部署
  19. html5页面上下分栏,HTML5+CSS3 分栏效果
  20. 7N60-ASEMI场效应管7N60

热门文章

  1. 91-0001 QuickLook在Everything中失效
  2. this.data与this.setData
  3. P1498 南蛮图腾 题解
  4. mysql gtid 主备搭建
  5. python冰雹猜想_洛谷-P5727 【深基5.例3】冰雹猜想
  6. 实战项目(一)嵌入式基础学习与上位机入门设计
  7. 充电计划 -- http协议
  8. Python开发打飞机游戏
  9. abb机器人开通选项_ABB机器人加选项配置,方法可教,技术交流
  10. ABB机器人圆形角焊缝焊接程序