Consul介绍
Consul是HashiCorp公司推出的开源工具[开源地址:https://github.com/hashicorp/consul],用于实现分布式系统的服务发现与配置。
与市面上其他系统比较如下:
总体而言, Consul用Golang实现,因此具有天然可移植性(支持Linux、windows和Mac OS X);安装包仅包含一个可执行文件,方便部署,与Docker等轻量级容器可无缝配合。
此外,关于Consul的架构以及相关的角色,如下图所示:
以Server模式运行的Consul Agent节点用于维护Consul集群的状态,官方建议每个Consul Cluster至少有3个或以上的运行在Server Mode的Agent,Client节点不限。Consul支持多数据中心,每个数据中心的Consul Cluster都会在运行于Server模式下的Agent节点中选出一个Leader节点,这个选举过程通过Consul实现的raft协议保证,多个 Server节点上的Consul数据信息是强一致的。处于Client Mode的Consul Agent节点比较简单,无状态,仅仅负责将请求转发给Server Agent节点。
集群搭建
笔者打算通过五台Centos7来搭建Consul集群,借助VMware Workstation搭建,当然,最主要的是这台虚拟主机一定要相互ping通,最好关闭防火墙,而且,虚拟机也需要和宿主机(实比如笔者的Windows10操作系统)ping通,具体问题和配置可搜索一下,图片如下:
其中130作为leader角色,129和131作为follower角色,当然,在实际环境中,leader的角色不一定是固定的,会随着环境变化而变化(比如网络断了、宕机了等等)这个我们后续来验证。132和133作为客户端,并安装NET Core 2.1环境,再次提示,一定要保证在这个环境中的所有系统相互之间均能Ping通。
step1:关闭防火墙
systemctl stop firewalld systemctl disable firewalld
step2:安装consul
wget https://releases.hashicorp.com/consul/1.3.0/consul_1.3.0_linux_amd64.zip unzip consul_1.3.0_linux_amd64.zip
step3:节点1
./consul agent -server -ui -bootstrap-expect=3 -data-dir=/tmp/consul -node=consul-1 -client=0.0.0.0 -bind=192.168.153.129 -datacenter=dc1 #设置129为服务器
bootstrap_expect > 0: expecting 3 servers ==> Starting Consul agent... ==> Consul agent running! Version: 'v1.3.0' Node ID: 'c612a043-8906-d6e1-8f4b-ef1c8afb371b' Node name: 'consul-1' Datacenter: 'dc1' (Segment: '<all>') Server: true (Bootstrap: false) Client Addr: [0.0.0.0] (HTTP: 8500, HTTPS: -1, gRPC: -1, DNS: 8600) Cluster Addr: 192.168.153.129 (LAN: 8301, WAN: 8302) Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false ==> Log data will now stream in as it occurs: 2018/10/15 04:53:30 [INFO] raft: Initial configuration (index=1): [{Suffrage:Voter ID:c612a043-8906-d6e1-8f4b-ef1c8afb3777 Address:192.168.153.131:8300} {Suffrage:Voter ID:c612a043-8906-d6e1-8f4b-ef1c8afb371a Address:192.168.153.130:8300} {Suffrage:Voter ID:c612a043-8906-d6e1-8f4b-ef1c8afb371b Address:192.168.153.129:8300}] 2018/10/15 04:53:30 [INFO] serf: EventMemberJoin: consul-1.dc1 192.168.153.129 2018/10/15 04:53:30 [INFO] serf: EventMemberJoin: consul-1 192.168.153.129 2018/10/15 04:53:30 [WARN] agent: Service name "LZZ.DEV.ClientService" will not be discoverable via DNS due to invalid characters. Valid characters include all alpha-numerics and dashes. 2018/10/15 04:53:30 [WARN] agent: Service name "LZZ.PRO.ClientService" will not be discoverable via DNS due to invalid characters. Valid characters include all alpha-numerics and dashes. 2018/10/15 04:53:30 [WARN] agent: check 'service:17947fbe-24ee-40e1-8e49-ea42415ada23' has deregister interval below minimum of 1m0s 2018/10/15 04:53:30 [WARN] agent: check 'service:81d5b247-73d1-4ae5-9d1a-208770ca4e6a' has deregister interval below minimum of 1m0s 2018/10/15 04:53:30 [INFO] agent: Started DNS server 0.0.0.0:8600 (udp) 2018/10/15 04:53:30 [INFO] raft: Node at 192.168.153.129:8300 [Follower] entering Follower state (Leader: "") 2018/10/15 04:53:30 [INFO] serf: Attempting re-join to previously known node: consul-3.dc1: 192.168.153.131:8302 2018/10/15 04:53:30 [INFO] serf: Attempting re-join to previously known node: LZZ.PRODUCTS.WebServer: 192.168.153.133:8301 2018/10/15 04:53:30 [INFO] consul: Adding LAN server consul-1 (Addr: tcp/192.168.153.129:8300) (DC: dc1) 2018/10/15 04:53:30 [INFO] consul: Raft data found, disabling bootstrap mode 2018/10/15 04:53:30 [INFO] consul: Handled member-join event for server "consul-1.dc1" in area "wan" 2018/10/15 04:53:30 [WARN] agent/proxy: running as root, will not start managed proxies 2018/10/15 04:53:30 [INFO] agent: Started DNS server 0.0.0.0:8600 (tcp) 2018/10/15 04:53:30 [INFO] agent: Started HTTP server on [::]:8500 (tcp) 2018/10/15 04:53:30 [INFO] agent: started state syncer 2018/10/15 04:53:30 [INFO] serf: Attempting re-join to previously known node: consul-3: 192.168.153.131:8301 2018/10/15 04:53:30 [INFO] serf: EventMemberJoin: consul-3.dc1 192.168.153.131 2018/10/15 04:53:30 [WARN] memberlist: Refuting an alive message 2018/10/15 04:53:30 [INFO] serf: EventMemberJoin: consul-2.dc1 192.168.153.130 2018/10/15 04:53:30 [INFO] serf: Re-joined to previously known node: consul-3.dc1: 192.168.153.131:8302 2018/10/15 04:53:30 [INFO] consul: Handled member-join event for server "consul-3.dc1" in area "wan" 2018/10/15 04:53:30 [INFO] consul: Handled member-join event for server "consul-2.dc1" in area "wan" 20