目录

  • 一.Consul简介
  • 二.Consul服务部署
  • 1.在主服务器上部署consul
  • 2.安装gliderlabs/registrator
  • 二.容器中服务自动加入nginx集群
  • 1.compose-template介绍
  • 2.安装consul-template
  • 3.修改nginx.ctmpl文件
  • 4.编译安装nginx
  • 5.配置并启动template


一.Consul简介

Consul是基于GO语言开发的开源工具,主要面向分布式,服务化的系统提供服务注册、服务发现和配置管理的功能。Consul本身只是一个二进制的可执行文件,所以安装和部署都非常简单,只需要从官网下载后,在执行对应的启动脚本即可。
Consul包含多个组件,但是作为一个整体,为你的基础设施提供服务发现和服务配置的工具.他提供以下关键特性:
服务发现 Consul的客户端可用提供一个服务,比如 api 或者mysql ,另外一些客户端可用使用Consul去发现一个指定服务的提供者.通过DNS或者HTTP应用程序可用很容易的找到他所依赖的服务.
健康检查 Consul客户端可用提供任意数量的健康检查,指定一个服务(比如:webserver是否返回了200 OK 状态码)或者使用本地节点(比如:内存使用是否大于90%). 这个信息可由operator用来监视集群的健康.被服务发现组件用来避免将流量发送到不健康的主机.
Key/Value存储 应用程序可用根据自己的需要使用Consul的层级的Key/Value存储.比如动态配置,功能标记,协调,领袖选举等等,简单的HTTP API让他更易于使用.
多数据中心 Consul支持开箱即用的多数据中心.这意味着用户不需要担心需要建立额外的抽象层让业务扩展到多个区域.
Consul面向DevOps和应用开发者友好.是他适合现代的弹性的基础设施.

二.Consul服务部署

1.在主服务器上部署consul

.consul服务器中安装consul
[root@localhost ~]# mkdir /root/consul
上传consul_0.9.2_linux_amd64.zip软件到/root/consul中
[root@localhost ~]# cp consul_0.9.2_linux_amd64.zip consul
[root@localhost ~]# cd consul/
[root@localhost consul]# ls
consul_0.9.2_linux_amd64.zip
[root@localhost consul]# unzip consul_0.9.2_linux_amd64.zip
[root@localhost consul]# mv consul /usr/bin/
[root@localhost consul]# consul agent \		'设置代理'
-server \	'服务功能'
-bootstrap \		'参与选举'
-ui \			'提供web界面'
-data-dir=/var/lib/consul-data \		'提供一个代理存储数据目录'
-bind=20.0.0.15 \		'绑定本地地址'
-client=0.0.0.0 \		'面对的客户端地址'
-node=consul-server01 &> /var/log/consul.log &	'定义节点名称,日志混合输出到log,并且放到后台运行'

java Consul JAVAconsul获取服务列表_consul

[root@localhost consul]# consul members	'查看集群信息'
Node             Address               Status  Type    Build  Protocol  DC
consul-server01  20.0.0.15:8301  alive   server  0.9.2  2         dc1
[root@localhost consul]# consul info | grep leader	'查看管理信息'
	leader = true
	leader_addr = 20.0.0.15:8300

java Consul JAVAconsul获取服务列表_docker_02

通过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   '集群节点详细信息'

2.安装gliderlabs/registrator

可检查容器运行状态自动注册,还可注销docker容器的服务到服务配置中心
目前支持consul、etcd和SkyDNS2
在20.0.0.140服务器,执行以下操作:

[root@node1 ~]# docker run -d \
> --name=registrator \
> --net=host \
> -v /var/run/docker.sock:/tmp/docker.sock \
> --restart=always \
> gliderlabs/registrator:latest \
> -ip=20.0.0.140 \
> consul://20.0.0.15:8500

测试功能

docker run -itd -p:83:80 --name test-01 -h test01 nginx
docker run -itd -p:84:80 --name test-02 -h test02 nginx

java Consul JAVAconsul获取服务列表_docker_03


浏览器访问本机地址 查看效果

java Consul JAVAconsul获取服务列表_java Consul_04

二.容器中服务自动加入nginx集群

1.compose-template介绍

compose-template是一个守护进程,用于实时查询consul集群信息
并且运维人员可以在consul服务器上,定制任意的模板,生成配置文件
compose可以查询consul中的服务目录、key、key-values等
这种强大的抽象功能和查询语言模板使得consul-template特别适合动态的创建配置文件,也就是自动化增加服务
例如:创建apache/nginx proxy balacers、haproxy backends

2.安装consul-template

[root@localhost consul]# rz -E	'//上传consul-template软件包'
rz waiting to receive.
[root@localhost consul]# ls
consul-template_0.19.3_linux_amd64.zip
[root@localhost consul]# unzip consul-template_0.19.3_linux_amd64.zip -d /usr/bin
Archive:  consul-template_0.19.3_linux_amd64.zip
  inflating: /usr/bin/consul-template

3.修改nginx.ctmpl文件

[root@localhost consul]# vim /root/consul/nginx.ctmpl
upstream http-server {
  {{range service "nginx"}}
  server {{.Address}}:{{.Port}};
  {{end}}
}

server {
  listen 111;
  server_name localhost 20.0.0.15;
  access_log /var/log/nginx/test-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-server;
  }
}

4.编译安装nginx

[root@localhost consul]# yum install gcc pcre-devel zlib-devel -y
[root@localhost consul]# tar zxvf nginx-1.12.2.tar.gz -C /opt
[root@localhost consul]# cd /opt/nginx-1.12.0/
[root@consul nginx-1.12.0]# ./configure --prefix=/usr/local/nginx
[root@consul nginx-1.12.0]# make && make install

修改nginx配置文件

java Consul JAVAconsul获取服务列表_nginx_05

5.配置并启动template

'上传consul-template'
unzip consul-template
mv consul-template /usr/local/bin
[root@consul consul]# consul-template -consul-addr 20.0.0.51:8500 -template "/root/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/kevin.conf:/usr/local/nginx/sbin/nginx -s reload" --log-level=info
'指定模板路径,/consul/nginx.ctmpl,生成到/usr/locla/nginx/conf/vhost/kevin.conf,然后重载nginx -s reload'
'接下来会进入监控状态'

增加一个nginx容器节点,测试服务发现及配置更新功能

docker run -itd -p:85:80 --name test-05 -h test05 nginx

java Consul JAVAconsul获取服务列表_docker_06


java Consul JAVAconsul获取服务列表_docker_07