集群级高可用

最近更新时间:2026-01-19 17:50:25

我的收藏

Pulsar 跨可用区部署

Pulsar 支持跨可用区部署,即在有 3 个或 3 个以上可用区的地域购买 Pulsar 集群时,支持最多选择 3 个可用区购买跨可用区实例。该实例分区副本会强制分布在各个可用区节点上,这种部署方式能够让您的实例在单个可用区不可用情况下仍能正常提供服务。


跨可用区部署架构

Pulsar 采用计算与存储分离的架构,通过计算(Broker)、存储(Bookie)与元数据(ZooKeeper,ZK)三层协同,实现高可用与故障快速恢复能力。
计算层 Broker :采用多可用区部署,Broker 为无状态组件,提供生产/消费、订阅管理、路由与连接承载等消息队列基础能力。一个 Topic 会分配至一个 Broker 节点上,集群中的所有 Topic 均匀分布在每个 Broker 节点上。由于 Pulsar 的 Broker 无状态,当节点或可用区发生故障时,Broker 节点负责的 Topic 可以被快速切换到其他正常节点
存储层 Bookie:采用多可用区部署,负责消息数据的持久化存储。默认跨可用区分布,例如在 3 副本场景下,数据会在 3 个可用区中各自存储一份。当单个可用区内的 Bookie 节点发生故障时,系统仍可从其他可用区的副本完成读写,保障数据可用性与业务连续性。
元数据层 ZooKeeper:采用 3 可用区部署,负责管理全部元数据,例如命名空间、BookKeeper 元信息、协调选主等。即使单个可用区发生故障,ZooKeeper 依然可保持多数节点可用,确保选主与元数据服务正常


跨可用区部署原理

Pulsar 跨可用区容灾是通过机架感知原理实现,即将不同组件的服务节点部署到不同可用区的不同机架中,但本质还是一套 Pulsar 集群。
机架感知是 Ensemble Placement Policy 的一种,是 BookKeeper Client 用来选择 Ensembles 的算法,选择的依据主要是依赖网络拓扑属性。

如何选择 Bookie

在初始化部署 Bookie 集群时,Bookie 会向当前的 ZooKeeper 注册一个临时的 zk-node,BookKeeper Client 通过 ZooKeeper(watcher)来发现 Bookie 列表。当 bookie 变更时(宕机),Ensemble Placement Policy 会通过 onClusterChanged(Set, Set) 接口被通知,然后重新构造新的网络拓扑,后续的操作,例如 newEnsemble 就会基于新的网络拓扑来生成。

NetworkTopology

Bookie 的节点信息采用一个树状的分层网络结构来描述,并据此实现数据存储的跨可用区分布策略。一个 Bookie 集群可包含多个数据中心 Region,每个 Region 下再按 Rack(机架)划分,最终的叶子节点对应具体的 Bookie 实例。需要注意的是,这里的 Region/ Rack 拓扑用于描述 Bookie(存储层)的数据存储的可用区划分,不等同于 Broker(计算层)的可用区部署。
示例1:Region A 有三个 bookie, bk1 , bk2 and bk3 , 它们的网络位置是, /region-a/rack-1/bk1 , /region-a/rack-1/bk2 , /region-a/rack-2/bk3 , 网络拓扑结构就是如下所示:
root
|
region-a
/ \\
rack-1 rack-2
/ \\ \\
bk1 bk2 bk3

示例2:Region A 和 Region B 有四个 bookie, bk1 , bk2 , bk3 and bk4 ,它们的网络位置是, /region-a/rack-1/bk1 , /region-a/rack-1/bk2 , /region-b/rack-2/bk3 和 /region-b/rack-2/bk4 ,网络拓扑结构如下:

root
/ \\
region-a region-b
| |
rack-1 rack-2
/ \\ / \\
bk1 bk2 bk3 bk4

网络位置是通过 DNSToSwitchMapping 来解析的, DNSToSwitchMapping 会将域名或者 IP 解析到网络位置。网络位置一定是 /region/rack 格式, / 表示 root,region 表示 data center,rack 表示机架信息。
说明:
在 Pulsar 中实现的 DNSToSwitchMapping 是 BookieRackAffinityMapping,通过 ZK 保存 rack 信息,目前只实现了 rack-aware 的能力。

跨可用区部署优劣势

优势

可以大幅度提升集群的容灾能力,当单个可用区出现意外的网络不稳定、断电重启等不可抗力风险时,仍能保证客户端在短时间等待重连后恢复消息的生产和消费。

劣势

采取跨可用区部署则不可避免有跨可用区同步耗时的增加,目前广州、上海、北京几个主要地域跨可用区的时延一般为10ms - 40ms。

使用说明

目前仅专业集群支持跨可用区部署。请参见 产品选型