dockerconsul集群安装部署

什么是consul

consul是google开源的一个使用go语言开发的服务管理软件。支持多数据中心、分布式高可用的、服务发现和配置共享。采用Raft算法,用来保证服务的高可用。内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)。服务部署简单,只有一个可运行的二进制的包。每个节点都需要运行agent,他有两种运行模式server 和 client。 每个数据中心官方建议需要3或5个server节点以保证数据安全,同时保证server-leader的选举能够正确的进行。
在client模式下,所有注册到当前节点的服务会被转发到server节点,本身是不持久化这些信息。
在server模式下,功能和client模式相似,唯一不同的是,它会把所有的信息持久化到本地,这样遇到故障,信息是可以被保留的。
server-leader是所有server节点的老大,它和其它server节点不同的是,它需要负责同步注册的信息给其它的server节点,同时也要负责各个节点的健康监测。

consul提供的一些关键特性

服务注册与发现:consul通过DNS或者HTTP接口使服务注册和服务发现变的很容易,一些外部服务,例如saas提供的也可以一样注册。
健康检查:健康检测使consul可以快速的告警在集群中的操作。和服务发现的集成,可以防止服务转发到故障的服务上面。
Key/Value存储:一个用来存储动态配置的系统。提供简单的HTTP接口,可以在任何地方操作。
多数据中心:无需复杂的配置,即可支持任意数量的区域。

安装consul是用于服务注册,也就是容器本身的一些信息注册到consul里面,其他程序可以通过consul获取注册的相关服务信息,这就是服务注册与发现。

consul部署

准备环境

主机ip地址
consul服务192.168.78.11
容器服务192.168.78.22

consul服务部署192.167.78.11

#在192.168.78.11部署consul

mkdir consul
cd consul/
unzip consul_0.9.2_linux_amd64.zip 
mv consul /usr/bin/

consul agent  \		                     '设置代理'
-server \	                             '服务功能'
-bootstrap \		                     '参与选举'
-ui \			                         '提供web界面'
-data-dir=/var/lib/consul-data \		 '提供一个代理存储数据目录'
-bind=192.168.78.11 \		             '绑定本地地址'
-client=0.0.0.0 \		                 '面对的客户端地址'
-node=consul-server01 &> /var/log/consul.log &	'定义节点名称,日志混合输出到log,并且放到后台运行'
jobs -l	                                 '查看后台任务'

consul agent -server -bootstrap -ui -data-dir=/var/lib/consul-data -bind=192.168.78.11 -client=0.0.0.0 -node=consul-server01 &>/var/log/consul.log &



consul members	            '查看集群信息'
consul info |grep leader	'查看管理信息'

请添加图片描述

请添加图片描述

#通过HTTP api获取集群信息
curl 127.0.0.1:8500/v1/status/peers   '查看集群server成员'

curl 127.0.0.1:8500/v1/status/leaders '查看集群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    '集群节点详细信息'

请添加图片描述
192.168.78.22节点 安装Gliderlabs/Registrator


#可检查容器运行状态自动注册,还可注销dosker容器的服务到服务配中心

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

docker images

docker ps

访问浏览器192.168.78.11:8500

请添加图片描述
请添加图片描述

#测试服务发现功能是否正常
docker run -itd -p:83:80 --name test-01 -h test1 nginx
docker run -itd -p:84:80 --name test-02 -h test2 nginx
docker run -itd -p:85:80 --name test-03 -h test3 httpd
docker run -itd -p:86:80 --name test-04 -h test4 httpd

验证
访问浏览器
192.168.78.11:8500

在consul服务器上查看服务
curl 127.0.0.1:8500/v1/catalog/services


请添加图片描述

请添加图片描述
在192.168.78.11 安装consul-template、nginx

#在consul服务器安装consul-template,准备模板文件

unzip consul-template_0.19.3_linux_amd64.zip -d /usr/bin


#在consul服务器编写template、nginx模板文件
#此模板用于nginx反向代理模板
#nginx.ctmpl跟nginx没有直接关系
#consul是docker的一种自动管理机制
#nginx.ctmpl中的参数以变量的形式写入

# vim /consul/nginx.ctmpl

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

server {
  listen 83;
  server_name localhost 192.168.78.11;
  access_log /var/log/nginx/kgc-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服务器编译安装nginx
yum install gcc pcre-devel zlib-devel -y
tar zxvf nginx-1.12.0.tar.gz -C /opt
cd /opt/nginx-1.12.0/
./configure --prefix=/usr/local/nginx
make && make install

#在consul服务器配置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                       
/usr/local/nginx/sbin/nginx                '#启动nginx'

请添加图片描述

#启动template,指定template模板文件及生成路径
unzip consul-template_0.19.3_linux_amd64.zip
mv consul-template /usr/local/bin
consul-template -consul-addr 192.168.78.11:8500 -template "/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/kgc.conf:/usr/local/nginx/sbin/nginx -s reload" --log-level=info
'指定模板路径,/consul/nginx.ctmpl,生成到/usr/locla/nginx/conf/vhost/kgc.conf,然后重载nginx -s reload'
'接下来会进入监控状态'

#启动template,指定template模板文件及生成路径
unzip consul-template_0.19.3_linux_amd64.zip
mv consul-template /usr/local/bin
consul-template -consul-addr 192.168.78.11:8500 -template "/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/kgc.conf:/usr/local/nginx/sbin/nginx -s reload" --log-level=info
'指定模板路径,/consul/nginx.ctmpl,生成到/usr/locla/nginx/conf/vhost/kgc.conf,然后重载nginx -s reload'
'接下来会进入监控状态'

consul服务器重新打开终端查看产生的配置文件
cat /usr/local/nginx/conf/vhost/kgc.conf 

docker logs -f test-01	'nginx服务器动态查看test-01日志'
docker logs -f test-02	

总结:在浏览器使用192.168.78.11访问时,查看日志会发现是轮询出现的

测试consul-template自动在线更新

docker run -itd -p:88:80 --name test-06 -h test5 nginx

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


请添加图片描述

 docker logs -f test-01
'//nginx服务器动态查看test-01日志'
 docker logs -f test-02
'//打开新的终端,动态查看test-2日志'
 docker logs -f test-06
'//打开新的终端'

'//访问nginx,请求会正常轮询到各个容器节点上'

请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值