64位操作系统,推荐 Linux/Unix/macOS
64位 JDK 1.8+
准备4台服务器两台master两台slave,如果服务器紧凑,则至少需要两台服务器相互master-slave
IP |
HOSTS |
172.*******.120 |
rocketmq-nameserver1 rocketmq-master1 rocketmq-master-salve2 |
172.*******.142 |
rocketmq-nameserver2 rocketmq-master2 rocketmq-master-salve1 |
配置hosts,上传RocketMQ包并解压(https://rocketmq.apache.org/zh/download/#rocketmq)选择Binary 下载,上传至/data/public/rocketmq
生产高可用双主双从采用 SYNC_MASTER 同步双写,SYNC_FLUSH 同步刷盘进行
172.******.120机器
修改vim /data/public/rocketmq/conf/2m-2s-sync/broker-a.properties
#所属集群名字 brokerClusterName=test-rocketmq-cluster #broker 名字,注意此处不同的配置文件填写的不一样 brokerName=broker-a #0 表示 Master,>0 表示 Slave brokerId=0 #nameServer 地址,分号分割 namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876 #安装可视化界面使用,需要是IP,不能是host #设置broker节点所在服务器的ip地址(**这个非常重要,主从模式下,从节点会根据主节点的brokerIP2来同步数据,#如果不配置,主从无法同步,brokerIP1设置为自己外网能访问的ip,服务器双网卡情况下必须配置,比如阿里云这$种,#主节点需要配置ip1和ip2,从节点只需要配置ip1即可) brokerIP1=172.******.120 brokerIP2=172.******.120 #在发送消息时,自动创建服务器不存在的 topic,默认创建的队列数 defaultTopicQueueNums=4 #是否允许 Broker 自动创建 Topic,建议线下开启,线上关闭 #进行发消息时,必须要指定topic,对于topic的设置有一个开关autoCreateTopicEnable,一#般在开发测试环境中会使用默认设置autoCreateTopicEnable = true,但是这样就会导致#topic的设置不容易规范管理,没有统一的审核等等,所以在正式环境中会在Broker启动时#设置参数autoCreateTopicEnable = false。这样当需要增加topic时就需要在web管理界面上#添加即可。 autoCreateTopicEnable=false #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭 autoCreateSubscriptionGroup=fasle #Broker 对外服务的监听端口 listenPort=10911 #删除文件时间点,默认凌晨 4 点 deleteWhen=04 #文件保留时间,默认 48 小时 fileReservedTime=120 #commitLog 每个文件的大小默认 1G mapedFileSizeCommitLog=1073741824 #ConsumeQueue 每个文件默认存 30W 条,根据业务情况调整 mapedFileSizeConsumeQueue=300000 #destroyMapedFileIntervalForcibly=120000 #redeleteHangedFileInterval=120000 #检测物理文件磁盘空间 diskMaxUsedSpaceRatio=88 #存储路径 storePathRootDir=/data/public/rocketmq/store #commitLog 存储路径 storePathCommitLog=/data/public/rocketmq/store/commitlog #消费队列存储路径存储路径 storePathConsumeQueue=/data/public/rocketmq/store/consumequeue #消息索引存储路径 storePathIndex=/data/public/rocketmq/store/index #checkpoint 文件存储路径 storeCheckpoint=/data/public/rocketmq/store/checkpoint #abort 文件存储路径 abortFile=/data/public/rocketmq/store/abort #限制的消息大小 maxMessageSize=65536 #flushCommitLogLeastPages=4 #flushConsumeQueueLeastPages=2 #flushCommitLogThoroughInterval=10000 #flushConsumeQueueThoroughInterval=60000 #Broker 的角色 #- ASYNC_MASTER 异步复制 Master #- SYNC_MASTER 同步双写 Master #- SLAVE brokerRole=SYNC_MASTER #刷盘方式 #- ASYNC_FLUSH 异步刷盘 #- SYNC_FLUSH 同步刷盘 flushDiskType=SYNC_FLUSH #checkTransactionMessageEnable=false #发消息线程池数量 #sendMessageThreadPoolNums=128 #拉消息线程池数量 #pullMessageThreadPoolNums=128 |
修改vim /data/public/rocketmq/conf/2m-2s-sync/broker-b-s.properties
#所属集群名字 brokerClusterName=test-rocketmq-cluster #broker 名字,注意此处不同的配置文件填写的不一样 brokerName=broker-b #0 表示 Master,>0 表示 Slave brokerId=1 #nameServer 地址,分号分割 namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876 #安装可视化界面使用,需要是IP,不能是host #设置broker节点所在服务器的ip地址(**这个非常重要,主从模式下,从节点会根据主节点的brokerIP2来同步数据,#如果不配置,主从无法同步,brokerIP1设置为自己外网能访问的ip,服务器双网卡情况下必须配置,比如阿里云这$种,#主节点需要配置ip1和ip2,从节点只需要配置ip1即可) brokerIP1=172.******.120 #在发送消息时,自动创建服务器不存在的 topic,默认创建的队列数 defaultTopicQueueNums=4 #是否允许 Broker 自动创建 Topic,建议线下开启,线上关闭 #进行发消息时,必须要指定topic,对于topic的设置有一个开关autoCreateTopicEnable,一#般在开发测试环境中会使用默认设置autoCreateTopicEnable = true,但是这样就会导致#topic的设置不容易规范管理,没有统一的审核等等,所以在正式环境中会在Broker启动时#设置参数autoCreateTopicEnable = false。这样当需要增加topic时就需要在web管理界面上#添加即可。 autoCreateTopicEnable=fasle #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭 autoCreateSubscriptionGroup=fasle #Broker 对外服务的监听端口,如果从节点是单独服务器,则可以使用默认端口19011 listenPort=10922 #删除文件时间点,默认凌晨 4 点 deleteWhen=04 #文件保留时间,默认 48 小时 fileReservedTime=120 #commitLog 每个文件的大小默认 1G mapedFileSizeCommitLog=1073741824 #ConsumeQueue 每个文件默认存 30W 条,根据业务情况调整 mapedFileSizeConsumeQueue=300000 #destroyMapedFileIntervalForcibly=120000 #redeleteHangedFileInterval=120000 #检测物理文件磁盘空间 diskMaxUsedSpaceRatio=88 #存储路径 storePathRootDir=/data/public/rocketmq/slave/store #commitLog 存储路径 storePathCommitLog=/data/public/rocketmq/slave/store/commitlog #消费队列存储路径存储路径 storePathConsumeQueue=/data/public/rocketmq/slave/store/consumequeue #消息索引存储路径 storePathIndex=/data/public/rocketmq/slave/store/index #checkpoint 文件存储路径 storeCheckpoint=/data/public/rocketmq/slave/store/checkpoint #abort 文件存储路径 abortFile=/data/public/rocketmq/slave/store/abort #限制的消息大小 maxMessageSize=65536 #flushCommitLogLeastPages=4 #flushConsumeQueueLeastPages=2 #flushCommitLogThoroughInterval=10000 #flushConsumeQueueThoroughInterval=60000 #Broker 的角色 #- ASYNC_MASTER 异步复制 Master #- SYNC_MASTER 同步双写 Master #- SLAVE brokerRole=SLAVE #刷盘方式 #- ASYNC_FLUSH 异步刷盘 #- SYNC_FLUSH 同步刷盘 flushDiskType=SYNC_FLUSH #checkTransactionMessageEnable=false #发消息线程池数量 #sendMessageThreadPoolNums=128 #拉消息线程池数量 #pullMessageThreadPoolNums=128 |
172.******.142机器
修改vim /data/public/rocketmq/conf/2m-2s-sync/broker-b.properties
#所属集群名字 brokerClusterName=test-rocketmq-cluster #broker 名字,注意此处不同的配置文件填写的不一样 brokerName=broker-b #0 表示 Master,>0 表示 Slave brokerId=0 #nameServer 地址,分号分割 namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876 #安装可视化界面使用,需要是IP,不能是host #设置broker节点所在服务器的ip地址(**这个非常重要,主从模式下,从节点会根据主节点的brokerIP2来同步数据,#如果不配置,主从无法同步,brokerIP1设置为自己外网能访问的ip,服务器双网卡情况下必须配置,比如阿里云这$种,#主节点需要配置ip1和ip2,从节点只需要配置ip1即可) brokerIP1=172.******.142 brokerIP2=172.******.142 #在发送消息时,自动创建服务器不存在的 topic,默认创建的队列数 defaultTopicQueueNums=4 #是否允许 Broker 自动创建 Topic,建议线下开启,线上关闭 #进行发消息时,必须要指定topic,对于topic的设置有一个开关autoCreateTopicEnable,一#般在开发测试环境中会使用默认设置autoCreateTopicEnable = true,但是这样就会导致#topic的设置不容易规范管理,没有统一的审核等等,所以在正式环境中会在Broker启动时#设置参数autoCreateTopicEnable = false。这样当需要增加topic时就需要在web管理界面上#添加即可。 autoCreateTopicEnable=false #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭 autoCreateSubscriptionGroup=false #Broker 对外服务的监听端口 listenPort=10911 #删除文件时间点,默认凌晨 4 点 deleteWhen=04 #文件保留时间,默认 48 小时 fileReservedTime=120 #commitLog 每个文件的大小默认 1G mapedFileSizeCommitLog=1073741824 #ConsumeQueue 每个文件默认存 30W 条,根据业务情况调整 mapedFileSizeConsumeQueue=300000 #destroyMapedFileIntervalForcibly=120000 #redeleteHangedFileInterval=120000 #检测物理文件磁盘空间 diskMaxUsedSpaceRatio=88 #存储路径 storePathRootDir=/data/public/rocketmq/store #commitLog 存储路径 storePathCommitLog=/data/public/rocketmq/store/commitlog #消费队列存储路径存储路径 storePathConsumeQueue=/data/public/rocketmq/store/consumequeue #消息索引存储路径 storePathIndex=/data/public/rocketmq/store/index #checkpoint 文件存储路径 storeCheckpoint=/data/public/rocketmq/store/checkpoint #abort 文件存储路径 abortFile=/data/public/rocketmq/store/abort #限制的消息大小 maxMessageSize=65536 #flushCommitLogLeastPages=4 #flushConsumeQueueLeastPages=2 #flushCommitLogThoroughInterval=10000 #flushConsumeQueueThoroughInterval=60000 #Broker 的角色 #- ASYNC_MASTER 异步复制 Master #- SYNC_MASTER 同步双写 Master #- SLAVE brokerRole=SYNC_MASTER #刷盘方式 #- ASYNC_FLUSH 异步刷盘 #- SYNC_FLUSH 同步刷盘 flushDiskType=SYNC_FLUSH #checkTransactionMessageEnable=false #发消息线程池数量 #sendMessageThreadPoolNums=128 #拉消息线程池数量 #pullMessageThreadPoolNums=128 |
修改vim /data/public/rocketmq/conf/2m-2s-sync/broker-a-s.properties
#所属集群名字 brokerClusterName=test-rocketmq-cluster #broker 名字,注意此处不同的配置文件填写的不一样 brokerName=broker-a #0 表示 Master,>0 表示 Slave brokerId=1 #nameServer 地址,分号分割 namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876 #安装可视化界面使用,需要是IP,不能是host #设置broker节点所在服务器的ip地址(**这个非常重要,主从模式下,从节点会根据主节点的brokerIP2来同步数据,#如果不配置,主从无法同步,brokerIP1设置为自己外网能访问的ip,服务器双网卡情况下必须配置,比如阿里云这$种,#主节点需要配置ip1和ip2,从节点只需要配置ip1即可) brokerIP1=172.******.142 #在发送消息时,自动创建服务器不存在的 topic,默认创建的队列数 defaultTopicQueueNums=4 #是否允许 Broker 自动创建 Topic,建议线下开启,线上关闭 #进行发消息时,必须要指定topic,对于topic的设置有一个开关autoCreateTopicEnable,一#般在开发测试环境中会使用默认设置autoCreateTopicEnable = true,但是这样就会导致#topic的设置不容易规范管理,没有统一的审核。所以在正式环境中会在Broker启动时#设置参数autoCreateTopicEnable = false。这样当需要增加topic时就需要在web管理界面上#添加即可。 autoCreateTopicEnable=false #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭 autoCreateSubscriptionGroup=false #Broker 对外服务的监听端口,如果从节点是单独服务器,则可以使用默认端口19011 listenPort=10922 #删除文件时间点,默认凌晨 4 点 deleteWhen=04 #文件保留时间,默认 48 小时 fileReservedTime=120 #commitLog 每个文件的大小默认 1G mapedFileSizeCommitLog=1073741824 #ConsumeQueue 每个文件默认存 30W 条,根据业务情况调整 mapedFileSizeConsumeQueue=300000 #destroyMapedFileIntervalForcibly=120000 #redeleteHangedFileInterval=120000 #检测物理文件磁盘空间 diskMaxUsedSpaceRatio=88 #存储路径 storePathRootDir=/data/public/rocketmq/slave/store #commitLog 存储路径 storePathCommitLog=/data/public/rocketmq/slave/store/commitlog #消费队列存储路径存储路径 storePathConsumeQueue=/data/public/rocketmq/slave/store/consumequeue #消息索引存储路径 storePathIndex=/data/public/rocketmq/slave/store/index #checkpoint 文件存储路径 storeCheckpoint=/data/public/rocketmq/slave/store/checkpoint #abort 文件存储路径 abortFile=/data/public/rocketmq/slave/store/abort #限制的消息大小 maxMessageSize=65536 #flushCommitLogLeastPages=4 #flushConsumeQueueLeastPages=2 #flushCommitLogThoroughInterval=10000 #flushConsumeQueueThoroughInterval=60000 #Broker 的角色 #- ASYNC_MASTER 异步复制 Master #- SYNC_MASTER 同步双写 Master #- SLAVE brokerRole=SLAVE #刷盘方式 #- ASYNC_FLUSH 异步刷盘 #- SYNC_FLUSH 同步刷盘 flushDiskType=SYNC_FLUSH #checkTransactionMessageEnable=false #发消息线程池数量 #sendMessageThreadPoolNums=128 #拉消息线程池数量 #pullMessageThreadPoolNums=128 |
创建目录(两台机器都要创建)
#创建主节点目录 mkdir /data/public/rocketmq/store:实际数据存储的位置 mkdir /data/public/rocketmq/store/commitlog: mkdir /data/public/rocketmq/store/consumequeue:类似于数据库索引的文件结构, mkdir /data/public/rocketmq/store/index:用于快速查询索引 #创建从节点目录 mkdir /data/public/rocketmq/slave mkdir /data/public/rocketmq/slave/store:实际数据存储的位置 mkdir /data/public/rocketmq/slave/store/commitlog: mkdir /data/public/rocketmq/slave/store/consumequeue:类似于数据库索引的文件结构, mkdir /data/public/rocketmq/slave/store/index:用于快速查询索引 |
修改启动参数脚本
组件建议内存至少8g,但是我们在开发环境就写成1g,小于1g可能起不来
vim /data/public/rocketmq/bin/runbroker.sh JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m"
vim /data/public/rocketmq/bin/runserver.sh JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g -XX:PermSize=128m -XX:MaxPermSize=320m"
|
启动
顺序是先启动nameserver,再启动broker。关闭则是先关闭broker在关闭nameserver。生产环境切勿删除store文件夹,生产环境禁止使用kill -9 命令删除broker进程,使用bin/下的mqshutdown命令;
172.******.120机器和172.*******.142机器
启动nameserver
# 首先启动Name Server nohup sh mqnamesrv & ### 验证Name Server 是否启动成功 tail -f /root/logs/rocketmqlogs/namesrv.log The Name Server boot success. serializeType=JSON ##关闭 sh mqshutdown namesrv
|
启动broker
172.******.120主节点正常启动
备注:nohup sh mqbroker -n 172.31.241.120:9876 -c /data/public/rocketmq/conf/2m-2s-sync/broker-a.properties &
##启动broker nohup sh mqbroker -c /data/public/rocketmq/conf/2m-2s-sync/broker-a.properties & ##查看启动是否成功 tail -5f /root/logs/rocketmqlogs/broker.log ##关闭sh mqshutdown broker |
172.******.142的主节点启动
##启动broker nohup sh mqbroker -c /data/public/rocketmq/conf/2m-2s-sync/broker-b.properties & ##查看启动是否成功 tail -5f /root/logs/rocketmqlogs/broker.log ##关闭sh mqshutdown broker
|
172.******.120从节点
##启动broker nohup sh mqbroker -c /data/public/rocketmq/conf/2m-2s-sync/broker-b-s.properties & ##查看启动是否成功 tail -5f /root/logs/rocketmqlogs/broker.log ##关闭sh mqshutdown broker
|
172.******.142从节点
##启动broker nohup sh mqbroker -c /data/public/rocketmq/conf/2m-2s-sync/broker-a-s.properties & ##查看启动是否成功 tail -5f /root/logs/rocketmqlogs/broker.log ##关闭sh mqshutdown broker
|
源码包下载地址:
下载完成后进行修改配置并打包部署即可:
仅需要修改这个配置即可
rocketmq.config.namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
注意users.properties中配置的是用户名密码(如果要启用可视化界面的登录,则需要打开application.properties文件中rocketmq.config.loginRequired=true即可)
规则:用户角色=用户名,密码
例如admin角色的用户名是admin,密码是1
则配置为admin=admin,1
访问界面:http://172.******.120:8080即可
注意:
如果发现依旧不是双主双从,则排查防火墙端口是否开放。一定要开启10911,10909,10912三个端口,其中10911为broker通信端口,10909是一个虚拟ip(vip)端口根据源码显示有一个源端口号-2的操作,10912为主从同步通信端口,单节点可以不开启。集群模式下不开启10912,从节点同步不了主节点数据。
#查看firewall服务状态 systemctl status firewalld 出现Active: active (running)切高亮显示则表示是启动状态。
出现 Active: inactive (dead)灰色表示停止,看单词也行。
#查看firewall的状态 firewall-cmd --state #关闭防火墙 systemctl stop firewalld.service #开启防火墙 systemctl start firewalld #查询端口是否开放 firewall-cmd --query-port=10911/tcp #开放指定端口 firewall-cmd --permanent --zone=public --add-port=9876/tcp firewall-cmd --permanent --zone=public --add-port=10911/tcp firewall-cmd --permanent --zone=public --add-port=10909/tcp firewall-cmd --permanent --zone=public --add-port=10912/tcp firewall-cmd --permanent --zone=public --add-port=10922/tcp # 立即生效 firewall-cmd --reload # 移除端口 firewall-cmd --permanent --remove-port=9876/tcp firewall-cmd --permanent --remove-port=10911/tcp firewall-cmd --permanent --remove-port=10909/tcp firewall-cmd --permanent --remove-port=10912/tcp firewall-cmd --permanent --remove-port=10922/tcp |