目录
一、Docker consul简介
二、Consul优势
三、Consul中的概念
四、部署
1、consul服务器配置
2、查看集群信息
3、在浏览器上进到consul的界面进行管理
4、容器服务自动注册到consul集群
5、consul节点配置nginx
6、配置模板信息
7、配置并启动consul-template
8、测试
一、Docker consul简介
Consul是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件,由HashiCorp公司用Go语言开发, 基于Mozilla Public License 2.0的协议进行开源。Consul支持健康检查,并允许HTTP、GRPC和DNS协议调用 API 存储键值对。
二、Consul优势
Consul相比zookeeper、Etcd、doozerd、eureka有什么优势
-
使用Raft算法来保证一致性, 比复杂的Paxos算法更直接. 相比较而言, zookeeper采用的是 Paxos, 而etcd使用的则是Raft.
-
支持多数据中心,内外网的服务采用不同的端口进行监听。 多数据中心集群可以避免单数据中心的单点故障,而其部署则需要考虑网络延迟,分片等情况等. zookeeper 和 etcd 均不提供多数据中心功能的支持。
-
支持健康检查。 etcd 不提供此功能。
-
支持
HTTP
、DNS
和GPRS
协议接口。 zookeeper 的集成较为复杂,etcd 只支持 http 协议。 -
官方提供WEB管理界面,etcd无此功能。
三、Consul中的概念
-
Client:表示 Consul 客户端模式,是 Consul 节点的一种模式,所有注册到 Client 节点的服务会被转发到 Server 。本身无状态不持久化如何数据。Client 通过 HTTP、DNS、GRPC 接口请求转发给局域网内的服务端集群。
-
Server:表示 Consul 的服务端模式, Server 功能和 Client 都一样,不同的是 Server 持久化数据到本地。在局域网内与本地 Client 通讯,通过广域网与其他数据中心通讯。每个数据中心的 Server 数量推荐为 3 个或是 5 个。
-
Server-Leader :表示这个 Server 是它们的老大,它和其它 Server 不一样的一点是,它需要负责同步注册的信息给其它的 Server 节点,同时也要负责各个节点的健康监测。如果 Leader 宕机了,通数据中心的所有 Server 内部会使用Raft算法来在其中选取一个 Leader 出来。
-
Agent :Agent 是 Consul 的核心进程,Agent 的工作是维护成员关系信息、注册服务、健康检查、响应查询等等。Consul 集群的每一个节点都必须运行 agent 进程。
四、部署
服务器Consul:
IP:192.168.80.8
服务器docker:
IP:192.168.80.9
1、consul服务器配置
mkdir /opt/consul
cd /opt/consul
上传安装包
unzip consul_0.9.2_linux_amd64.zip
mv consul /usr/local/bin/
设置代理,在后台启动 consul 服务端
consul agent \ #使用的是agent模式
-server \ #使用的是server模式
-bootstrap \ #前端框架
-ui \ #可被访问的界面
-data-dir=/var/lib/consul-data \ #可被访问的界面
-bind=192.168.80.8 \ #consul服务器地址
-client=0.0.0.0 \ #监听地址,监听所有含有registration服务的服务器地址
-node=consul-server01 &> /var/log/consul.log & #节点名称写入日志,并且后台运行
netstat -natp | grep consul
启动consul后默认会监听5个端口:
8300:replication、leader farwarding的端口
8301:lan cossip的端口
8302:wan gossip的端口
8500:web ui界面的端口
8600:使用dns协议查看节点信息的端口
2、查看集群信息
查看members状态查看集群状态
3、在浏览器上进到consul的界面进行管理
http://consul的IP地址:8500
#8500默认是登录consul的端口号
在服务节点上也可以直接以命令的方式,查看一部分节点信息
curl 127.0.0.1:8500/v1/status/peers #查看集群server成员
["192.168.80.8:8300"]
curl 127.0.0.1:8500/v1/status/leader #集群Raf leader
"192.168.80.0:8300"
curl 127.0.0.1:8500/v1/catalog/services #注册的所有服务
{"consul":[]} #没有注册过服务
curl 127.0.0.1:8500/v1/catalog/服务名字 #查看被监控服务的服务信息
curl 127.0.0.1:8500/v1/catalog/nodes #查看node节点详细信息
4、容器服务自动注册到consul集群
在docker服务器上进行操作
安装 Gliderlabs/Registrator
Gliderlabs/Registrator 可检查容器运行状态自动注册,还可注销 docker 容器的服务到服务配置中心。目前支持 Consul、Etcd 和 SkyDNS2
docker run -d \
--name=registrator \ #容器名字
--net=host \ #网络使用host
-v /var/run/docker.sock:/tmp/docker.sock \ #网络使用host
--restart=always \ #重启策略,总是重启
gliderlabs/registrator:latest \ #使用的镜像名字以及标签
--ip=192.168.80.100 \ #容器ID地址
consul://192.168.80.8:8500 #配置中心的位置
测试服务发现功能是否正常
docker run -itd -p:81:80 --name test1 -h test01 nginx
docker run -itd -p:82:80 --name test2 -h test02 nginx
docker run -itd -p 83:80 --name test3 -h test03 httpd
docker run -itd -p 84:80 --name test4 -h test04 httpd
添加完成后到consul的主界面查看
5、consul节点配置nginx
yum -y install pcre-devel zlib-devel gcc gcc-c++ make
useradd -M -s /sbin/nologin nginx
tar zxvf nginx-1.12.0.tar.gz -C /opt/
cd /opt/nginx-1.12.0/
./configure
--prefix=/usr/local/nginx
--user=nginx
--group=nginx && make -j && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
安装完成之后,找到配置文件,找到http模块
cd /usr/local/nginx/conf
vim nginx.conf
17 http {
18 include mime.types;
19 include vhost/*.conf;
20 default_type application/octet-stream;
启动nginx
6、配置模板信息
vim /opt/consul/nginx.ctmpl
upstream http_backend { #协议的后端
{{range service "nginx"}} #服务的范围只收集nginx信息
server {{.Address}}:{{.Port}}; #此处引用的变量会指向后端的地址和端口(动态变化)
{{end}}
}
#收集信息,并将收集到的信息展现为IP和端口信息
server {
listen 84;
server_name localhost 192.168.80.8; #反向代理的服务器地址,前端服务器地址
access_log /var/log/nginx/lhk.com-access.log;
index index.html index.php;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr; #后端真实IP
proxy_set_header Client-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #转发地址
proxy_pass http://http_backend;
}
}
7、配置并启动consul-template
unzip consul-template_0.19.3_linux_amd64.zip -d /opt/
cd /opt/
mv consul-template /usr/local/bin/
在前台启动 template 服务,启动后不要按 ctrl+c 中止 consul-template 进程。
consul-template --consul-addr 192.168.80.8:8500 \
--template "/opt/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/kgc.conf:/usr/local/nginx/sbin/nginx -s reload" \
--log-level=info
另外打开一个终端查看生成配置文件
cat /usr/local/nginx/conf/vhost/lhk.conf
8、测试
在docker服务器上再继续创建一个nginx容器
先在管理页面处查看:
再到consul服务节点去查看: