目录
- 一、consul简介
- 1.1.1、consul 关键特性
- 1.1.2、consul 术语
- 二、consul 端口说明
- 三、consul服务架构和核心概念
- 四、案例
一、consul简介
1.1.1、consul 关键特性
- 服务发现:支持服务发现。你可以通过 DNS 或 HTTP 的方式获取服务信息。
- 健康检查:支持健康检查。可以提供与给定服务相关联的任何数量的健康检查(如 web 状态码或 cpu 使用率)。
- K/V 存储:键/值对存储。你可用通过 consul 存储如动态配置之类的相关信息。
- 多数据中心:支持多数据中心,开箱即用。WEB UI:支持
- WEB UI。快速了解你的服务现在的运行情况,一目了然。
1.1.2、consul 术语
- node:节点,需要 consul 注册发现或配置管理的服务器。
- agent:consul 中的核心程序,它将以守护进程的方式在各个节点运行,有 client 和 server 启动模式。每个 agent
维护一套服务和注册发现以及健康信息。 client:agent 以 client 模式启动的节点。在该模式下,该节点会采集相关信息,通过
RPC 的方式向 server 发送。 - server:agent 以 server 模式启动的节点。一个数据中心中至少包含 1 个 server 节点。不过官方建议使用 3 或
5 个 server 节点组建成集群,以保证高可用且不失效率。server 节点参与 Raft、维护会员信息、注册服务、健康检查等功能。 - datacenter:数据中心,私有的,低延迟的和高带宽的网络环境。一般的多个数据中心之间的数据是不会被复制的,但可用过 ACL
replication 或使用外部工具 onsul-replicate。Consensus,共识协议,使用它来协商选出 leader。 - Gossip:consul 是建立在 Serf,它提供完整的 gossip protocol,维基百科。LAN Gossip,Lan
gossip 池,包含位于同一局域网或数据中心上的节点。WAN Gossip,只包含 server 的 WAN Gossip
池,这些服务器主要位于不同的数据中心,通常通过互联网或广域网进行通信。 - members:成员,对 consul 成员的称呼。提供会员资格,故障检测和事件广播。有兴趣的朋友可以深入研究下。
二、consul 端口说明
- TCP/8300 端口用于服务器节点。客户端通过该端口 RPC 协议调用服务端节点。
- TCP/UDP/8301 端口用于单个数据中心所有节点之间的互相通信,即对 LAN
池信息的同步。它使得整个数据中心能够自动发现服务器地址,分布式检测节点故障,事件广播(如领导选举事件)。 - TCP/UDP/8302 端口用于单个或多个数据中心之间的服务器节点的信息同步,即对 WAN
池信息的同步。它针对互联网的高延迟进行了优化,能够实现跨数据中心请求。 - 8500 端口基于 HTTP 协议,用于 API 接口或 WEB UI 访问。
- 8600 端口作为 DNS 服务器,它使得我们可以通过节点名查询节点信息。
三、consul服务架构和核心概念
- 图中的SERVER是consul服务端高可用集群,CLIENT是consul客户端。
- 这里存在两个数据中心:DATACENTER1、DATACENTER2。每个数据中心有着 3 到 5 台
server(该数量使得在故障转移和性能之间达到平衡)。 - Consul利用两个不同的gossip pool。我们分别把他们称为局域网池(LAN Gossip Pool)或广域网池(WAN
Gossip Pool)。每个Consul数据中心(Datacenter)都有一个包含所有成员(Server和Client)的LAN
gossip pool。
四、案例
Consul服务器
Mkdir /root/consul
传入安装包
解包
Mv consul /usr/local/bin
consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.100.131 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &
通过httpd api 获取群集信息
容器服务自动加入Nginx群集
安装gliderlabs/Registrator Gliderlabs/Registrator可检查容器运行状态自动注册,还可以注销docker容器的服务到服务配置中心目前支持Consul、Etcd和Skydns2在192.168.100.130节点执行以下操作
docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
gliderlabs/registrator:latest \
consul://192.168.100.131:8500
测试:
测试服务发现功能是否正常
测试自动移除功能
实现反向代理
Vim nginx.ctmplupstream
http_backend {
{{range service "nginx"}}
server {{.Address}}:{{.Port}};
{{end}}
}
server {
listen 83;
server_name localhost 192.168.100.131;
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://http_backend;
}
}
安装nginx准备环境
yum -y install gcc gcc-c++ pcre-devel zlib-devel
解包到/opt下
tar zxvf nginx-1.12.0.tar.gz -C /opt
编译安装Nginx
修改配置文件
vim /usr/local/nginx/conf/nginx.conf
创建vhost文件夹
路径优化
传入consul-template
解包
配置并启动template
consul-template -consul-addr 192.168.100.131:8500 \
> -template "/root/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/kgc.conf:/usr/local/nginx/sbin/nginx -s reload" \
> --log-level=info
在vhost底下会生成一个kgc.conf文件
启动Nginx
测试访问192.168.100.131:83
看日志:
增加一个新的nginx容器节点