插件窝 干货文章 如何在Linux上设置高可用的消息中间件

如何在Linux上设置高可用的消息中间件

node Zookeeper RabbitMQ Pulsar 892    来源:    2025-04-15

在Linux上设置高可用的消息中间件

方案概述

在Linux环境下设置高可用的消息中间件有多种选择,下面我将介绍几种主流方案,包括RabbitMQ、Apache Kafka和Apache Pulsar的高可用配置方法。

方案一:RabbitMQ高可用集群

1. 安装RabbitMQ

# Ubuntu/Debian
sudo apt-get install rabbitmq-server

# CentOS/RHEL
sudo yum install rabbitmq-server

2. 设置集群

# 在所有节点上停止服务
sudo systemctl stop rabbitmq-server

# 复制主节点.erlang.cookie到其他节点
sudo scp /var/lib/rabbitmq/.erlang.cookie root@node2:/var/lib/rabbitmq/
sudo scp /var/lib/rabbitmq/.erlang.cookie root@node3:/var/lib/rabbitmq/

# 启动服务
sudo systemctl start rabbitmq-server

# 在从节点上加入集群
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@node1
rabbitmqctl start_app

3. 配置镜像队列

# 设置策略使所有队列镜像
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

4. 配置负载均衡

使用HAProxy或Nginx作为负载均衡器:

frontend rabbitmq
    bind *:5672
    default_backend rabbitmq_nodes

backend rabbitmq_nodes
    balance roundrobin
    server node1 192.168.1.101:5672 check
    server node2 192.168.1.102:5672 check
    server node3 192.168.1.103:5672 check

方案二:Apache Kafka高可用集群

1. 安装Zookeeper集群

# 在所有节点上
wget https://downloads.apache.org/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz
tar -xzf apache-zookeeper-3.7.0-bin.tar.gz
cd apache-zookeeper-3.7.0-bin/conf
cp zoo_sample.cfg zoo.cfg

编辑zoo.cfg:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/var/lib/zookeeper
clientPort=2181
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888

2. 安装Kafka

wget https://downloads.apache.org/kafka/3.1.0/kafka_2.13-3.1.0.tgz
tar -xzf kafka_2.13-3.1.0.tgz
cd kafka_2.13-3.1.0/config

编辑server.properties:

broker.id=1 # 每个节点唯一
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://node1:9092
zookeeper.connect=node1:2181,node2:2181,node3:2181
default.replication.factor=3
min.insync.replicas=2

3. 启动服务

# 启动Zookeeper
bin/zookeeper-server-start.sh config/zookeeper.properties

# 启动Kafka
bin/kafka-server-start.sh config/server.properties

方案三:Apache Pulsar高可用集群

1. 安装Pulsar

wget https://archive.apache.org/dist/pulsar/pulsar-2.9.1/apache-pulsar-2.9.1-bin.tar.gz
tar -xzf apache-pulsar-2.9.1-bin.tar.gz
cd apache-pulsar-2.9.1

2. 配置Zookeeper

编辑conf/zookeeper.conf:

server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888

3. 配置BookKeeper

编辑conf/bookkeeper.conf:

zkServers=node1:2181,node2:2181,node3:2181

4. 配置Pulsar Broker

编辑conf/broker.conf:

zookeeperServers=node1:2181,node2:2181,node3:2181
configurationStoreServers=node1:2181,node2:2181,node3:2181
clusterName=pulsar-cluster

5. 启动服务

# 启动Zookeeper
bin/pulsar-daemon start zookeeper

# 初始化集群元数据
bin/pulsar initialize-cluster-metadata \
  --cluster pulsar-cluster \
  --zookeeper node1:2181 \
  --configuration-store node1:2181 \
  --web-service-url http://node1:8080,node2:8080,node3:8080 \
  --broker-service-url pulsar://node1:6650,node2:6650,node3:6650

# 启动BookKeeper
bin/pulsar-daemon start bookie

# 启动Broker
bin/pulsar-daemon start broker

高可用最佳实践

  1. 节点数量:至少3个节点以实现真正的容错能力
  2. 网络配置:确保节点间低延迟、高带宽连接
  3. 监控:部署Prometheus + Grafana监控集群健康状态
  4. 备份:定期备份配置和元数据
  5. 资源隔离:为消息中间件分配专用资源
  6. 安全:配置TLS加密和认证机制

故障转移测试

定期进行故障转移测试: 1. 随机停止节点服务,验证自动恢复 2. 模拟网络分区,验证脑裂保护机制 3. 测试磁盘故障场景下的数据完整性

以上方案可根据您的具体需求、消息量级和团队熟悉程度进行选择。RabbitMQ适合传统企业应用,Kafka适合高吞吐场景,Pulsar则提供了更现代的云原生特性。