部署Consul建立Docker集群

  • 架构图
    • 1、什么是consul
    • 2、consul-template说明
    • 3、registrator的作用
    • 4、部署
      • ②、容器服务自动加入nginx集群
      • ③、服务端Consul下安装consul-template
      • ④、在宿主机上部署nginx
      • ⑤、部署多个Consul服务端主机

架构图


1、什么是consul

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

Consul的作用:

  1. 服务注册与发现(主要功能):提供HTTP和DNS两种发现方式
  2. 健康检查,支持多种协议,HTTP、TCP等
  3. Key/Value存储
  4. 支持多数据中心
  5. 基于Golong语言,可移植性强
  6. 支持ACL访问控制
  7. 与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、部署

主机 操作系统 IP地址 主要软件及版本
consul Centos 7 192.168.163.100 Docker 、Consul、Consul-template
registrator Centos 7 192.168.163.150 Docker、registrator

### ①、安装Consul

认识Consul

Consul的作用:支持多数据中心分布式高可用的服务发现和配置共享。分布式的、高可用的、 可横向扩展的用于实现分布式系统的服务发现与配置。

Server1:安装Consul服务

#######################consul的部署(贼简单)##############
###创建目录CS
mkdir /CS
cd /CS
###导入安装包,进行解压,解压后为可运行程序
rz
unzip /CS/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.88.47 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &#######################说明####################
consul agent \      ##启动consul集群
-server \           ##指定server模式
-bootstrap \        ##设置引导模式
-ui \               ##启动UI界面
-data-dir=/var/lib/consul-data \   #指定数据存储目录
-bind=192.168.88.47 \              #绑定集群通信IP
-client=0.0.0.0 \          #指定监听的客户端网段,0表示所有
-node=consul-server01 &> /var/log/consul.log &
# 指定当前主机节点名称,将结果保存在指定目录下文件中,&在后台运行。########################指令####################
## 查看集群主机:两种方式
consul memners
### 筛选出的为主领导者主机
consul info | grep leader
## 查询到的端口是用于集群中的数据读写和复制######################通过域名查看信息##################
### 在服务端使用的IP地址为回环地址:127.0.0.1
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      //集群节点详细信息
####################查看Consul相关的端口#######################
netstat -natp |grep consul
这5个端口的作用:
8300:集群内数据的读写和复制
8301:单个数据中心gossip协议通讯
8302:跨数据中心gossip协议通讯
8500:提供获取服务列表、注册服务、注销服务等HTTP接口;提供UI服务
8600:采用DNS协议提供服务发现功能
端口的说明:

②、容器服务自动加入nginx集群

在另一台主机上进行:安装注册服务(registrator)

Registrator的作用:在线自动检测docker容器,支持热插拔的注册与撤销服务,目前可支持以下组件:consul、etcd与skydns2。在后端服务注册中心注册服务或者取消服务注册的工具,后端注册中心支持consul、etcd、skydns2、zookeeper等存储。

###创建并启动容器
docker run -d \         #创建容器,并-d指定后台运行
--name=registrator \   #指定容器名称
--net=host \           #容器网络模式host,与宿主机共享
-v /var/run/docker.sock:/tmp/docker.sock \  #指定挂载卷-v
--restart=always \     #重启策略,在重启docker时启动此容器
gliderlabs/registrator:latest \     #指定该镜像名称
-ip=192.168.88.67 \        #指定本机IP地址
consul://192.168.88.47:8500     #指定集群IP地址和对应端口

可创建和运行多个服务容器,这是就能在集群中查看所有容器的信息。
docker run -itd -p:81:80 --name test-01 -h test01 nginx
可以创建多个容器:httpd、nginx等
在浏览器访问:server1(安装consul的服务)http://192.168.88.47:8500

查看集群中所有服务节点信息:curl 192.168.88.47:8500/v1/catalog/services

③、服务端Consul下安装consul-template

认识consul-template

consul-template的作用:基于Consul的自动替换配置文件的应用。Consul-Template可以查询Consul中的服务目录、Key、Key-values等。这种强大的抽象功能和查询语言模板可以使Consul-Template特别适合动态的创建配置文件。例如:创建Apache/Nginx Proxy Balancers、Haproxy Backends、Varnish Servers、Application Configurations等。

consul服务器宿主机上安装。

###解压安装服务:consul-template
unzip /CS/consul-template_0.19.3_linux_amd64.zip
###加入系统服务环境:/usr/bin/
mv consul-template /usr/bin/#####################创建consul-template模板文件#############
vim /CS/nginx.ctmplupstream http_backend {{{range service "nginx"}}server {{.Address}}:{{.Port}};{{end}}
}server {listen 81;server_name localhost 192.168.88.47;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;}
}
###创建文件
mkdir /var/log/nginx/
touch /var/log/nginx/nginx01-access.log

④、在宿主机上部署nginx

consul服务器宿主机。

###安装依赖服务
yum install -y gcc pcre-devel zlib-devel
cd /CS
###解压软件
tar zxvf /CS/nginx-1.12.0.tar.gz
###进入目录
cd /CS/nginx-1.12.0/
###编译安装,指定安装目录
./configure --prefix=/usr/local/nginx
###编译安装
make && make install
#######################绑定consul-template
###修改配置文件:/usr/local/nginx/conf/nginx.conf
vim /usr/local/nginx/conf/nginx.conf
###在第18行下方插入:include  vhost/*.conf;
sed -i '18a \    include vhost/*.conf;' /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###############启动:consul-template
### 1、指定consul集群中Server服务端IP:端口
### 2、指定模板文件地址,指定输出主机地址,指定重载后的配置文件(nginx)
### 3、指定日志级别:info
consul-template -consul-addr 192.168.88.47:8500 \
-template "/CS/nginx.ctmpl:/usr/local/nginx/conf/vhost/nginx01.conf:/usr/local/nginx/sbin/nginx -s reload" \
--log-level=info &

查看server端的目录:/usr/local/nginx/conf/vhost/

###在/usr/local/nginx/conf/vhost/下生成服务集群文件,nginx01.conf
###该配置文件完全基于上面的consul-template模板生成
cat /usr/local/nginx/conf/vhost/nginx01.conf
upstream http_backend {server 192.168.163.88.67;###服务池主机server {listen 81;server_name localhost 192.168.88.47;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;}
}

Consul服务主机变化,数据更新情况:
1. 在Registrator服务端注册创建新的节点时,服务端consul也能实时的检测到容器的变化情况。
2. 运行的consul-template进程会提示并自动更新显示数据信息。
3. 与此同时,配置文件也会自动增加服务(服务池中自动增加:宿主机IP:容器端口)/usr/local/nginx/conf/vhost/nginx01.conf。
4. 宿主机端口:nginx开放两个端口,一个nginx基础发布端口,集群发布端口。

registrator注册主机变化:
监听nginx容器访问日志:docker logs -f test1

⑤、部署多个Consul服务端主机

添加一台已有docker环境的服务器主机加入已有的群集中,实现高可用。

mkdir /CS/
cd /CS/
###放入安装包
unzip /CS/consul_0.9.2_linux_amd64.zip
mv /CS/consul /usr/bin
###运行consul,并加入consul集群
consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.88.77 \
-client=0.0.0.0 \
-node=consul-server02 \
-enable-script-checks=true \
-datacenter=dc1 \
-join 192.168.88.47 &> /var/log/consul.log &#####################参数解释########################
-bind:指定自身主机IP地址
-enable-script-checks=true:设置检查服务为可用
-datacenter:用于指定数据中心名称
-join:加入到已有的集群中#################验证###################
###查看当前Consul集群中有那几台主机
consul members

部署Consul建立Docker集群相关推荐

  1. 使用Consul建立docker集群

    目录 一.consul的概述 1.consul的简介 2.consul-template概述 3.registrator的作用 二.搭建consul集群环境 1.案例环境 2.安装Consul 3.配 ...

  2. Consul建立docker集群

    文章目录 一.概述 1.什么是consul 2.consul-template概述 3.registrator的作用 二.搭建consul集群搭建 1.安装Consul 2.配置容器服务自动加入ngi ...

  3. 使用Consul建立Docker集群(五)

    目录 一.概述 1.什么是consul 2.consul-template概述 3.registrator的作用 二.搭建consul集群环境 1.安装Consul 2.配置容器服务自动加入nginx ...

  4. Docker Swarm建立服务器集群

    Docker Swarm建立服务器集群 一.Docker Swarm简介 1. 集群模式 2. 管理节点--Manager 二.Docker Swarm的配置及使用 三.Docker Service向 ...

  5. 基于Docker的Consul服务发现集群搭建

    在去年的.NET Core微服务系列文章中,初步学习了一下Consul服务发现,总结了两篇文章.本次基于Docker部署的方式,以一个Demo示例来搭建一个Consul的示例集群,最后给出一个HA的架 ...

  6. docker初体验:docker部署nginx负载均衡集群

    Docker 是一个用于开发,交付和运行应用程序的开放平台.Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件.今天来为大家演示一下docker部署nginx负载均衡集群 环境 ce ...

  7. docker集群_使用Docker,Chef和Amazon OpsWorks进行集群范围的Java / Scala应用程序部署...

    docker集群 Docker非常适合在单个节点上运行隔离的容器. 但是,大多数软件系统都在多个节点上运行,因此,除了Docker之外,我们还需要某种方法来指定哪些容器应在哪些节点上运行. 我要解决的 ...

  8. Docker实战 (docker swarm的应用,docker集群的构建,在docker集群中部署服务)

    Docker实战 ----docker swarm的应用,docker集群的构建,在docker集群中部署服务 转载来源:https://blog.csdn.net/No_red/article/de ...

  9. 基于Gitlab Jenkins Docker集群 微服务搭建自动化部署平台

    随着公司应用系统的不断增多,原有手工部署流程越来越不满足上线的需求.为了各个系统能快速迭代与测试,减少上线流程时间和人为出错,迫切需要一套自动化部署系统. 转载原文:https://luoji.liv ...

最新文章

  1. Gradify - 提取图片颜色,创建响应式的 CSS渐变
  2. 阿里云云原生中间件 2021 年春季校招实习启动啦~
  3. DevExpress的LookUpEdit怎样不显示列名
  4. 深度学习练手项目(二)-----利用PyTorch进行线性回归
  5. 【虚拟化】docker部署nginx
  6. OpenGL 帧缓冲Framebuffers
  7. stm32中spi可以随便接吗_stm32之SPI通信协议实例详解
  8. Python模块包中__init__.py文件的作用(转载)
  9. jdbc oracle存储过程,java jdbc 执行oracle存储过程
  10. 展望2015把C++版本的掼蛋程序写好
  11. qt 正则 html,Qt 正则表达式 (一)
  12. 【心电信号】基于matlab瞬时抑制心电信号IIR滤波【含Matlab源码 1533期】
  13. java实参传空_java形参、实参、值传递、引用传递
  14. 盖洛普Q12测评法(转载)
  15. 平均值、方差、标准差
  16. 【免费通配符 SSL证书 (支持 IP) 申请教程】
  17. 《第一堂棒球课》:走进棒球运动
  18. JavaScript小练习-计算银行卡余额案例
  19. python拆分excel并发送邮件_python使用tkinterpandassmtplib读取Excel并发送邮件
  20. [Vs提示:不允许使用不完整类型]使用结构体常犯的错误

热门文章

  1. YYKit--YYWeakProxy
  2. 伊朗国家货币由里亚尔改为土曼
  3. 高翔视觉slam十四讲书籍习题(第一讲)
  4. 【Error: error:0308010C:digital envelope routines::unsupported】
  5. 华为校园大使面试经验
  6. Filter 过滤器的介绍及使用
  7. 我的成长之路:常态化考试备份CTHBF
  8. Redis数据结构-跳跃表
  9. Altium Designer(AD)软件记录01-快捷键的使用
  10. PHP图书管理平台课程报告