阅读 1515

RocketMQ-Dledger集群搭建

构建安装DLedger

  1. git clone https://github.com/openmessaging/openmessaging-storage-dledger.git
  2. cd openmessaging-storage-dledger
  3. mvn clean install -DskipTests

下载RocketMQ

  1. github.com/apache/rock… 这里下载需要的RocketMQ版本

  2. unzip rocketmq-all-4.7.0-source-release.zip

  3. cd rocketmq-all-4.7.0/

  4. mvn -Prelease-all -DskipTests clean install -U

  5. cd distribution/target/rocketmq-4.7.0/rocketmq-4.7.0

    可以将该文件拷出

    cp rocketmq-all-4.7.0/distribution/target/rocketmq-4.7.0/rocketmq-4.7.0 /opt/rocketmq-4.7.0

修改配置文件

服务器说明:(生产中应该将 NameServer 部署到其他服务器中,在这为了方便,与Broker部署在一起)

服务器 ip 安装的服务
服务器1-主 192.168.56.102 DLedger,Broker,NameServer
服务器2-从 192.168.56.103 DLedger,Broker,NameServer
服务器3-从 192.168.56.104 DLedger,Broker,NameServer

服务器1配置-Master

  1. vim conf/dledger/broker-n0.conf
  2. 修改Broker配置
## 集群名
brokerClusterName = RaftCluster
## broker组名,同一个RaftClusterGroup内,brokerName名要一样
brokerName=RaftNode00
## 监听的端口
listenPort=30911
## 你设置的NameServer地址和端口
namesrvAddr=192.168.56.102:9876;192.168.56.103:9876;192.168.56.104:9876
storePathRootDir=/tmp/rmqstore/node00
storePathCommitLog=/tmp/rmqstore/node00/commitlog
enableDLegerCommitLog=true
dLegerGroup=RaftNode00
## n0 n1 n2 分别是broker1,broker2,broker3 的 dLegerSelfId
## 例如:dLegerPeers=n0-服务器1的IP:40911;n1-服务器2的IP:40912;n2-服务器3的IP:40913
dLegerPeers=n0-192.168.56.102:40911;n1-192.168.56.103:40912;n2-192.168.56.104:40913
## must be unique
## 这个值必须是在同一个RaftClusterGroup内唯一的
dLegerSelfId=n0
sendMessageThreadPoolNums=16
## 由于我的虚拟机配置了多个网卡,所以会绑定ip错误,因此我配置了这项,
brokerIP1=192.168.56.102
复制代码

其他配置与详细说明:Broker 配置

服务器2配置-Slave

  1. vim conf/dledger/broker-n1.conf
  2. 修改Broker配置
brokerClusterName = RaftCluster
brokerName=RaftNode00
listenPort=30921
namesrvAddr=192.168.56.102:9876;192.168.56.103:9876;192.168.56.104:9876
storePathRootDir=/tmp/rmqstore/node01
storePathCommitLog=/tmp/rmqstore/node01/commitlog
enableDLegerCommitLog=true
dLegerGroup=RaftNode00
dLegerPeers=n0-192.168.56.102:40911;n1-192.168.56.103:40912;n2-192.168.56.104:40913
## must be unique
dLegerSelfId=n1
sendMessageThreadPoolNums=16
brokerIP1=192.168.56.103
复制代码

服务器3配置-Slave

  1. vim conf/dledger/broker-n2.conf
  2. 修改Broker配置
brokerClusterName = RaftCluster
brokerName=RaftNode00
listenPort=30931
namesrvAddr=192.168.56.102:9876;192.168.56.103:9876;192.168.56.104:9876
storePathRootDir=/tmp/rmqstore/node02
storePathCommitLog=/tmp/rmqstore/node02/commitlog
enableDLegerCommitLog=true
dLegerGroup=RaftNode00
dLegerPeers=n0-192.168.56.102:40911;n1-192.168.56.103:40912;n2-192.168.56.104:40913
## must be unique
dLegerSelfId=n2
sendMessageThreadPoolNums=16
brokerIP1=192.168.56.104
复制代码

启动集群

  1. 在服务器1 执行
nohup sh bin/mqnamesrv > nohubNameserv &
nohup sh bin/mqbroker  > nohubBroker -c conf/dledger/broker-n0.conf &
复制代码
  1. 在服务器2 执行
nohup sh bin/mqnamesrv > nohubNameserv &
nohup sh bin/mqbroker  > nohubBroker -c conf/dledger/broker-n1.conf &
复制代码
  1. 在服务器3 执行
nohup sh bin/mqnamesrv > nohubNameserv &
nohup sh bin/mqbroker  > nohubBroker -c conf/dledger/broker-n2.conf &
复制代码

查看集群情况

sh bin/mqadmin clusterList -n 127.0.0.1:9876

[root@localhost rocketmq-4.7.1]# sh bin/mqadmin clusterList -n 127.0.0.1:9876
RocketMQLog:WARN No appenders could be found for logger (io.netty.util.internal.PlatformDependent0).
RocketMQLog:WARN Please initialize the logger system properly.
#Cluster Name     #Broker Name            #BID  #Addr                  #Version                #InTPS(LOAD)       #OutTPS(LOAD) #PCWait(ms) #Hour #SPACE
RaftCluster       RaftNode00              0     192.168.56.102:30911   V4_7_1                   0.00(0,0ms)         0.00(0,0ms)          0 442545.08 -1.0000
RaftCluster       RaftNode00              2     192.168.56.103:30921   V4_7_1                   0.00(0,0ms)         0.00(0,0ms)          0 442545.08 -1.0000
RaftCluster       RaftNode00              3     192.168.56.104:30931   V4_7_1                   0.00(0,0ms)         0.00(0,0ms)          0 442545.08 -1.0000
复制代码

BID 为 0 的是Master

kill 主broker 并再次查看集群情况

sh bin/mqshutdown broker

sh bin/mqadmin clusterList -n 127.0.0.1:9876

[root@localhost rocketmq-4.7.1]# sh bin/mqadmin clusterList -n 127.0.0.1:9876
RocketMQLog:WARN No appenders could be found for logger (io.netty.util.internal.PlatformDependent0).
RocketMQLog:WARN Please initialize the logger system properly.
#Cluster Name     #Broker Name            #BID  #Addr                  #Version                #InTPS(LOAD)       #OutTPS(LOAD) #PCWait(ms) #Hour #SPACE
RaftCluster       RaftNode00              0     192.168.56.104:30931   V4_7_1                   0.00(0,0ms)         0.00(0,0ms)          0 442545.18 -1.0000
RaftCluster       RaftNode00              2     192.168.56.103:30921   V4_7_1                   0.00(0,0ms)         0.00(0,0ms)          0 442545.18 -1.0000
复制代码

Master切换成功

备注

Broker 配置

参考文档:

参数名 默认值 说明
listenPort 10911 接受客户端连接的监听端口
namesrvAddr null nameServer 地址
brokerIP1 网卡的 InetAddress 当前 broker 监听的 IP
brokerIP2 跟 brokerIP1 一样 存在主从 broker 时,如果在 broker 主节点上配置了 brokerIP2 属性,broker 从节点会连接主节点配置的 brokerIP2 进行同步
brokerName null broker 的名称
brokerClusterName DefaultCluster 本 broker 所属的 Cluser 名称
brokerId 0 broker id, 0 表示 master, 其他的正整数表示 slave
storePathCommitLog $HOME/store/commitlog/ 存储 commit log 的路径
storePathConsumerQueue $HOME/store/consumequeue/ 存储 consume queue 的路径
mappedFileSizeCommitLog 1024 * 1024 * 1024(1G) commit log 的映射文件大小
deleteWhen 04 在每天的什么时间删除已经超过文件保留时间的 commit log
fileReservedTime 72 以小时计算的文件保留时间
brokerRole ASYNC_MASTER SYNC_MASTER/ASYNC_MASTER/SLAVE
flushDiskType ASYNC_FLUSH SYNC_FLUSH/ASYNC_FLUSH SYNC_FLUSH 模式下的 broker 保证在收到确认生产者之前将消息刷盘。ASYNC_FLUSH 模式下的 broker 则利用刷盘一组消息的模式,可以取得更好的性能。
enableDLegerCommitLog 是否启动 DLedger true
dLegerGroup DLedger Raft Group的名字,建议和 brokerName 保持一致 RaftNode00
dLegerPeers DLedger Group 内各节点的端口信息,同一个 Group 内的各个节点配置必须要保证一致 n0-127.0.0.1:40911;n1-127.0.0.1:40912;n2-127.0.0.1:40913
dLegerSelfId 节点 id, 必须属于 dLegerPeers 中的一个;同 Group 内各个节点要唯一 n0
sendMessageThreadPoolNums 发送线程个数,建议配置成 Cpu 核数 16

启动内存不够

修改 bin/runbroker.shbin/runserver.sh 中的

JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g
复制代码

将参数调低 (可以改为别的值)

JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m"
复制代码

报连接超时

查看防火墙服务状态 systemctl status firewalld

将防火墙关闭 systemctl stop firewalld

文章分类
阅读
文章标签