SpringCloud提供了Eureka作为服务注册中心,我们可以开箱即用,但是随着Eureka 2.0版本开源停止,我们不得不选择其他。对此,专家建议开发者尽快将相关业务迁移到Consul/ZooKeeper/Etcd 等工具上。
Consul使用一个完全不同的架构进行健康检测。Consul客户端可以运行在集群中的每一个节点上,而不是拥有服务器节点,这些Consul客户端属于一个gossip pool,gossip pool提供了一些功能,包括分布式健康检测。gossip协议提供了一个高效的故障检测工具,这个故障检测工具可以应用到任意规模的集群,而不仅仅是作用于特定的服务器组。同时,这个故障检测工具也支持在本地进行多种健康检测。与此相反,ZooKeeper的临时节点只是一个非常原始的活跃度检测。因为有了Consul,客户端可以检测web服务器是否正在返回200状态码,内存利用率是否达到临界点,是否有足够的数据存储盘等。此外,ZooKeeper会暴露系统的复杂性给客户端,为了避免ZooKeeper出现的这种情况,Consul只提供一个简单HTTP接口。
Consul为服务发现、健康检测、K/V存储和多数据中心提供了一流的支持。为了支持任意存储,而不仅仅是简单的K/V存储,其他系统都要求工具和lib库要率先建立。然而,通过使用客户端节点,Consul提供了一个简单的API,这个API的开发只需要瘦客户端就可以了, 而且,通过使用配置文件和DNS接口,开发人员可以建立完整的服务发现解决方案,最终,达到避免开发API的目的。
下面介绍一下如何搭建consul集群,原文链接: https://devopscube.com/setup-consul-cluster-guide/
1. 先准备三台linux服务器
假设ip分别为:
10.128.0.2,10.128.0.3,10.128.0.4
2. 如下端口保证可以互通: 阿里云如果是在专有网络是互通的,否则需要增加安全组配置
- 8300 – TCP
- 8301 – TCP & UDP
- 8302 – TCP & UDP
- 8400 – TCP
- 8500 – TCP
- 8600 – TCP & UDP
3. 下载consul
cd /usr/local/bin sudo wget https://releases.hashicorp.com/consul/1.2.0/consul_1.2.0_linux_amd64.zip
4. 解压,然后删除zip文件
sudo unzip consul_1.2.0_linux_amd64.zip sudo rm -f consul_1.2.0_linux_amd64.zip
5. 创建如下目录
sudo mkdir -p /etc/consul.d/scripts sudo mkdir /var/consul
6. 生成连接的认证key
consul keygen
7. 在三个服务器上创建配置文件:
sudo vi /etc/consul.d/config.json
输入如下内容文件:
{ "bootstrap_expect": 3, "client_addr": "0.0.0.0", "datacenter": "Us-Central", "data_dir": "/var/consul", "domain": "consul", "enable_script_checks": true, "dns_config": { "enable_truncate": true, "only_passing": true }, "enable_syslog": true, "encrypt": "goplCZgdmOFMZ2Q43To0jw==", "leave_on_terminate": true, "log_level": "INFO", "rejoin_after_leave": true, "server": true, "start_join": [ "10.128.0.2", "10.128.0.3", "10.128.0.4" ], "ui": true }
其中"encrypt"内容用第6步生成的内容代替,“datacenter”可以自定义,但三台要保持一致
8. 创建一个consul服务
sudo vi /etc/systemd/system/consul.service
输入如下内容:
[Unit] Description=Consul Startup process After=network.target [Service] Type=simple ExecStart=/bin/bash -c '/usr/local/bin/consul agent -config-dir /etc/consul.d/' TimeoutStartSec=0 [Install] WantedBy=default.target
重启系统daemon服务,
sudo systemctl daemon-reload
在三台服务器上启动服务:
sudo systemctl start consul
9. 检查服务是否正常
[devopscube@consul-1 ~]$ /usr/local/bin/consul members Node Address Status Type Build Protocol DC Segment consul-1 10.128.0.2:8301 alive server 1.2.0 2 us-central <all> consul-2 10.128.0.3:8301 alive server 1.2.0 2 us-central <all> consul-3 10.128.0.4:8301 alive server 1.2.0 2 us-central <all>
10.通过UI访问
http://<consul-IP>:8500/ui
比如:
http://35.238.163.87:8500/ui
附录: 如何搭建consul agent: https://devopscube.com/hsetup-configure-consul-agent-client-mode/