linux环境搭建consul集群

Consul是什么?
官方介绍是:Consul 是一种服务网格的解决方案,在 Consul 中,提供了服务发现、配置、分段等控制管理平台,Consul 中的每项功能都可以单独使用,也可以一起使用来构建完整的服务网格;在 Consul 内部,有一个简单的代理服务,所以在安装 Consul 后,马上就可以开始使用 Consul ;当然,Consul 也支持集成第三方代理,比如 Envoy。

Consul 是一个服务组件,在用户下载 Consul 的安装包后,可以立即运行它,或者通过其它托管程序运行它,Consul 只有一个程序包,无需另行安装;当运行 Consul 的时候,需要为其指定一些必须的参数,以供 Consul 在运行时使用;(比如参数 -data-dir 表示指定 Consul 存放数据的目录)。

我们不整那些服务网格之类的概念,简单说,Consul在整个微服务架构体系里面就是起了注册中心和配置中心的作用。

Consul功能概述
服务注册
Consul 内部侦听 8500 端口,提供给 Consul 的客户端注册服务,比如张三开发了一个购物车程序,该购物车程序包含了“加入购物车”、“清空购物车” 两个接口,张三在开发购物车程序的时候,使用了 Consul 的客户端包组件,在程序运行起来以后,购物车程序就自动的连接到 Consul 的 8500 端口,注册了一个服务,该服务被命名为“购物车程序”,此时,Consul 并不知道 “购物车程序”有多少个接口,Consul 只知道 “购物车程序”的服务地址、端口。

服务发现
在“购物车程序”注册到 Consul 后,Consul 也仅仅知道有这么一个服务注册进来了,并且还配置了健康检查, Consul 会定时的去连接 “购物车程序”,确保其还处于可提供服务的状态,任何人(程序)都可以通过 Consul 的外部地址访问 Consul 内部的已注册的服务列表,从而获得真实的服务地址,然后调用该真实地址,获得结果。

键值存储
在 Consul 内部,提供了简单的数据存储,也就是 key/value 系统,kv 系统非常强大,它的作用包括允许节点动态修改配置、执行 leader 选举、服务发现、集成健康检查、或者其它你想要存储到 Consul 中的内容

Consul部署架构
集群
Consul 是一个分布式的解决方案,可以部署多个 Consul 实例,确保数据中心的持续稳定,在 Consul 集群中,内部采用投票的方式选举出 leader,然后才开始运行整个集群,只有正确选举出 leader 后,集群才开始工作,当一个服务注册到 Consul 后,集群将该服务进行同步,确保 Consul 集群内的每个节点都存储了该服务的信息;然后,Consul 集群将对该服务进行健康检查和投票,超过半数通过,即认为该服务为正常(或者异常);一旦被投票认定为异常的服务,该服务将不会被外部发现(不可访问),在此过程中,Consul 将持续的对该异常的服务进行检查,一旦服务恢复,Consul 即刻将其加入正常服务。

服务器和客户端
Consul 支持两种运行的方式,即 server 和 client 模式,当一个 Consul 节点以 server 模式运行的时候,就表示该 Consul 节点会存储服务和配置等相关信息,并且参与到健康检查、leader 选举等服务器事务中,与之相反的是,client 模式不会存储服务信息。

数据中心
每个 Consul 节点都需要加入一个命名的数据中心(DataCenter),一个节点上,可以运行多个数据中心,数据中心的作用在于应用隔离,相当于服务分组。可以简单理解为,一个数据中心域为一个二层联通的子网。

Consul能做什么?
简单来说,consul是一个分布式的服务管理平台,应用可以利用consul来进行分布式服务的服务注册、服务发现、配置管理、分布式事务协调等功能。借助于raft共识算法,可以轻松搭建出一个高可用的分布式集群,各节点所存储的数据通过raft算法可以保证最终一致性,而不需要依赖于任何的外部数据库。(这点非常重要,要知道搭建一个高可用的mysql数据库本身成本就非常高,nacos的数据存储目前只支持mysql,现在貌似也有规划转分布式算法)。通过上面的介绍,相信你也看出来了,consul做的事情本质上和zookeeper、etcd这些分布式服务组件都差不多,只是zookeeper用的一致性算法是zab(基于paxos),向来以难以理解著称,而etcd也是raft算法,相对容易理解很多,但是不带ui管理界面,易用性方面consul会好一点

集群搭建:
consul集群部署最少三台主机
1、下载consul安装包
以下是我的包,永久有效可直接提取
链接:https://pan.baidu.com/s/1pslMs8_cXrXHnJPTRgt7aQ
提取码:yl09

2、创建consul目录
mkdir -p /usr/local/consul/
解压安装包:
unzip consul_1.6.1_linux_amd64.zip
3、解压安装包,解压后得到一个consul执行文件
将consul文件复制到/usr/bin下
cp -R connsul /usr/bin
4、查看consul版本
在这里插入图片描述
5、三台主机的IP以及命名
在这里插入图片描述
6、启动节点 (10.246.186.62执行)
./consul agent -server -bootstrap-expect 3 -data-dir /usr/local/consul/ -bind=10.246.186.62-node=server01 -client=0.0.0.0 -ui &

其他两台主机分别执行操作更改bind及node名称即可

参数说明:
server: 以server身份启动。默认是client
bootstrap-expect:集群要求的最少server数量,当低于这个数量,集群即失效。
data-dir:data存放的目录,更多信息请参阅consul数据同步机制
node:节点id,集群中的每个node必须有一个唯一的名称。默认情况下,Consul使用机器的hostname
bind:监听的ip地址。默认绑定0.0.0.0
client: 客户端的ip地址
ui: 可以访问UI界面
-config-dir指定配置文件夹,Consul会加载其中的所有文件
-datacenter 指定数据中心名称,默认是dc1

7、检查服务是否运行
在这里插入图片描述

8、共三台服务器挑选其中两台服务器加入到其中一台(随意挑选即可)
这里咱们选用的是其他两台服务器全部加入到10.246.185.62
9、在10.246.186.111执行: ./consul join 10.246.186.21
在10.246.184.21执行:./consul join 10.246.186.21
10、检查是否加入到集群 (状态全部为alive正常运行)
cd /usr/bin/
./consul members
在这里插入图片描述
11、查看集群中选举状态:
./consul operator raft list-peers 查看consul集群的状态
在这里插入图片描述
12、访问 http:10.246.186.62:8500/ui
在这里插入图片描述
注意点:启动集群时切记一定加 -ui 否则不支持web页面访问

客户端启动:
按照上面步骤安装好consul

./consul agent -data-dir /usr/local/src/consul -datacenter=g01_consul -bind 本机ip -join 集群的IP(10.246.186.62 )-node=本机ip

验证客户端是否注册加入到集群中:
在这里插入图片描述

ok!有问题可以留留言~

代码交流 2021