部署Consul建立Docker集群

Posted 清晨丶暖阳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了部署Consul建立Docker集群相关的知识,希望对你有一定的参考价值。

架构图


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地址主要软件及版本
consulCentos 7192.168.163.100Docker 、Consul、Consul-template
registratorCentos 7192.168.163.150Docker、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.ctmpl

upstream 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集群的主要内容,如果未能解决你的问题,请参考以下文章

Docker------Docker Consul集群部署

Docker------Docker Consul集群部署

Docker(十三):OpenStack部署Docker集群实战

Docker - 容器部署 Consul 集群

Docker 容器部署 Consul 集群

Docker私有仓库部署之Compose搭建consul集群