Consul集群搭建
Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其他分布式服务注册与发现的方案,Consul的方案更“一站式”,内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)。使用起来也较 为简单。Consul使用Go语言编写,因此具有天然可移植性(支持Linux、windows和Mac OS X);安装包仅包含一个可执行文件,方便部署,与Docker等轻量级容器可无缝配合。
1. Consul提供的关键功能
- service discovery:服务发现,consul通过DNS或者HTTP接口使服务注册和服务发现变的很容易,一些外部服务,例如saas提供的也可以一样注册。
- health checking:健康检测使consul可以快速的告警在集群中的操作。和服务发现的集成,可以防止服务转发到故障的服务上面。
- key/value storage:键值存储,一个用来存储动态配置的系统。提供简单的HTTP接口,可以在任何地方操作,包括动态配置,功能标记,协调,leader选举等等。
- multi-datacenter:多数据中心支持,无需复杂的配置,即可支持任意数量的区域,这意味着Consul的用户不必担心构建额外的抽象层以扩展到多个区域。
2. consul架构图
Consul 是一个分布式,高可用的系统,集群架构图如下
我们只看数据中心1,可以看出consul的集群是由N个SERVER,加上M个CLIENT组成的。而不管是SERVER还是CLIENT,都是consul的一个节点,所有的服务都可以注册到这些节点上,正是通过这些节点实现服务注册信息的共享。除了这两个,还有一些小细节,一一简单介绍。
- CLIENT
CLIENT表示consul的client模式,就是客户端模式。是consul节点的一种模式,这种模式下,所有注册到当前节点的服务会被转发到SERVER,本身是不持久化这些信息。
- SERVER
SERVER表示consul的server模式,表明这个consul是个server,这种模式下,功能和CLIENT都一样,唯一不同的是,它会把所有的信息持久化的本地,这样遇到故障,信息是可以被保留的。
- SERVER-LEADER
中间那个SERVER下面有LEADER的字眼,表明这个SERVER是它们的老大,它和其它SERVER不一样的一点是,它需要负责同步注册的信息给其它的SERVER,同时也要负责各个节点的健康监测。
- 其它信息
其它信息包括它们之间的通信方式,还有一些协议信息,算法。它们是用于保证节点之间的数据同步,实时性要求等等一系列集群问题的解决,例如raft保证服务节点之间数据一致性的协议,服务节点之间的通讯则是采用gossip协议来管理成员关系。
3. 集群推荐节点规划
为保证高可用,Consul集群一般推荐Server节点为单数且至少为3个,clinet节点按需增加。
4. 集群搭建
此次集群规划
节点ID | 角色 | 是否leader | 配置目录 | 数据目录 | 健康检查 | 数据中心 | ui | 端口 |
---|---|---|---|---|---|---|---|---|
centos-vm1 | client | - | /opt/consul/conf.d | /opt/consul/data | Y | k8s | Y | 8300,8301,8302,8400,8500,8600 |
centos-vm2 | server | - | /opt/consul/conf.d | /opt/consul/data | Y | k8s | - | 8300,8301,8302,8400,8500,8600 |
centos-vm3 | server | - | /opt/consul/conf.d | /opt/consul/data | Y | k8s | - | 8300,8301,8302,8400,8500,8600 |
centos-vm4 | server | Y | /opt/consul/conf.d | /opt/consul/data | Y | k8s | - | 8300,8301,8302,8400,8500,8600 |
默认端口解析
端口号 | 协议 | 功能 |
---|---|---|
8300 | TCP | agent server使用的,用于处理其他agent发来的请求,处理replication、rpc等协议 |
8301 | TCP 、UDP | agent使用此端口处理LAN中的gossip |
8302 | TCP 、UDP | agent server使用此端口处理WAN中的与其他server的gossip |
8400 | TCP | agent用于处理从CLI来的RPC请求 |
8500 | TCP | agent用于处理HTTP API |
8600 | TCP 、UDP | agent用于处理DNS查询 |
环境:CentOS7.5_x64
consul版本:1.3.0
4.1 下载源码包
1 | cd /opt |
4.2 运行
consul运行命令consul agent常用参数解析:
-
-data-dir
- 作用:指定agent储存状态的数据目录
- 这是所有agent都必须的
- 对于server尤其重要,因为他们必须持久化集群的状态
-
-config-dir
- 作用:指定service的配置文件和检查定义所在的位置
- 通常会指定为”某一个路径/consul.d”(通常情况下,.d表示一系列配置文 - 件存放的目录)
-
-config-file
- 作用:指定一个要装载的配置文件
- 该选项可以配置多次,进而配置多个配置文件(后边的会合并前边的,相同 - 的值覆盖)
-
-dev
- 作用:创建一个开发环境下的server节点
- 该参数配置下,不会有任何持久化操作,即不会有任何数据写入到磁盘
- 这种模式不能用于生产环境(因为第二条)
-
-bootstrap-expect
- 作用:该命令通知consul server我们现在准备加入的server节点个数,该参数是为了延迟日志复制的启动直到我们指定数量的server节点成功的加入后启动。
-
-node
- 作用:指定节点在集群中的名称
- 该名称在集群中必须是唯一的(默认采用机器的host)
- 推荐:直接采用机器的IP
-
-bind
- 作用:指明节点的IP地址
- 有时候不指定绑定IP,会报Failed to get advertise address: - Multiple private IPs found. Please configure one. 的异常
-
-server
- 作用:指定节点为server
- 每个数据中心(DC)的server数推荐至少为1,至多为5
- 所有的server都采用raft一致性算法来确保事务的一致性和线性化,事务修 - 改了集群的状态,且集群的状态保存在每一台server上保证可用性
- server也是与其他DC交互的门面(gateway)
-
-client
- 作用:指定节点为client,指定客户端接口的绑定地址,包括:web,ui、DNS、RPC
- 默认是127.0.0.1,只允许回环接口访问
- 若不指定为-server,其实就是-client
-
-join
- 作用:将节点加入到集群,后面指定server节点IP即可
-
-datacenter(老版本叫-dc,-dc已经失效)
- 作用:指定机器加入到哪一个数据中心中
-
-enable-script-checks=true
- 作用:设置检查服务为可用
-
-ui
- 作用:使用自带的ui
4.2.1 server节点
- centos-vm4
1 | consul agent -server \ |
- centos-vm3
1 | consul agent -server \ |
- centos-vm2
1 | consul agent -server \ |
4.2.2 client节点
- centos-vm1
1 | consul agent \ |
注:此节点即为client节点,也开户了web ui访问,实际使用中可为ui单独创建client节点
注:-join可先不用,在节点服务启动后再使用consul join手动加入;但这种方式在节点重启后会失效,建议使用-join。
4.3 配置文件
也可以配置文件的方式运行consul,以下为示例:
/opt/consul/conf.d/config.json
1 | { |
详细参数见官网
运行
1 | consul agent -config-dir /opt/consul/conf.d |
- 本文链接:http://www.whyvv.top/consul.html
- 版权声明:版权所有,转载请注明出处。
分享