单Master方式html
风险比较大, 一旦Broker重启或者宕机, 将致使整个环境不可用, 不建议线上使用.
多Master模式linux
一个集群中没有slave, 全是master, 例如2个master或者3个master.
优势:配置简单, 性能最好,单个Master宕机或重启对应用无影响, 磁盘配置为RAID10时, 即便机器宕机不可恢复, 因为RAID10磁盘很是可靠, 消息也不会丢(异步刷盘丢失少许信息, 同步刷盘一条不丢)
缺点 : 单台机器宕机期间, 这个机器上未被消费消息在机器恢复以前不可订阅, 消息实时性受到影响 .
多Master多Slave模式, 异步复制git
每一个 Master 配置一个 Slave,有多对Master-Slave,采用异步复制方式,主备有短暂消息延迟,毫秒级。 优势:即便磁盘损坏,消息丢失的很是少,且消息实时性不会受影响,由于Master 宕机后,消费者仍然能够从 Slave消费,此过程对应用透明。不须要人工干预。性能同Master 模式几乎同样。 缺点:Master 宕机,磁盘损坏状况,会丢失少许消息。
多Master多Slave模式, 同步双写github
每一个 Master 配置一个 Slave,有多对Master-Slave,采用同步双写方式,主备都写成功,向应用返回成功。 优势:数据与服务都无单点,Master宕机状况下,消息无延迟,服务可用性与数据可用性都很是高 缺点:性能比异步复制模式略低,大约低 10%左右,发送单个消息的 RT会略高。目前主宕机后,备机不能自动切换为主机,后续会支持自动切换功能。
1.集群角色及对应IP、主机环境apache
2.相关软件版本vim
3.部署前环境准备:服务器
1.关闭防火墙,关闭selinux(生产环境按需关闭或打开) 2.同步服务器时间,选择公网ntpd服务器或者自建ntpd服务器 [root@es1 ~]# crontab -l #为了方便直接使用公网服务器 #update time */5 * * * * /usr/bin/rdate -s time-b.nist.gov &>/dev/null 3.安装配置Java环境 可参考此文章Java环境安装部分https://www.cnblogs.com/panwenbin-logs/p/8138787.html
4.配置hosts(全部服务器) 172.16.150.131 rocketmq_master_01 172.16.150.132 rocketmq_master_02 172.16.150.133 rocketmq_master_03 172.16.150.134 rocketmq_slave_01 172.16.150.135 rocketmq_slave_02 172.16.150.136 rocketmq_slave_03
1.解压RocketMQ到工做目录,并建立数据及日志目录(若是没有特别指定,如下操做均为在集群中全部机器上执行)架构
[root@rocketmq_master_01 ~]# tar xf alibaba-rocketmq-3.2.2.tar.gz -C /opt #解压至/opt目录 [root@rocketmq_master_01 ~]# cd /opt && ln -sv alibaba-rocketmq-3.2.2 alibaba-rocketmq [root@rocketmq_master_01 ~]# mkdir -p /var/alibaba-rocketmq/{commitlog,consumequeue,index,logs,namesrv} #数据及日志目录 [root@rocketmq_master_01 ~]# tree /var/alibaba-rocketmq/ [root@rocketmq_master_01 ~]# ll /opt/
2.目录解析(根据部署的架构进入对应的目录)异步
[root@rocketmq_master_01 ~]# cd /opt/alibaba-rocketmq/conf/ [root@rocketmq-master1 conf]# ll 总用量 36 drwxr-xr-x 2 root root 118 2019-03-28 17:08 2m-2s-async #多主多从异步刷新参考配置文件 drwxr-xr-x 2 root root 118 2019-03-28 17:08 2m-2s-sync #多主多从同步刷新参考配置文件 drwxr-xr-x 2 root root 118 2019-06-04 10:10 2m-noslave #多master参考配置文件 .... [root@rocketmq_master_01 conf]# mkdir 3m-3s-sync #因为咱们的架构为3主3从,因此新建一个目录 [root@rocketmq_master_01 conf]# cd 3m-3s-sync/
3.建立配置文件async
建立、编辑集群broker配置文件
#所属集群名字 brokerClusterName=qgg_rocketmq-cluster #broker名字,注意此处不一样的配置文件填写的不同,a.properties,就写broker-a,b的就填写b brokerName=broker-a #0 表示 Master,>0 表示 Slave brokerId=0 #nameServer地址,分号分割 namesrvAddr=rocketmq_master_01:9876;rocketmq_master_02:9876;rocketmq_master_03:9876 #在发送消息时,自动建立服务器不存在的topic,默认建立的队列数 defaultTopicQueueNums=4 #是否容许 Broker 自动建立Topic,建议线下开启,线上关闭 autoCreateTopicEnable=true #是否容许 Broker 自动建立订阅组,建议线下开启,线上关闭 autoCreateSubscriptionGroup=true #Broker 对外服务的监听端口 listenPort=10911 #删除文件时间点,默认凌晨 4点 deleteWhen=04 #文件保留时间,默认 48 小时 fileReservedTime=120 #commitLog每一个文件的大小默认1G mapedFileSizeCommitLog=1073741824 #ConsumeQueue每一个文件默认存30W条,根据业务状况调整 mapedFileSizeConsumeQueue=300000 #检测物理文件磁盘空间 diskMaxUsedSpaceRatio=88 #存储路径 storePathRootDir=/var/alibaba-rocketmq/ #commitLog 存储路径 storePathCommitLog=/var/alibaba-rocketmq/commitlog #消费队列存储路径存储路径 storePathConsumeQueue=/var/alibaba-rocketmq/consumequeue #消息索引存储路径 storePathIndex=/var/alibaba-rocketmq/index #checkpoint 文件存储路径 storeCheckpoint=/var/alibaba-rocketmq/checkpoint #abort 文件存储路径 abortFile=/var/alibaba-rocketmq/abort #限制的消息大小 #maxMessageSize=65536 #刷CommitLog,至少刷几个PAGE #flushCommitLogLeastPages=4 #刷ConsumeQueue,至少刷几个PAGE #flushConsumeQueueLeastPages=2 #刷CommitLog,完全刷盘间隔时间 #flushCommitLogThoroughInterval=10000 #刷ConsumeQueue,完全刷盘间隔时间 #flushConsumeQueueThoroughInterval=60000 #Broker 的角色 #- ASYNC_MASTER 异步复制Master #- SYNC_MASTER 同步双写Master #- SLAVE brokerRole=SYNC_MASTER #刷盘方式 #- ASYNC_FLUSH 异步刷盘 #- SYNC_FLUSH 同步刷盘 flushDiskType=SYNC_FLUSH #检查事务消息,开源版本4.3以前没有事务功能 checkTransactionMessageEnable=false #发消息线程池数量 #sendMessageThreadPoolNums=128 #拉消息线程池数量 #pullMessageThreadPoolNums=128 #绑定IP地址,若是有多个网卡接口须要配置,不然报错 brokerIP1=172.16.150.131 #Netty服务工做线程数量 serverWorkerThreads = 8 #Netty服务异步回调线程池线程数量 serverCallbackExecutorThreads = 2 #Netty Selector线程数量 serverSelectorThreads = 3 #控制单向的信号量 一次请求没有响应 serverOnewaySemaphoreValue = 256 #控制异步信号量 serverAsyncSemaphoreValue = 64 #服务空闲心跳检测时间间隔 单位秒 serverChannelMaxIdleTimeSeconds = 120 #Netty发送缓冲区大小 serverSocketSndBufSize = 65535 #Netty接受缓冲区大小 serverSocketRcvBufSize = 65535 #是否使用Netty内存池 serverPooledByteBufAllocatorEnable = true
#所属集群名字 brokerClusterName=qgg_rocketmq-cluster #broker名字,注意此处不一样的配置文件填写的不同,a.properties,就写broker-a,b的就填写b brokerName=broker-b #0 表示 Master,>0 表示 Slave brokerId=0 #nameServer地址,分号分割 namesrvAddr=rocketmq_master_01:9876;rocketmq_master_02:9876;rocketmq_master_03:9876 #在发送消息时,自动建立服务器不存在的topic,默认建立的队列数 defaultTopicQueueNums=4 #是否容许 Broker 自动建立Topic,建议线下开启,线上关闭 autoCreateTopicEnable=true #是否容许 Broker 自动建立订阅组,建议线下开启,线上关闭 autoCreateSubscriptionGroup=true #Broker 对外服务的监听端口 listenPort=10911 #删除文件时间点,默认凌晨 4点 deleteWhen=04 #文件保留时间,默认 48 小时 fileReservedTime=120 #commitLog每一个文件的大小默认1G mapedFileSizeCommitLog=1073741824 #ConsumeQueue每一个文件默认存30W条,根据业务状况调整 mapedFileSizeConsumeQueue=300000 #destroyMapedFileIntervalForcibly=120000 #redeleteHangedFileInterval=120000 #检测物理文件磁盘空间 diskMaxUsedSpaceRatio=88 #存储路径 storePathRootDir=/var/alibaba-rocketmq/ #commitLog 存储路径 storePathCommitLog=/var/alibaba-rocketmq/commitlog #消费队列存储路径存储路径 storePathConsumeQueue=/var/alibaba-rocketmq/consumequeue #消息索引存储路径 storePathIndex=/var/alibaba-rocketmq/index #checkpoint 文件存储路径 storeCheckpoint=/var/alibaba-rocketmq/checkpoint #abort 文件存储路径 abortFile=/var/alibaba-rocketmq/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 #绑定IP地址,若是有多个网卡接口须要配置,不然报错 brokerIP1=172.16.150.132 #Netty服务工做线程数量 serverWorkerThreads = 8 #Netty服务异步回调线程池线程数量 serverCallbackExecutorThreads = 2 #Netty Selector线程数量 serverSelectorThreads = 3 #控制单向的信号量 一次请求没有响应 serverOnewaySemaphoreValue = 256 #控制异步信号量 serverAsyncSemaphoreValue = 64 #服务空闲心跳检测时间间隔 单位秒 serverChannelMaxIdleTimeSeconds = 120 #Netty发送缓冲区大小 serverSocketSndBufSize = 65535 #Netty接受缓冲区大小 serverSocketRcvBufSize = 65535 #是否使用Netty内存池 serverPooledByteBufAllocatorEnable = true
#所属集群名字 brokerClusterName=qgg_rocketmq-cluster #broker名字,注意此处不一样的配置文件填写的不同,a.properties,就写broker-a,b的就填写b brokerName=broker-c #0 表示 Master,>0 表示 Slave brokerId=0 #nameServer地址,分号分割 namesrvAddr=rocketmq_master_01:9876;rocketmq_master_02:9876;rocketmq_master_03:9876 #在发送消息时,自动建立服务器不存在的topic,默认建立的队列数 defaultTopicQueueNums=4 #是否容许 Broker 自动建立Topic,建议线下开启,线上关闭 autoCreateTopicEnable=true #是否容许 Broker 自动建立订阅组,建议线下开启,线上关闭 autoCreateSubscriptionGroup=true #Broker 对外服务的监听端口 listenPort=10911 #删除文件时间点,默认凌晨 4点 deleteWhen=04 #文件保留时间,默认 48 小时 fileReservedTime=120 #commitLog每一个文件的大小默认1G mapedFileSizeCommitLog=1073741824 #ConsumeQueue每一个文件默认存30W条,根据业务状况调整 mapedFileSizeConsumeQueue=300000 #destroyMapedFileIntervalForcibly=120000 #redeleteHangedFileInterval=120000 #检测物理文件磁盘空间 diskMaxUsedSpaceRatio=88 #存储路径 storePathRootDir=/var/alibaba-rocketmq/ #commitLog 存储路径 storePathCommitLog=/var/alibaba-rocketmq/commitlog #消费队列存储路径存储路径 storePathConsumeQueue=/var/alibaba-rocketmq/consumequeue #消息索引存储路径 storePathIndex=/var/alibaba-rocketmq/index #checkpoint 文件存储路径 storeCheckpoint=/var/alibaba-rocketmq/checkpoint #abort 文件存储路径 abortFile=/var/alibaba-rocketmq/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 brokerIP1=172.16.150.133
#所属集群名字 brokerClusterName=qgg_rocketmq-cluster #broker名字,注意此处不一样的配置文件填写的不同,a.properties,就写broker-a,b的就填写b brokerName=broker-a #0 表示 Master,>0 表示 Slave brokerId=1 #nameServer地址,分号分割 namesrvAddr=rocketmq_master_01:9876;rocketmq_master_02:9876;rocketmq_master_03:9876 #在发送消息时,自动建立服务器不存在的topic,默认建立的队列数 defaultTopicQueueNums=4 #是否容许 Broker 自动建立Topic,建议线下开启,线上关闭 autoCreateTopicEnable=true #是否容许 Broker 自动建立订阅组,建议线下开启,线上关闭 autoCreateSubscriptionGroup=true #Broker 对外服务的监听端口 listenPort=10911 #删除文件时间点,默认凌晨 4点 deleteWhen=04 #文件保留时间,默认 48 小时 fileReservedTime=120 #commitLog每一个文件的大小默认1G mapedFileSizeCommitLog=1073741824 #ConsumeQueue每一个文件默认存30W条,根据业务状况调整 mapedFileSizeConsumeQueue=300000 #destroyMapedFileIntervalForcibly=120000 #redeleteHangedFileInterval=120000 #检测物理文件磁盘空间 diskMaxUsedSpaceRatio=88 #存储路径 storePathRootDir=/var/alibaba-rocketmq/ #commitLog 存储路径 storePathCommitLog=/var/alibaba-rocketmq/commitlog #消费队列存储路径存储路径 storePathConsumeQueue=/var/alibaba-rocketmq/consumequeue #消息索引存储路径 storePathIndex=/var/alibaba-rocketmq/index #checkpoint 文件存储路径 storeCheckpoint=/var/alibaba-rocketmq/checkpoint #abort 文件存储路径 abortFile=/var/alibaba-rocketmq/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 brokerIP1=172.16.150.134
#所属集群名字 brokerClusterName=qgg_rocketmq-cluster #broker名字,注意此处不一样的配置文件填写的不同,a.properties,就写broker-a,b的就填写b brokerName=broker-b #0 表示 Master,>0 表示 Slave brokerId=1 #nameServer地址,分号分割 namesrvAddr=rocketmq_master_01:9876;rocketmq_master_02:9876;rocketmq_master_03:9876 #在发送消息时,自动建立服务器不存在的topic,默认建立的队列数 defaultTopicQueueNums=4 #是否容许 Broker 自动建立Topic,建议线下开启,线上关闭 autoCreateTopicEnable=true #是否容许 Broker 自动建立订阅组,建议线下开启,线上关闭 autoCreateSubscriptionGroup=true #Broker 对外服务的监听端口 listenPort=10911 #删除文件时间点,默认凌晨 4点 deleteWhen=04 #文件保留时间,默认 48 小时 fileReservedTime=120 #commitLog每一个文件的大小默认1G mapedFileSizeCommitLog=1073741824 #ConsumeQueue每一个文件默认存30W条,根据业务状况调整 mapedFileSizeConsumeQueue=300000 #destroyMapedFileIntervalForcibly=120000 #redeleteHangedFileInterval=120000 #检测物理文件磁盘空间 diskMaxUsedSpaceRatio=88 #存储路径 storePathRootDir=/var/alibaba-rocketmq/ #commitLog 存储路径 storePathCommitLog=/var/alibaba-rocketmq/commitlog #消费队列存储路径存储路径 storePathConsumeQueue=/var/alibaba-rocketmq/consumequeue #消息索引存储路径 storePathIndex=/var/alibaba-rocketmq/index #checkpoint 文件存储路径 storeCheckpoint=/var/alibaba-rocketmq/checkpoint #abort 文件存储路径 abortFile=/var/alibaba-rocketmq/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 brokerIP1=172.16.150.135
#所属集群名字 brokerClusterName=qgg_rocketmq-cluster #broker名字,注意此处不一样的配置文件填写的不同,a.properties,就写broker-a,b的就填写b brokerName=broker-c #0 表示 Master,>0 表示 Slave brokerId=1 #nameServer地址,分号分割 namesrvAddr=rocketmq_master_01:9876;rocketmq_master_02:9876;rocketmq_master_03:9876 #在发送消息时,自动建立服务器不存在的topic,默认建立的队列数 defaultTopicQueueNums=4 #是否容许 Broker 自动建立Topic,建议线下开启,线上关闭 autoCreateTopicEnable=true #是否容许 Broker 自动建立订阅组,建议线下开启,线上关闭 autoCreateSubscriptionGroup=true #Broker 对外服务的监听端口 listenPort=10911 #删除文件时间点,默认凌晨 4点 deleteWhen=04 #文件保留时间,默认 48 小时 fileReservedTime=120 #commitLog每一个文件的大小默认1G mapedFileSizeCommitLog=1073741824 #ConsumeQueue每一个文件默认存30W条,根据业务状况调整 mapedFileSizeConsumeQueue=300000 #destroyMapedFileIntervalForcibly=120000 #redeleteHangedFileInterval=120000 #检测物理文件磁盘空间 diskMaxUsedSpaceRatio=88 #存储路径 storePathRootDir=/var/alibaba-rocketmq/ #commitLog 存储路径 storePathCommitLog=/var/alibaba-rocketmq/commitlog #消费队列存储路径存储路径 storePathConsumeQueue=/var/alibaba-rocketmq/consumequeue #消息索引存储路径 storePathIndex=/var/alibaba-rocketmq/index #checkpoint 文件存储路径 storeCheckpoint=/var/alibaba-rocketmq/checkpoint #abort 文件存储路径 abortFile=/var/alibaba-rocketmq/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 brokerIP1=172.16.150.136
以上配置文件须要设置不一样值的选项为:
brokerId #0 表示 Master,>0 表示 Slave brokerRole #Broker 的角色 #- ASYNC_MASTER 异步复制Master #- SYNC_MASTER 同步双写Master #- SLAVE brokerIP1 #本机提供服务的IP地址
建立、编辑集群nameserver配置文件
[root@rocketmq_master_01 conf]# cat namesrv.properties listenPort = 9876 serverWorkerThreads = 8 serverCallbackExecutorThreads = 2 serverSelectorThreads = 3 serverOnewaySemaphoreValue = 256 serverAsyncSemaphoreValue = 64 serverChannelMaxIdleTimeSeconds = 120 serverSocketSndBufSize = 65535 serverSocketRcvBufSize = 65535 serverPooledByteBufAllocatorEnable = true kvConfigPath=/var/alibaba-rocketmq/namesrv/
4.修改log及数据路径
[root@rocketmq_master_01 3m-3s-sync]# cd /opt/alibaba-rocketmq/conf/ [root@rocketmq_master_01 conf]# sed -i 's#${user.home}#/var/alibaba-rocketmq#g' *.xml #默认路径为用户家目录下
5.修改服务启动脚本参数
[root@rocketmq_master_01 conf]# cd ../bin/ [root@rocketmq_master_01 bin]# pwd /opt/alibaba-rocketmq/bin [root@rocketmq_master_01]# vim runbroker.sh #broker的启动脚本
[root@rocketmq_master_01 bin]# vim runserver.sh #nameserver启动脚本
6.先依次启动nameserver服务(必须)
[root@rocketmq_master_01 bin]# cd /opt/alibaba-rocketmq/bin [root@rocketmq_master_01 bin]# nohup sh mqnamesrv & #启动服务
[root@rocketmq_master_01 bin]# tailf /var/alibaba-rocketmq/logs/rocketmqlogs/namesrv.log #查看打印日志是否异常
7.启动broker服务
[root@rocketmq_master_01 bin]#nohup sh mqbroker -c /opt/alibaba-rocketmq/conf/3m-3s-sync/broker-a.properties & #注意,每台服务启动时指定的配置文件也要同时改变
[root@rocketmq_master_01 bin]# tailf /var/alibaba-rocketmq/logs/rocketmqlogs/broker.log
因为当前rocketmq版本较低,使用最新的rocketmq-console会有部分信息丢失的状况,只能使用较低版本的,这里使用的版本为rocketmq-console-3.2.6,依赖Tomcat容器,具体操做步骤为,:
1.unzip解压war包 -d指定到某个目录, 2.进入解压目录下WEB-INF/classes/目录中 3.修改config.properties配置文件,添加name server地址,格式IP(域名):port 若是有多个,已;为分割 4.将目录移动到Tomcat docBase目录下,并启动
资源连接地址:
连接:https://pan.baidu.com/s/10NeEeBH8eugdYcDn6e02aQ 提取码:aq1t
界面展现:
经过console能够看到,当前共有三个broker,每一个broker有两台服务器
1.配置文件名称和服务器对应,a:master1 b:master2 .. 2.注意不一样主机配置文件名称不一样,brokerNam也不一样 3.每台briker服务启动时,注意要指定正确的配置文件 4.建议生产每一个服务使用screen命令启动,不要使用nohup
https://github.com/apache/rocketmq-externals/tree/release-rocketmq-console-1.0.0/rocketmq-console
https://github.com/apache/rocketmq-externals/blob/master/rocketmq-console/doc/1_0_0/UserGuide_CN.md
http://rocketmq.apache.org/docs/quick-start/
http://www.javashuo.com/article/p-ajjuqahi-br.html
https://blog.csdn.net/sybnfkn040601/article/details/64920062