目录

  • 一、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服务架构和核心概念

ealsticsearch docker单机部署 consul docker单机搭建集群_templates

  • 图中的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

ealsticsearch docker单机部署 consul docker单机搭建集群_templates_02


传入安装包

ealsticsearch docker单机部署 consul docker单机搭建集群_数据中心_03


解包

ealsticsearch docker单机部署 consul docker单机搭建集群_docker_04


Mv consul /usr/local/bin

ealsticsearch docker单机部署 consul docker单机搭建集群_templates_05

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 &

ealsticsearch docker单机部署 consul docker单机搭建集群_consul_06


通过httpd api 获取群集信息

ealsticsearch docker单机部署 consul docker单机搭建集群_consul_07


ealsticsearch docker单机部署 consul docker单机搭建集群_templates_08


容器服务自动加入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

ealsticsearch docker单机部署 consul docker单机搭建集群_docker_09


测试:

ealsticsearch docker单机部署 consul docker单机搭建集群_consul_10


测试服务发现功能是否正常

ealsticsearch docker单机部署 consul docker单机搭建集群_consul_11


ealsticsearch docker单机部署 consul docker单机搭建集群_数据中心_12


ealsticsearch docker单机部署 consul docker单机搭建集群_docker_13


ealsticsearch docker单机部署 consul docker单机搭建集群_nginx_14


测试自动移除功能

ealsticsearch docker单机部署 consul docker单机搭建集群_nginx_15


ealsticsearch docker单机部署 consul docker单机搭建集群_数据中心_16


实现反向代理

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;  
    }
}

ealsticsearch docker单机部署 consul docker单机搭建集群_数据中心_17


安装nginx准备环境

yum -y install gcc gcc-c++ pcre-devel zlib-devel

ealsticsearch docker单机部署 consul docker单机搭建集群_数据中心_18


解包到/opt下

tar zxvf nginx-1.12.0.tar.gz -C /opt

ealsticsearch docker单机部署 consul docker单机搭建集群_templates_19


编译安装Nginx

ealsticsearch docker单机部署 consul docker单机搭建集群_数据中心_20


ealsticsearch docker单机部署 consul docker单机搭建集群_templates_21


ealsticsearch docker单机部署 consul docker单机搭建集群_consul_22


修改配置文件

vim /usr/local/nginx/conf/nginx.conf

ealsticsearch docker单机部署 consul docker单机搭建集群_templates_23


创建vhost文件夹

ealsticsearch docker单机部署 consul docker单机搭建集群_docker_24


ealsticsearch docker单机部署 consul docker单机搭建集群_templates_25


路径优化

ealsticsearch docker单机部署 consul docker单机搭建集群_consul_26


传入consul-template

ealsticsearch docker单机部署 consul docker单机搭建集群_docker_27


解包

ealsticsearch docker单机部署 consul docker单机搭建集群_nginx_28


配置并启动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

ealsticsearch docker单机部署 consul docker单机搭建集群_数据中心_29


在vhost底下会生成一个kgc.conf文件

ealsticsearch docker单机部署 consul docker单机搭建集群_nginx_30


ealsticsearch docker单机部署 consul docker单机搭建集群_consul_31

启动Nginx

ealsticsearch docker单机部署 consul docker单机搭建集群_consul_32


ealsticsearch docker单机部署 consul docker单机搭建集群_consul_33

测试访问192.168.100.131:83

ealsticsearch docker单机部署 consul docker单机搭建集群_docker_34


看日志:

ealsticsearch docker单机部署 consul docker单机搭建集群_数据中心_35


ealsticsearch docker单机部署 consul docker单机搭建集群_docker_36


增加一个新的nginx容器节点

ealsticsearch docker单机部署 consul docker单机搭建集群_templates_37


ealsticsearch docker单机部署 consul docker单机搭建集群_docker_38


ealsticsearch docker单机部署 consul docker单机搭建集群_docker_39