有时发现点明一些理论知识,有助于我们理解概念。
consul和eureka一样,是用于分页式系统中服务注册和发现。与其他分布式服务注册与发现的方案,Consul的方案更”一站式”,内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)。与docker容器无疑配合。
Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件。
Consul 的使用场景
1. docker 实例的注册与配置共享
2. coreos 实例的注册与配置共享
3. vitess 集群
4. SaaS 应用的配置共享
5. 与 confd 服务集成,动态生成 nginx 和 haproxy 配置文件
官方下载地址下载window版,解压得到一个可执行文件。
设置环境变量
,让我们直接在cmd里可直接使用consul使命。在path后面添加consul所在目录例如D:\soft\consul_1.1.0_windows_amd64
启动consul命
consul agent -dev -ui -node=cy
-dev开发服务器模式启动,-node结点名为cy,-ui可以用界面访问,默认能访问。
测试地址
http://localhost:8500
出现界面即成功。
window下的使用到此即可,因为只会存在开发环境,而且能使用。不需要server和群集等概念。
官方下载地址下载linux版,上传到云服务器目录/home/soft
解压unzip consul_1.1.0_linux_amd64.zip
,得到一个文件consul
。
复制consul:cp consul /usr/local/bin/
,可以直接使用访问consul
命令。
启动
consul agent -dev
结果如下:
有几个consul agent输出的重要信息:
节点名称
:这是代理的唯一名称。默认情况下,这是机器的主机名,但您可以使用该-node标志对其进行自定义 。
数据中心
:这是配置代理运行的数据中心。每个节点都必须设置其它向数据中心报告。-datacenter
标志可用于设置数据中心。对于单DC配置,代理将默认为“dc1”。
服务器
:这表明代理是以服务器还是客户端模式运行。Server: false (bootstrap: false),表示不是以服务器模式运行,事实上-dev
是开发服务器模式。
客户端地址
:这是用于代理的客户端接口的地址。这包括HTTP和DNS接口的端口。默认情况下,它只绑定到localhost。
群集地址
:这是用于集群中的Consul代理之间通信的地址和端口集。并非所有集群中的Consul代理都必须使用相同的端口,但该地址必须可供所有其他节点访问。
-dev
:该模式不能用于生产环境,因为该模式下不会持久化任何状态,该启动模式仅仅是为了快速便捷的启动单节点consul
使用-http-port
命令行参数,例如修改成8080端口
consul agent -dev -http-port 8080
使用-config-dir
命令行参数,指定配置文件
就是指定加载置文件的目录,该目录下所有的以.json结尾配置文件加载进去,它的加载顺序是根据26个字母的顺序加进行加载配置文件的。目录必需为consul.d
,文件内容都是json格式的数据。默认后面文件定义配置会覆盖前面文件定义的配置。
例如/etc/consul.d
目录下合建base-config.json:
{
"ports": {
"http": 8080
}
}
其它默认端口
dns
: 默认8600.
http
:默认8500.
https
: 默认-1 (disabled).
serf_lan
:默认8301.
serf_wan
: 默认 8302.
server
: 默认8300.
例如:
{
“ports”: {
“http”: 8080,
“dns”: 8601,
“serf_lan”: 8311,
“serf_wan”: 8312,
“server”: 8310
}
}
启动命令
consul agent -dev -config-dir /etc/consul.d/
使用-client 0.0.0.0
例如:
consul agent -dev -http-port 8080 -client 0.0.0.0
命令:
consul members
结果如下:
Node Address Status Type Build Protocol DC Segment
n3 127.0.0.0:8301 alive server 1.1.0 2 dc1 <all>
-data-dir
作用:指定agent储存状态的数据目录,这是所有agent都必须的,对server尤其重要,因为他们必须持久化集群的状态
-config-dir
作用:指定service的配置文件和检查定义所在的位置。目录必需为consul.d
,文件内容都是json格式的数据。配置详解见官方
-config-file
作用:指定一个要装载的配置文件
-dev
作用:开发服务器模式,虽然是server模式,但不用于生产环境,因为不会有任何持久化操作,即不会有任何数据写入到磁盘
-bootstrap-expect
作用: 参数表明该服务运行时最低开始进行选举的节点数,当设置为1时,则意味允许节点为一个时也进行选举;当设置为3时,则等到3台节点同时运行consul并加入到server才能参与选举,选举完集群才能够正常工作。 一般建议服务器结点3-5个。
-node
作用:指定节点在集群中的名称,该名称在集群中必须是唯一的(默认这是机器的主机名),直接采用机器的IP
-bind
作用:指明节点的IP地址,一般是0.0.0.0
或者云服务器内网地址,不能写阿里云外网地址
。这是Consul侦听的地址,它必须可以被集群中的所有其他节点访问。虽然绑定地址不是绝对必要的,但最好提供一个。
-server
作用:指定节点为server,每个数据中心(DC)的server数推荐3-5个。
-client
作用:指定节点为client,指定客户端接口的绑定地址,包括:HTTP、DNS、RPC
默认是127.0.0.1
,只允许回环接口访问
10.-datacenter
作用:指定机器加入到哪一个数据中心中。老版本叫-dc,-dc已经失效
上面的例子都是以-dev开发者服务器模式运行的,生产环境不是我想要的。下面以server模式运行consul.
consul agent -server -ui -bootstrap-expect=1 -data-dir=/tmp/consul -node=agent-one -advertise=116.62.184.190 -bind=0.0.0.0 -client=0.0.0.0
-server:服务器模式
-ui:能webui展示
-bootstrap-expect:server为1时即选择server集群leader
-data-dir:consul状态存储文件地址
-node:指定结点名
advertise:本地ip地址
-client:指定可访问这个服务结点的ip
结果如下:
注意 Cluster Addr
集群地址是我们上面advertise
指定的ip地址
2台阿里云服务器
云1:116.62.184.190和云2:139.196.123.97
在云1上创建consul服务器agent-one:
consul agent -server -ui -bootstrap-expect=1 -data-dir=/tmp/consul -node=agent-one -advertise=116.62.184.190 -bind=0.0.0.0 -client=0.0.0.0
在云2上创建consul服务器agent-two:
consul agent -server -ui -bootstrap-expect=1 -data-dir=/tmp/consul -node=agent-two -advertise=139.196.123.97 -bind=0.0.0.0 -client=0.0.0.0
在云1上执行命令,将agent-one添加到agent-two:
consul join 139.196.123.97
表示当前consul服务器添加到139.196.123.97上面consul服务器
执行结果为Successfully joined cluster by contacting 1 nodes.
表示添加成功,在云1或云2任意一台机器上执行consul members
都会得到如下结果:
Node Address Status Type Build Protocol DC Segment
agent-one 116.62.184.190:8301 alive server 1.1.0 2 dc1 <all>
agent-two 139.196.123.97:8301 alive server 1.1.0 2 dc1 <all>
访问http://139.196.123.97:8500
,注意阿里云安全组里允许访问8500端口
成功展示2台consul服务器。
Agent
: Consul集群中长时间运行的守护进程,以consul agent
命令开始启动. 在客户端和服务端模式下都可以运行,可以运行DNS或者HTTP接口, 它的主要作用是运行时检查和保持服务同步。
Client
: 客户端, 无状态, 以一个极小的消耗将接口请求转发给局域网内的服务端集群.
Server
: 服务端, 保存配置信息, 高可用集群, 在局域网内与本地客户端通讯, 通过广域网与其他数据中心通讯. 每个数据中心的 server 数量推荐为 3 个或是 5 个.
Datacenter
: 数据中心,多数据中心联合工作保证数据存储安全快捷
Consensus
: 一致性协议使用的是Raft Protocol
RPC
: 远程程序通信
Gossip: 基于 Serf 实现的 gossip 协议,负责成员、失败探测、事件广播等。通过 UDP 实现各个节点之间的消息。分为 LAN 上的和 WAN 上的两种情形。
参考
在CentOS 7上部署Consul 0.6.4