Docker consul的容器服务更新与服务发现


一、consul服务更新和服务发现

1.服务注册与发现

服务注册和发现的意思是服务进程在注册中心注册自己的位置,客户端应用进程向注册中心发起查询,来获取服务的位置,服务发现的一个重要作用就是提供一个可用的服务列表
服务注册与发现作用

服务注册:服务进程在注册中心注册自己的位置。它通常注册自己的主机和端口号,有时还有身份验证信息,协议,版本号,以及运行环境的详细资料。

服务发现:客户端应用进程向注册中心发起查询,来获取服务的位置。服务发现的一个重要作用就是提供一个可用的服务列表
服务注册、服务注册表、服务发现

三者的关系是:通过服务注册机制将启动服务的信息上传至服务注册表,服务发现机制通过服务注册表实时获取可用服务的信息。

服务注册的方式包括:自注册和第三方注册。自注册的意思是当服务启动时,服务自动将信息上传至服务注册表,并通过心跳进行同步。第三方注册的意思是通过一个第三方的服务将启动服务的信息上传至服务注册表,并通过一定机制保持更新。缺点是要保证第三方服务的高可用性。

服务注册表也是一个服务集群,维护了一个数据库,数据库中存储的是可用服务的信息。

服务发现的意思是当需要使用服务时,通过读取服务注册表获取可用的服务信息,客户端可以通过此信息连接服务器。服务发现的方式包括:客户端服务发现和服务端服务发现

2.consul是什么

在这里插入图片描述
consul是google开源的一个使用go语言开发的服务管理软件。支持多数据中心、分布式高可用的、服务发现和配置共享。采用Raft算法,用来保证服务的高可用。内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)。服务部署简单,只有一个可运行的二进制的包。每个节点都需要运行agent,他有两种运行模式 server 和 client 。每个数据中心官方建议需要3或5个server节点(大于等于3个的奇数节点)以保证数据安全,同时保证server-leader的选举能够正确的进行。

____在client模式下,所有注册到当前节点的服务会被转发到server节点,本身是不持久化这些信息。

____在server模式下,功能和client模式相似,唯一不同的是,它会把所有的信息持久化到本地,这样遇到故障,信息是可以被保留的。server-leader是所有server节点的老大,它和其它server节点不同的是,它需要负责同步注册的信息给其它的server节点,同时也要负责各个节点的健康监测。

二、consul 部署

环境准备

服务器类型系统和IP地址需要安装的组件
consul服务器CentOS7.4(64 位) 192.168.80.200运行consul服务、nginx服务、consul-template守护进程
registrator服务器CentOS7.4(64 位) 192.168.80.10运行registrator容器、nginx服务

1.建立 consul 服务

mkdir /opt/consul/
cd /opt/consul/
rz -E							#导入下面的压缩包
consul_0.9.2_linux_amd64.zip
unzip consul_0.9.2_linux_amd64.zip 
mv consul /usr/local/bin/

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

2.设置代理,后台启动 consul 服务器

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

netstat -napt | grep consul
consul members
consul info | grep leader

在这里插入图片描述

3.查看集群信息

查看member状态和查看集群状态
在这里插入图片描述

4.容器服务自动加入Nginx集群

registrator部署 192.168.80.10 上操作
Gliderlabs/Registrator可检查容器运行状态自动注册,还可注销docker容器的服务到服务配置中心。
目前支持Consul、Etcd和SkyDNS2。

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

在这里插入图片描述

5.安装Nginx、httpd测试镜像

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

在这里插入图片描述

6.在consul服务器中查看镜像是否注册

在这里插入图片描述

7.在web浏览器中查看注册中心是否发现了这些服务

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

三、配置template模板自动更新

1、准备template nginx模板文件

在consul服务器上进行操作
1添加nginx.ctmpl配置文件

[root@lpl /opt/consul] # pwd
/opt/consul
[root@lpl /opt/consul] # vim ngix.ctmpl

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

server {
 listen 8000;
 server_name localhost 192.168.80.200;
 access_log /var/log/nginx/clj.com-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://nginx_slb;
  }     
}

在这里插入图片描述
2.传入nginx安装包并解压

cd ..
rz -E    #上传nginx压缩包,如下:
nginx-1.12.0.tar.gz
tar zxvf nginx-1.12.0.tar.gz			#解压

在这里插入图片描述

3.创建nginx程序用户并安装依赖包

useradd -M -s /sbin/nologin nginx
yum -y install gcc pcre-devel zlib-devel gcc-c++ make

在这里插入图片描述

4编译安装后优化路径

cd nginx-1.12.0/
 ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

在这里插入图片描述
5修改nginx配置文件

cd /usr/local/nginx/conf/
vim nginx.conf
http {
    include        vhost/*.conf;			#19行添加此项配置

在这里插入图片描述
6创建nginx服务的vhost和日志目录

mkdir vhost
mkdir /var/log/nginx
nginx 					#启动nginx
netstat -natp | grep :80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      59892/nginx: master 

在这里插入图片描述
7传入consul-template_0.19.3_linux_amd64.zip压缩包并解压

cd /opt/
rz -E		#传入template文件,如下
consul-template_0.19.3_linux_amd64.zip
unzip consul-template_0.19.3_linux_amd64.zip
mv consul-template /usr/local/bin/

在这里插入图片描述
8前台启动consul-template(后台也可以)

consul-template --consul-addr 192.168.80.200:8500 \
--template "/opt/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/clj.conf:/usr/local/nginx/sbin/nginx -s reload" \
--log-level=info

在这里插入图片描述

待续

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值