consul分布式集群搭建

本文介绍了Consul的特性,包括服务发现、健康检查、键值存储和多数据中心支持。详细阐述了Consul的架构,区分了Client和Server节点的角色。接着,讲解了在Windows环境下安装Consul的开发模式和集群部署步骤,并提供了加入集群的方法。最后,展示了如何在C#中进行服务注册和发现的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

consul特性

consul是分布式的、高可用、横向扩展的。consul提供的一些关键特性:

  • service discovery:consul通过DNS或者HTTP接口使服务注册和服务发现变的很容易,一些外部服务,例如saas提供的也可以一样注册。
  • health checking:健康检测使consul可以快速的告警在集群中的操作。和服务发现的集成,可以防止服务转发到故障的服务上面。
  • key/value storage:一个用来存储动态配置的系统。提供简单的HTTP接口,可以在任何地方操作。
  • multi-datacenter:无需复杂的配置,即可支持任意数量的区域。

Consul架构

Consul的微服务一般都是集群,集群由一个个的Consul节点组成,在这些Consul节点里面,分为两种角色,Server 以及 Client。
Consul节点在启动时可以定义自身角色,Client、Server两种。
Client节点只负责转发外部请求,所有注册到当前节点的服务会被转发到server节点,向server节点进行键值对的读/写,本身是不持久化这些信息,是无状态的;
Server节点的职责是使用raft协议保证数据一致性,响应客户端的请求,维护集群状态,与其他数据中心交互,另外所有的信息持久化到本地,这样遇到故障,信息是可以被保留的。
节点之间通过gossip广播协议(谣言协议),进行节点之间的数据交互,最终大家达到一致。
在这里插入图片描述

consul概念

  • Agent:Consul集群中长时间运行的守护进程,以consul agent 命令开始启动. 在客户端和服务端模式下都可以运行,可以运行DNS或者- - - HTTP接口, 它的主要作用是运行时检查和保持服务同步。
  • Client:客户端, 无状态, 以一个极小的消耗将接口请求转发给局域网内的服务端集群.
  • Server:服务端, 保存配置信息, 高可用集群, 在局域网内与本地客户端通讯, 通过广域网与其他数据中心通讯. 每个数据中心的 server 数量推荐为 3 个或是 5 个.
  • Datacenter:数据中心,多数据中心联合工作保证数据存储安全快捷
  • Consensus:一致性协议使用的是Raft Protocol
  • RPC:远程程序通信
  • Gossip:基于 Serf 实现的 gossip 协议,负责成员、失败探测、事件广播等。通过 UDP 实现各个节点之间的消息。分为 LAN 上的和 WAN 上的两种情形。

consul安装及测试安装

window下安装

开发模式部署

  • 进入consul官网找到自己开发平台对应的安装包下载https://www.consul.io/downloads.html
  • 下载完后,解压,得到一个可执行文件consul
  • 随便找个地方放着
  • 启动consul,这里我们先启动一个开发模式,该模式不能用于生产环境,因为该模式下不会持久化任何状态,该启动模式仅仅是为了快速便捷的启动单节点consul,-node结点名为=xxx,-ui可以用界面访问,默认能访问。 测试地址:http://localhost:8500。命令如下:
consul agent -dev -ui -node =xxx:

在这里插入图片描述
在这里插入图片描述

集群部署

三个节点或五个server节点组一个集群,不建议超过五个节点,为什么是单数,因为集群需要选举一个leader来保证数据一致性。票数要超过半数以上才能选举为leader。
基本的命令为:

consul agent -server -bootstrap-expect=3 -data-dir=/tmp/consul -node=172.16.2.100 -bind=172.16.2.100 -client=0.0.0.0 -datacenter=firstDataCenter -ui

-server 表示是以服务端身份启动
-bootstrap-expect=3 表示server集群最低节点数为3,低于这个值将工作不正常(注:类似zookeeper一样,通常集群数为奇数,方便选举,consul采用的是raft算法)
-data-dir 表示指定数据的存放目录(该目录必须存在)
-node 表示节点在web ui中显示的名称
-bind 表示绑定到哪个ip(有些服务器会绑定多块网卡,可以通过bind参数强制指定绑定的ip)
-client 指定客户端访问的ip(consul有丰富的api接口,这里的客户端指浏览器或调用方),0.0.0.0表示不限客户端ip
-datacenter 设置数据中心,这是配置代理运行的数据中心。每个节点都必须设置其它向数据中心报告
-ui
-join 选定一个IP加入集群

现在我们使用四台机器创建集群:172.16.2.100 172.16.0.118 172.16.3.190 172.16.3.69

  1. 启动server端,分别在上述三台服务器执行如下命令,我们下面只展示172.16.2.100,其他机器执行同样操作,注意-node,-bind,-data-dir三个参数根据实际来
 consul agent -server -bootstrap-expect=3 -data-dir=/tmp/consul -node=172.16.2.100 -bind=172.16.2.100 -client=0.0.0.0 -datacenter=firstDataCenter -ui

执行consul members可以查看当前节点信息
在这里插入图片描述

  1. 启动client端,在190机器上执行如下命令
consul agent -data-dir F:\consul -node=c1 -bind=172.16.3.190 -datacenter=firstDataCenter

同理,执行 consul members可查看当前节点信息
在这里插入图片描述

  1. 组建cluster
    现在我们有了3个server node + 1个client node,当前每个节点都是独立存在的
    要让节点加入集群,先瞄定其中任意一个节点IP(假设:其它3个节点,都加入172.16.xx.190),可以运行以
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值