什么是consul:
consul是hashicorp公司推出的开源工具,用于实现分布式式系统的服务发现预配置与其他分布式服务的注册与发现方案不同,如Airbnb的SmartStack等,consul的方案更趋于‘一站式’其内置了服务注册与发现框架、分布式一致性协议实现、健康检查key/value存储、多数据中心方案,不再需要依赖其他工具(列如Zookeeper等),使用起来也较为简单。consul使用Golang实现,因此具有天然可移植性(支持linux、Windows和Mac os X);安装包仅包含一个可执行文件,方便部署,可以与docker等轻量级容器无缝配合。
consul前置参数说明:
参数 | 含义 |
---|---|
-bootstrap | 用来控制一个server节点是否处于bootstrap模式。在一个数据中心只能有一个server节点处于bootstrap模式。当一个server节点处于bootstrap模式时,可以自己选举为raft leader |
-data-dir | 指定数据存储目录 |
-bind | 该地址用于集群内部的通信,集群的所有节点到这个地址都必须是可达的,默认是0.0.0.0 |
-UI | 指定开启UI界面,可通过8500端口访问consul自带的web UI界面 |
-client | 指定consul绑定在哪个client节点上,通常提供HTTP、DNS、RPC等服务,默认是127.0.0.1 |
-node | 指定节点在集群中的名称。这个名称在一个集群中必须唯一,默认是节点主机名 |
# 创建服务注册,也就是将容器本身的一些信息注册到consul里,其他程序可以通过consul获取注册的相关服务信息。
[root@localhost consul]# nohup consul agent -server -bootstrap -ui -data-dir=/var/lib/consul-data -bind=192.168.0.35 -client=0.0.0.0 -node=consul-server &>>/var/log/consul.log &
#查看集群状态
[root@localhost consul]# consul members
Node Address Status Type Build Protocol DC Segment
consul-server 192.168.0.35:8301 alive server 1.5.2 2 dc1 <all>
#通过web UI查看集群状态
#将容器服务自动添加到及集群
[root@localhost consul]# docker run -d --name registrator --net host -v /var/run/docker.sock:/tmp/docker.sock --restart always gliderlabs/registrator:latest -ip 192.168.0.35 consul://192.168.0.35:8500 &
#创建测试httpd、nginx服务
[root@localhost consul]# docker run -dit -P --name nginx01 -h nginx01 nginx
[root@localhost consul]# docker run -dit -P --name httpd01 -h httpd01 httpd
consul-Template
consul-Template是基于consul的自动替换配置文件的应用,在consul-Template没出现之前,构建服务打多采用与zookeeper、etcd+confd类似的系统。
consul-Template是一个守护进程,用于实时查询consul集群的信息,并更新文件系统上任意数量的指定模板,生成配置文件。更新完之后可以选择运行shell命令执行更新操作,重载服务。
consul-Template可以查询consul中的服务目录、key、key-values等这种强大的抽象功能和查询语言模板使consul-Template特别适合动态地创建配置文件。例如创建Apache、nginx、proxy、balancers、haproxy、等。
[root@localhost consul]# consul-template -consul-addr 192.168.0.35:8500 -template "/root/consul/nginx.ctmpl:/etc/nginx/conf.d/kgc.conf:/systemctl reload nginx" --log-level=info
#自动更新配置文件
[root@localhost ~]# cat /etc/nginx/conf.d/kgc.conf
upstream web_backend {
server 192.168.0.35:32768;
server 192.168.0.35:32769;
}
server {
listen 83;
server_name localhost 192.168.0.35;
access_log /var/log/nginx/kgc.cn-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://web_backend;
}
}
#创建一个新容器测试
[root@localhost httpd02]# docker run -dit --name httpd02 -P -h httpd02 -v /httpd02/:/usr/local/apache2/htdocs httpd:latest
[root@localhost httpd02]# cat /etc/nginx/conf.d/kgc.conf
upstream web_backend {
server 192.168.0.35:32768;
server 192.168.0.35:32769;
server 192.168.0.35:32772;
}
server {
listen 83;
server_name localhost 192.168.0.35;
access_log /var/log/nginx/kgc.cn-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://web_backend;
}
}
#访问调度器即可实现负载均衡
#注销服务
命令:consul services deregister -id 服务ID