文章目录
- 一、consul服务更新和服务发现
- 1.服务注册与发现
- 2.consul是什么
- 二、consul 部署
- 1.建立 consul 服务
- 2.设置代理,后台启动 consul 服务器
- 3.查看集群信息
- 4.容器服务自动加入Nginx集群
- 5.安装Nginx、httpd测试镜像
- 6.在consul服务器中查看镜像是否注册
- 7.在web浏览器中查看注册中心是否发现了这些服务
- 三、配置template模板自动更新
- 1、准备template nginx模板文件
一、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
待续