Consul集群配置

上图是官网提供的一个事例系统图,图中的Server是consul服务端高可用集群,Client是consul客户端。consul客户端不保存数据,客户端将接收到的请求转发给响应的Server端。Server之间通过局域网或广域网通信实现数据一致性。每个Server或Client都是一个consul agent。

Consul集群间使用了GOSSIP协议通信和raft一致性算法。上面这张图涉及到了很多术语:

  • Agent——agent是一直运行在Consul集群中每个成员上的守护进程。通过运行consul agent来启动。agent可以运行在client或者server模式。指定节点作为client或者server是非常简单的,除非有其他agent实例。所有的agent都能运行DNS或者HTTP接口,并负责运行时检查和保持服务同步。
  • Client——一个Client是一个转发所有RPC到server的代理。这个client是相对无状态的。client唯一执行的后台活动是加入LAN gossip池。这有一个最低的资源开销并且仅消耗少量的网络带宽。
  • Server——一个server是一个有一组扩展功能的代理,这些功能包括参与Raft选举,维护集群状态,响应RPC查询,与其他数据中心交互WAN gossip和转发查询给leader或者远程数据中心。
  • DataCenter——虽然数据中心的定义是显而易见的,但是有一些细微的细节必须考虑。例如,在EC2中,多个可用区域被认为组成一个数据中心。我们定义数据中心为一个私有的,低延迟和高带宽的一个网络环境。这不包括访问公共网络,但是对于我们而言,同一个EC2中的多个可用区域可以被认为是一个数据中心的一部分。
  • Consensus——一致性,使用Consensus来表明就leader选举和事务的顺序达成一致。为了以容错方式达成一致,一般有超过半数一致则可以认为整体一致。Consul使用Raft实现一致性,进行leader选举,在consul中的使用bootstrap时,可以进行自选,其他server加入进来后bootstrap就可以取消。
  • Gossip——Consul建立在Serf的基础之上,它提供了一个用于多播目的的完整的gossip协议。Serf提供成员关系,故障检测和事件广播。Serf是去中心化的服务发现和编制的解决方案,节点失败侦测与发现,具有容错、轻量、高可用的特点。
  • LAN Gossip——它包含所有位于同一个局域网或者数据中心的所有节点。
  • WAN Gossip——它只包含Server。这些server主要分布在不同的数据中心并且通常通过因特网或者广域网通信。
  • RPC——远程过程调用。这是一个允许client请求server的请求/响应机制。

在每个数据中心,client和server是混合的。一般建议有3-5台server。这是基于有故障情况下的可用性和性能之间的权衡结果,因为越多的机器加入达成共识越慢。然而,并不限制client的数量,它们可以很容易的扩展到数千或者数万台。

同一个数据中心的所有节点都必须加入gossip协议。这意味着gossip协议包含一个给定数据中心的所有节点。这服务于几个目的:第一,不需要在client上配置server地址。发现都是自动完成的。第二,检测节点故障的工作不是放在server上,而是分布式的。这是的故障检测相比心跳机制有更高的可扩展性。第三:它用来作为一个消息层来通知事件,比如leader选举发生时。

每个数据中心的server都是Raft节点集合的一部分。这意味着它们一起工作并选出一个leader,一个有额外工作的server。leader负责处理所有的查询和事务。作为一致性协议的一部分,事务也必须被复制到所有其他的节点。因为这一要求,当一个非leader得server收到一个RPC请求时,它将请求转发给集群leader。

server节点也作为WAN gossip Pool的一部分。这个Pool不同于LAN Pool,因为它是为了优化互联网更高的延迟,并且它只包含其他Consul server节点。这个Pool的目的是为了允许数据中心能够以low-touch的方式发现彼此。这使得一个新的数据中心可以很容易的加入现存的WAN gossip。因为server都运行在这个pool中,它也支持跨数据中心请求。当一个server收到来自另一个数据中心的请求时,它随即转发给正确数据中想一个server。该server再转发给本地leader。

这使得数据中心之间只有一个很低的耦合,但是由于故障检测,连接缓存和复用,跨数据中心的请求都是相对快速和可靠的。

consul环境准备

IP节点名称Consul角色
10.200.119.171s1Server
10.200.119.172s2Server
10.200.119.173s3Server
10.200.119.60c1Client(UI)

consul下载和目录创建

  1. https://releases.hashicorp.com/consul/1.4.3/consul_1.4.3_linux_amd64.zip
  2. unzip consul_1.4.3_linux_amd64.zip
  3. mv consul /usr/local/bin/
  4. mkdir -p /data/consul/{data,config} #创建数据目录和配置目录

consul acl

对数据中心的每个server,添加/data/consul/config/acl_config.json配置:

参考:《consul ACL配置使用》

consul agent参数

consul agent --help

-advertise:通知展现地址用来改变我们给集群中的其他节点展现的地址,一般情况下-bind地址就是展现地址 -bootstrap:用来控制一个server是否在bootstrap模式,在一个datacenter中只能有一个server处于bootstrap模式,当一个server处于bootstrap模式时,可以自己选举为raft leader。-bootstrap-expect:在一个datacenter中期望提供的server节点数目,当该值提供的时候,consul一直等到达到指定sever数目的时候才会引导整个集群,该标记不能和bootstrap公用。 -bind:该地址用来在集群内部的通讯,集群内的所有节点到地址都必须是可达的,默认是0.0.0.0。 -client:consul绑定在哪个client地址上,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1。 -config-file:明确的指定要加载哪个配置文件。 -config-dir:配置文件目录,里面所有以.json结尾的文件都会被加载 -data-dir:提供一个目录用来存放agent的状态,所有的agent都需要该目录,该目录必须是稳定的,系统重启后都继续存在。 -dc:该标记控制agent的datacenter的名称,默认是dc1。 -encrypt:指定secret key,使consul在通讯时进行加密,key可以通过consul keygen生成,同一个集群中的节点必须使用相同的key。 -join:加入一个已经启动的agent的ip地址,可以多次指定多个agent的地址。如果consul不能加入任何指定的地址中,则agent会启动失败。默认agent启动时不会加入任何节点。 -retry-join:和join类似,但是允许你在第一次失败后进行尝试。 -retry-interval:两次join之间的时间间隔,默认是30s。 -retry-max:尝试重复join的次数,默认是0,也就是无限次尝试。 -log-level:consul agent启动后显示的日志信息级别。默认是info,可选:trace、debug、info、warn、err。 -node:节点在集群中的名称,在一个集群中必须是唯一的,默认是该节点的主机名。 -protocol:consul使用的协议版本。 -rejoin:使consul忽略先前的离开,在agent再次启动后仍旧尝试加入集群中。也就是说如果不加入这个参数,当前节点一旦退出,下次重启后是不会自动加入到集群中去的,除非是手动触发 consul join xxxx ,所以为了降低重启后对本身服务的影响,这里统一使用 -rejoin参数。-server:定义agent运行在server模式,每个集群至少有一个server,建议每个集群的server不要超过5个。 -syslog:开启系统日志功能,只在linux/osx上生效。 -ui:启用内置Web UI服务 -ui-dir:提供存放web ui资源的路径,该目录必须是可读的。 -pid-file:提供一个路径来存放pid文件,可以使用该文件进行SIGINT/SIGHUP(关闭/更新)agent。

consul配置文件

本文不适用acl规则

10.200.119.171:/etc/sysconfig/consul

  1. CMD_OPTS=”agent -server -data-dir=/data/consul/data -node=s1 -config-dir=/data/consul/config -bind=10.200.119.171 -rejoin -client=0.0.0.0 -bootstrap”

10.200.119.172:/etc/sysconfig/consul

  1. CMD_OPTS=”agent -server -data-dir=/data/consul/data -node=s2 -config-dir=/data/consul/config -bind=10.200.119.172 -rejoin -client=0.0.0.0″

10.200.119.173:/etc/sysconfig/consul

  1. CMD_OPTS=”agent -server -data-dir=/data/consul/data -node=s3 -config-dir=/data/consul/config -bind=10.200.119.173 -rejoin -client=0.0.0.0″

10.200.119.60:/etc/sysconfig/consul

  1. CMD_OPTS=”agent -ui -data-dir=/data/consul/data -node=c1 -config-dir=/data/consul/config -bind=10.200.119.60 -rejoin -client=0.0.0.0″

consul systemd自启动

  1. cat > /lib/systemd/system/consul.service << EOF
  2. [Unit]
  3. Description=Consul is a tool for service discovery and configuration. Consul is distributed, highly available, and extremely scalable.
  4. Documentation=http://www.consul.io
  5. After=network-online.target
  6. Wants=network-online.target
  7. [Service]
  8. LimitCORE=infinity
  9. LimitNOFILE=100000
  10. LimitNPROC=100000
  11. EnvironmentFile=-/etc/sysconfig/consul
  12. ExecStart=/usr/local/bin/consul \$CMD_OPTS
  13. ExecReload=/bin/kill -HUP \$MAINPID
  14. KillSignal=SIGINT
  15. [Install]
  16. WantedBy=multi-user.target
  17. EOF
  18. systemctl enable consul

consul节点加入集群

4个节点分别启动consul

  1. systemctl start consul

在s2、s3、c1加入s1集群,如下:

  1. consul join 10.200.119.171

consul查看状态

  1. [root@10-200-119-60 ~]# consul members
  2. Node Address Status Type Build Protocol DC Segment
  3. s1 10.200.119.171:8301 alive server 1.4.3 2 dc1 <all>
  4. s2 10.200.119.172:8301 alive server 1.4.3 2 dc1 <all>
  5. s3 10.200.119.173:8301 alive server 1.4.3 2 dc1 <all>
  6. c1 10.200.119.60:8301 alive client 1.4.3 2 dc1 <default>

consul UI

Consul集群配置
关于软件资源类分享的免责声明:
本站为个人博客非盈利性站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并未做任何贩卖软件信息等行为,不存在任何商业目的及用途。
根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。"
您需知晓本站所有分享内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任。
如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇