RocketMQ4.0 Cluster

RocketMQ4.0 Cluster,第1张

RocketMQ4.0 Cluster RocketMQ4.0 Cluster
  1. 系统环境资源
    1.1. 网络资源
    主机名 IP地址 角色
    bjccsoftphone01 10.22.194.18 node1
    nameserver1
    broker-a-m
    broker-c-s
    bjccsoftphone02 10.22.194.77 node2 nameserver2
    broker-b-m
    broker-a-s
    bjccsoftphone03 10.22.194.78 node3
    broker-c-m
    broker-b-s

1.2. 硬件资源
IP地址 硬件配置
10.22.194.18
PowerEdge R730
Intel® Xeon® CPU E5-2640 v4 @ 2.40GHz
64G/10000 Mbps full duplex*2

10.22.194.77
PowerEdge R730
Intel® Xeon® CPU E5-2640 v4 @ 2.40GHz
64G/10000 Mbps full duplex*2

10.22.194.78
PowerEdge R730
Intel® Xeon® CPU E5-2640 v4 @ 2.40GHz
64G/10000 Mbps full duplex*2

1.3. OS资源
主机名 *** 作系统
bjccsoftphone01 Red Hat Enterprise Linux Server release 6.9 (Santiago) x64

bjccsoftphone02 Red Hat Enterprise Linux Server release 6.9 (Santiago) x64

bjccsoftphone03 Red Hat Enterprise Linux Server release 6.9 (Santiago) x64

  1. 安装介质
    2.1. RocketMQ相关资源
    RocketMQ 4.2 https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.2.0/rocketmq-all-4.2.0-bin-release.zip

rocketmq-console https://github.com/apache/incubator-rocketmq-externals/tree/master/rocketmq-console

  1. RocketMQ架构部署
    3.1. 架构简介
    RocketMQ 是一款 分布式、队列模型的消息中间件,由阿里巴巴团队研发,借鉴参考了JMS规范的MQ实现。RocketMQ具有以下特点:
    1、是一个队列模型的消息中间件,具有高性能、高可靠、高实时、分布式特点。
    2、Producer、Consumer、队列都可以分布式。
    3、Producer向一些队列轮流发送消息,队列集合称为Topic,Consumer如果做广播消费,则一个consumer实例消费这个Topic对应的所有队列,如果做集群消费,则多个Consumer实例平均消费这个topic对应的队列集合。
    4、能够保证严格的消息顺序
    5、提供丰富的消息拉取模式
    6、高效的订阅者水平扩展能力
    7、实时的消息订阅机制
    8、亿级消息堆积能力
    9、较少的依赖

3.2. 架构示例图

1、Disk Flush(磁盘刷新/同步 *** 作):就是将内存的数据落地,存储在磁盘中。RocketMQ提供了以下两种模式:
SYNC_FLUSH(同步刷盘):生产者发送的每一条消息都在保存到磁盘成功后才返回告诉生产者成功。这种方式不会存在消息丢失的问题,但是有很大的磁盘IO开销,性能有一定影响。
ASYNC_FLUSH(异步刷盘):生产者发送的每一条消息并不是立即保存到磁盘,而是暂时缓存起来,然后就返回生产者成功。随后再异步的将缓存数据保存到磁盘,有两种情况:1是定期将缓存中更新的数据进行刷盘,2是当缓存中更新的数据条数达到某一设定值后进行刷盘。这种方式会存在消息丢失(在还未来得及同步到磁盘的时候宕机),但是性能很好。默认是这种模式。
2、Broker Replication(Broker间数据同步/复制):集群环境下需要部署多个Broker,Broker分为两种角色:一种是master,即可以写也可以读,其brokerId=0,只能有一个;另外一种是slave,只允许读,其brokerId为非0。一个master与多个slave通过指定相同的brokerName被归为一个broker set(broker集)。通常生产环境中,我们至少需要2个broker set。Broker Replication只的就是slave获取或者是复制master的数据。

Sync Broker:生产者发送的每一条消息都至少同步复制到一个slave后才返回告诉生产者成功,即“同步双写”。
Async Broker:生产者发送的每一条消息只要写入master就返回告诉生产者成功。然后再“异步复制”到slave。
推荐的几种Broker集群方式:(官网提供了下面几种集群方式的配置文件供参考,在$ROCKETMQ_HOME/target/apache-rocketmq-all/conf目录下)
2m-2s-sync:两主两从同步双写(两个master,两个slave,数据同步双写到master和slave)
2m-2s-async:两主两从异步复制(两个master,两个slave,master数据通过异步复制到slave)
2m-noslave:两主(只有两个master,没有slave)
注:
1、上述“2”只是说作为一个集群的最低配置数量,可以根据实际情况扩展。
2、所有的刷盘(Dish Flush) *** 作全部默认为:ASYNC_FLUSH(异步刷盘)。
Name Server集群:Name Server集群比较简单,只要部署多个实例就行了,多个实例间不需要进行数据共享,只要保证一个实例存活就可以正常运转。

3.3. 三种Broker集群的优缺点
三种集群方式的优缺点(主要区别在于主从复制方式):
1、多Master模式(2m-noslave)
一个集群无Slave,全是Master,例如2个Master或者3个Master
优点:
配置简单,单个Master宕机或重启维护对应用无影响,在磁盘配置为RAID10时,即使机器宕机不可恢复情况下,由于RAID10磁盘非常可靠,消息也不会丢(异步刷盘丢失少量消息,同步刷盘一条不丢)。性能最高。
缺点:
单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅,消息实时性会受到受到影响。

2、多Master多Slave模式,异步复制(2m-2s-async)
每个Master配置一个Slave,有多对Master-Slave,HA采用异步复制方式,主备有短暂消息延迟,毫秒级。
优点:
即使磁盘损坏,消息丢失的非常少,且消息实时性不会受影响,因为Master宕机后,消费者仍然可以从Slave消费,此过程对应用透明。不需要人工干预。性能同多Master模式几乎一样。
缺点:
Master宕机,磁盘损坏情况,会丢失少量消息。

3、多Master多Slave模式,同步双写(2m-noslave)
每个Master配置一个Slave,有多对Master-Slave,HA采用同步双写方式,主备都写成功,向应用返回成功。
优点:
数据与服务都无单点,Master宕机情况下,消息无延迟,服务可用性与数据可用性都非常高
缺点:
性能比异步复制模式略低,大约低10%左右,发送单个消息的RT会略高。目前主宕机后,备机不能自动切换为主机,后续会支持自动切换功能。

  1. RocketMQ安装配置

4.1. 初始化节点1(10.22.194.18)配置

4.1.1. broker-a-m.properties

vi /home/rocketmq/conf/broker-a-m.properties

brokerClusterName=post
brokerName=broker-a
namesrvAddr=10.22.194.18:9876;10.22.194.77:9876
brokerId=0
listenPort=10911
brokerIP1=10.22.194.18
deleteWhen=04
fileReservedTime=72
brokerRole=ASYNC_MASTER
storePathRootDir=/home/rocketmq/rootdir-a-m
storePathCommitLog=/home/rocketmq/commitlog-a-m
defaultTopicQueueNums=4
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
flushDiskType=ASYNC_FLUSH
4.1.2. broker-c-s.properties

vi /home/rocketmq/conf/broker-c-s.properties

brokerClusterName=post
brokerName=broker-c
namesrvAddr=10.22.194.18:9876;10.22.194.77:9876
brokerId=1
listenPort=10920
brokerIP1=10.22.194.18
deleteWhen=04
fileReservedTime=72
brokerRole=SLAVE
storePathRootDir=/home/rocketmq/rootdir-c-s
storePathCommitLog=/home/rocketmq/commitlog-c-s
defaultTopicQueueNums=4
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
flushDiskType=ASYNC_FLUSH

4.2. 初始化节点2(10.22.194.77)配置

4.2.1. broker-a-s.properties

vi /home/rocketmq/conf/broker-c-s.properties

brokerClusterName=post
brokerName=broker-a
namesrvAddr=10.22.194.18:9876;10.22.194.77:9876
brokerId=1
listenPort=10920
deleteWhen=04
brokerIP1=10.22.194.77
fileReservedTime=72
brokerRole=SLAVE
storePathRootDir=/home/rocketmq/rootdir-a-s
storePathCommitLog=/home/rocketmq/commitlog-a-s
defaultTopicQueueNums=4
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
flushDiskType=ASYNC_FLUSH
4.2.2. broker-b-m.properties

vi /home/rocketmq/conf/broker-b-m.properties

brokerClusterName=post
brokerName=broker-b
namesrvAddr=10.22.194.18:9876;10.22.194.77:9876
brokerId=0
listenPort=10911
brokerIP1=10.22.194.77
deleteWhen=04
fileReservedTime=72
brokerRole=ASYNC_MASTER
storePathRootDir=/home/rocketmq/rootdir-b-m
storePathCommitLog=/home/rocketmq/commitlog-b-m
defaultTopicQueueNums=4
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
flushDiskType=ASYNC_FLUSH

4.3. 初始化节点3(10.22.194.78)配置

4.3.1. broker-b-s.properties

vi /home/rocketmq/conf/broker-b-s.properties

brokerClusterName=post
brokerName=broker-b
namesrvAddr=10.22.194.18:9876;10.22.194.77:9876
brokerId=1
listenPort=10920
brokerIP1=10.22.194.78
deleteWhen=04
fileReservedTime=72
brokerRole=SLAVE
storePathRootDir=/home/rocketmq/rootdir-b-s
storePathCommitLog=/home/rocketmq/commitlog-b-s
defaultTopicQueueNums=4
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
flushDiskType=ASYNC_FLUSH

4.3.2. broker-c-m.properties

vi /home/rocketmq/conf/broker-c-m.properties

brokerClusterName=post
brokerName=broker-c
namesrvAddr=10.22.194.18:9876;10.22.194.77:9876
brokerId=0
listenPort=10911
brokerIP1=10.22.194.78
deleteWhen=04
fileReservedTime=72
brokerRole=ASYNC_MASTER
storePathRootDir=/home/rocketmq/rootdir-c-m
storePathCommitLog=/home/rocketmq/commitlog-c-m
defaultTopicQueueNums=4
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
flushDiskType=ASYNC_FLUSH
启动NameServer
1、创建日志文件夹

mkdir -p /home/rocketmq/logs

2、分别启动节点1和节点2

nohup sh /home/rocketmq/bin/mqnamesrv >/home/rocketmq/logs/mqnamesrv.log 2>&1 &

4.4. 查看jps信息
在节点1和节点2上分别输入jps查看一下jvm的主要的几个进程,看是否启动正常

节点1:

jps

3336 jar
3482 NamesrvStartup
3836 Jps
3260 jar

节点2:

jps

11384 NamesrvStartup
11402 Jps

4.5. 启动Broker-a(master在节点1,slave在节点2)

broker-a分为Master和slave,分别位于节点1和节点2上,需要分别启动。
注意:需要根据启动角色,为broker指定一个配置文件
在执行下面的命令前,先修改文件路径:{ROCKET_HOME}/bin/runbroker.sh中的JVM参数配置,如若不改,将会因为内存不够启动不了broker.

cp runbroker.sh runbroker.sh_bak

1、设置内存大小
修改前:
JAVA_OPT=" J A V A O P T − s e r v e r − X m s 8 g − X m x 8 g − X m n 4 g " 修 改 后 : J A V A O P T = " {JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g" 修改后: JAVA_OPT=" JAVAO​PT−server−Xms8g−Xmx8g−Xmn4g"修改后:JAVAO​PT="{JAVA_OPT} -server -Xms256m -Xmx512m -Xmn512m -XX:PermSize=256m -XX:MaxPermSize=640m"

broker-b broker-c 同样处理

4.5.1. 启动broker-a的master-节点1(10.22.194.18)

nohup sh /home/rocketmq/bin/mqbroker -c /home/rocketmq/conf/broker-a-m.properties autoCreateTopicEnable=true >/home/gcti/logs/broker-a-m.log 2>&1 &

4.5.2. 启动broker-a的slave-节点2(10.22.194.77)

nohup sh /home/rocketmq/bin/mqbroker -c /home/rocketmq/conf/broker-a-s.properties autoCreateTopicEnable=true >/home/gcti/logs/broker-a-s.log 2>&1 &

4.5.3. 验证broker-a

sh /home/rocketmq/bin/mqadmin clusterList -n 10.22.194.18:9876

4.6. 启动Broker-b(master在节点2,slave在节点3)

4.6.1. 启动broker-b的master-节点2(10.22.194.77)
#nohup sh /home/rocketmq/bin/mqbroker -c /home/rocketmq/conf/broker-b-m.properties autoCreateTopicEnable=true >/home/gcti/logs/broker-b-m.log 2>&1 &

4.6.2. 启动broker-b的slave-节点3(10.22.194.78)
#nohup sh /home/rocketmq/bin/mqbroker -c /home/rocketmq/conf/broker-b-s.properties autoCreateTopicEnable=true >/home/gcti/logs/broker-b-s.log 2>&1 &

4.6.3. 验证broker-b

sh /home/rocketmq/bin/mqadmin clusterList -n 10.22.194.77:9876

4.7. 启动Broker-c(master在节点3,slave在节点1)

4.7.1. 启动broker-c的master-节点3(10.22.194.78)

nohup sh /home/rocketmq/bin/mqbroker -c /home/rocketmq/conf/broker-c-m.properties autoCreateTopicEnable=true >/home/gcti/logs/broker-c-m.log 2>&1 &

4.7.2. 启动broker-c的slave-节点1(10.22.194.18)

#nohup sh /home/rocketmq/bin/mqbroker -c /home/rocketmq/conf/broker-c-s.properties autoCreateTopicEnable=true >/home/gcti/logs/broker-c-s.log 2>&1 &
4.7.3. 验证broker-c

4.8. 安装console监控工具

4.8.1. 编译
下载源码后
打开application.properties按照自己需求进行配置。
例如:
rocketmq.config.namesrvAddr=namesrv服务地址(ip1:port;ip2:port)

在文件根目录执行命令:
mvn clean package -Dmaven.test.skip=true
然后在target目录下找到文件rocketmq-console-ng-1.0.0.jar
4.8.2. 部署

部署在10.22.194.18
运行命令如

nohup java -jar rocketmq-console-ng-1.0.0.jar --server.port=12581 >/dev/null 2>&1 &

打开http://10.22.194.18:12581

  1. 附录

5.1.1. 优化内存
MQ:4G ,broker: 1 G

vi /home/rocketmq/bin/runserver.sh

JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:metaspaceSize=128m -XX:MaxmetaspaceSize=320m"

vi /home/rocketmq/bin/mqbroker vi /home/rocketmq/bin/run_broker.sh

5.1.2. broker配置详解

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5597506.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存