• Linux RocketMQ双主双从,Centos7 RocketMQ4集群(双主双从)


    Linux RocketMQ双主双从,Centos7 RocketMQ4集群(双主双从)

    ================================

    ©Copyright 蕃薯耀 2020-12-28

    https://www.cnblogs.com/fanshuyao/

    一、Linux RocketMQ单机版安装配置和使用

    Linux RocketMQ安装配置和使用,Centos7 RocketMQ4安装配置,见:

    https://www.cnblogs.com/fanshuyao/p/14200170.html

    二、RocketMQ集群搭建官网中文说明文档

    #集群
    https://rocketmq-1.gitbook.io/rocketmq-connector/quick-start/qian-qi-zhun-bei/ji-qun-huan-jing
    #其它
    https://rocketmq-1.gitbook.io/rocketmq-connector/

    三、RocketMQ集群说明

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

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

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

    四、默认端口

    nameserver默认使用9876端口
    master默认使用10911端口
    slave默认使用11011端口

    正式开始:

    五、RocketMQ双主双从(同步),配置文件复制及说明:

    1、创建自定义的配置文件目录:

    mkdir -p /java/rocketmq4/myconf

    复制双主双从(同步)配置文件:

    cp /java/rocketmq4/conf/2m-2s-sync/* /java/rocketmq4/myconf

    回到自定义配置文件目录,查看复制的配置文件:

    [root@host_132 2m-2s-sync]# cd /java/rocketmq4/myconf
    [root@host_132 myconf]# ll
    总用量 16
    -rw-r--r--. 1 root root 928 12月 25 09:53 broker-a.properties
    -rw-r--r--. 1 root root 922 12月 25 09:53 broker-a-s.properties
    -rw-r--r--. 1 root root 928 12月 25 09:53 broker-b.properties
    -rw-r--r--. 1 root root 922 12月 25 09:53 broker-b-s.properties

    2、集群在2台服务器进行(最好使用4台,不然后面配置文件目录冲突或者端口冲突,总有一个broker启动失败,很折腾人)
    192.168.170.128:部署broker-a和broker-b-s
    192.168.170.129:部署broker-b和broker-a-s

    broker-a:为主1

    broker-a-s:为主1的从

    broker-b:为主2

    broker-b-s:为主2的从

    3、RocketMQ如何区分主从(提前说明,可忽略,后面配置文件修改需要用到):

    brokerClusterName:为集群的名称,名称相同的表示同一个集群,无论是主机还是从机,都要设置成一样的。

    brokerClusterName=myRocketMQ

    brokerName:主从配对,相同名称的broker才能做主从设置

    brokerName=broker-a

    brokerId:用于标识主从关系,0为主,其他大于0的为从(不能小于0)。

    一般master设置0,slave设置1。Master角色的Broker支持读和写,Slave角色的Broker仅支持读,也就是Producer只能和Master角色的Broker连接写人消息:Consumer可以连接Master角色的Broker,也可以连接Slave角色的Broker来读取消息。

    #Master节点设置
    brokerId=0
    
    #Slave节点设置
    #brokerId=1

    六、RocketMQ双主双从(同步),备份日志文件及修改存放目录(两个服务器都要修改):

    修改前,先备份

    cp /java/rocketmq4/conf/logback_broker.xml /java/rocketmq4/conf/logback_broker.xml.bak
    cp /java/rocketmq4/conf/logback_namesrv.xml /java/rocketmq4/conf/logback_namesrv.xml.bak
    cp /java/rocketmq4/conf/logback_tools.xml /java/rocketmq4/conf/logback_tools.xml.bak

    修改日志的文件存放位置:

    sed -i "s/${user.home}//java/rocketmq4/g" /java/rocketmq4/conf/logback_broker.xml 
    sed -i "s/${user.home}//java/rocketmq4/g" /java/rocketmq4/conf/logback_namesrv.xml
    sed -i "s/${user.home}//java/rocketmq4/g" /java/rocketmq4/conf/logback_tools.xml

    修改后的日志存放位置:

    /java/rocketmq4/logs/rocketmqlogs

    七、RocketMQ双主双从(同步),配置文件修改:

    服务器1(192.168.170.128)的配置:

    1、删除192.168.170.128无用的配置

    [root@host_132 myconf]# rm -f broker-a-s.properties
    [root@host_132 myconf]# rm -f broker-b.properties 
    [root@host_132 myconf]# ll
    总用量 8
    -rw-r--r--. 1 root root 928 12月 25 09:53 broker-a.properties
    -rw-r--r--. 1 root root 922 12月 25 09:53 broker-b-s.properties

    2、创建各种文件存储路径,放master:

    mkdir -p /java/rocketmq4/master/store/
    mkdir -p /java/rocketmq4/master/store/commitlog
    mkdir -p /java/rocketmq4/master/store/consumequeue
    mkdir -p /java/rocketmq4/master/store/index

    因为在同一个服务器要启动两个broker,区分一个主从配置文件的文件夹,slave放在/slave(不然文件冲突,会导致broker启动失败)

    mkdir -p /java/rocketmq4/slave/store/
    mkdir -p /java/rocketmq4/slave/store/commitlog
    mkdir -p /java/rocketmq4/slave/store/consumequeue
    mkdir -p /java/rocketmq4/slave/store/index

    3、broker-a.properties配置文件内容:

    位置:/java/rocketmq4/myconf/broker-a.properties

    需要特别注意的配置项(主从在某些配置项存在不同的配置):

    brokerClusterName:集群的名称

    brokerName:broker的名称,主从的名称是一样的

    brokerId:区分主从,0表示是主机,1表示是从机(大于0都是从机,可以设置2、3)

    namesrvAddr:NameServer的服务地址,需要修改自己的

    listenPort:监听的端口,如果一台服务启动两个broker或者以上,请一定要修改该端口

    storePathRootDir:各类文件的存储根路径,这个也要特别注意,如果一台服务启动两个broker或者以上,请一定要修改不同的目录,而且要先创建相应的目录,不然文件冲突,导致某一个broker一直启动失败

    brokerRole:broker的角色,区分主、从、主异步、主同步

    flushDiskType:刷盘方式(ASYNC_FLUSH:异步刷盘、SYNC_FLUSH:同步刷盘)

    配置的内容:

    #broker集群名称,用于划分broker
    brokerClusterName=myRocketMQ
    #broker名称,用于主从配对,相同名称的broker才能做主从设置
    brokerName=broker-a
    #用于标识主从关系,0为主,其他大于0的为从(不能小于0)master设置0,slave设置1。Master角色的Broker支持读和写,Slave角色的Broker仅支持读,也就是Producer只能和Master角色的Broker连接写人消息:Consumer可以连接Master角色的Broker,也可以连接Slave角色的Broker来读取消息。
    #Master节点设置
    brokerId=0
    #Slave节点设置
    #brokerId=1
    #name server服务器地址及端口,可以是多个,分号隔开
    namesrvAddr=192.168.170.128:9876;192.168.170.129:9876
    #创建topic时,若未指定topic下的队列数,则取该默认值作为默认队列数
    defaultTopicQueueNums=8
    #是否自动创建默认topic,生产需保持关闭
    autoCreateTopicEnable=true
    #是否自动创建topic的订阅组,默认开启,生产需保持关闭
    autoCreateSubscriptionGroup=true
    #broker服务监听端口
    listenPort=10911
    #未消费的持久化消息清理时间点,默认是凌晨4点
    deleteWhen=04
    #持久化消息保存周期(单位:小时),超过该周期将被清理,默认是48小时
    fileReservedTime=72
    #单个commitLog文件的大小限制(单位:字节),默认是1G
    mapedFileSizeCommitLog=1073741824
    #单个consumeQueue大小限制(存储的消息条数 * 每条消息的索引大小20),默认存30W条
    mapedFileSizeConsumeQueue=8000000
    #存储使用率阀值,当使用率超过阀值时,将拒绝发送消息请求
    diskMaxUsedSpaceRatio=88
    #持久化消息存储根路径
    storePathRootDir=/java/rocketmq4/master/store
    #commitLog文件存储路径
    storePathCommitLog=/java/rocketmq4/master/store/commitlog
    #消费队列文件存储路径
    storePathConsumeQueue=/java/rocketmq4/master/store/consumequeue
    #消息索引文件存储路径
    storePathIndex=/java/rocketmq4/master/store/index
    #checkpoint文件存储路径
    storeCheckpoint=/java/rocketmq4/master/store/checkpoint
    #abort文件存储路径
    abortFile=/java/rocketmq4/master/store/abort
    
    #最大消息大小限制(单位:字节)
    maxMessageSize=65536
    #commitLog最少刷盘page数
    flushCommitLogLeastPages=4
    #consumeQueue最少刷盘page数
    flushConsumeQueueLeastPages=2
    #commitLog刷盘间隔时间
    flushCommitLogThoroughInterval=10000
    #consumeQueue刷盘间隔时间
    flushConsumeQueueThoroughInterval=60000
    #处理消息发送线程池大小
    sendMessageThreadPoolNums=128
    #处理消息拉取线程池大小
    pullMessageThreadPoolNums=128
    #broker角色(SYNC_MASTER:同步双写Master、ASYNC_MASTER:异步复制Master、SLAVE:Slave)
    brokerRole=SYNC_MASTER
    #Slave节点设置
    #brokerRole=SLAVE
    #刷盘方式(ASYNC_FLUSH:异步刷盘、SYNC_FLUSH:同步刷盘)
    flushDiskType=ASYNC_FLUSH

    4、broker-b-s.properties配置文件内容(部署在同一台服务器,需要修改成不同的端口):11011

    文件位置:/java/rocketmq4/myconf/broker-b-s.properties

    和主机不同的配置项:

    brokerName

    brokerId

    listenPort

    storePathRootDir

    brokerRole

    配置的内容:

    #broker集群名称,用于划分broker
    brokerClusterName=myRocketMQ
    #broker名称,用于主从配对,相同名称的broker才能做主从设置
    brokerName=broker-b
    #用于标识主从关系,0为主,其他大于0的为从(不能小于0)master设置0,slave设置1。Master角色的Broker支持读和写,Slave角色的Broker仅支持读,也就是Producer只能和Master角色的Broker连接写人消息:Consumer可以连接Master角色的Broker,也可以连接Slave角色的Broker来读取消息。
    #Slave节点设置
    brokerId=1
    #name server服务器地址及端口,可以是多个,分号隔开
    namesrvAddr=192.168.170.128:9876;192.168.170.129:9876
    #创建topic时,若未指定topic下的队列数,则取该默认值作为默认队列数
    defaultTopicQueueNums=8
    #是否自动创建默认topic,生产需保持关闭
    autoCreateTopicEnable=true
    #是否自动创建topic的订阅组,默认开启,生产需保持关闭
    autoCreateSubscriptionGroup=true
    #broker服务监听端口
    listenPort=11011
    #未消费的持久化消息清理时间点,默认是凌晨4点
    deleteWhen=04
    #持久化消息保存周期(单位:小时),超过该周期将被清理,默认是48小时
    fileReservedTime=72
    #单个commitLog文件的大小限制(单位:字节),默认是1G
    mapedFileSizeCommitLog=1073741824
    #单个consumeQueue大小限制(存储的消息条数 * 每条消息的索引大小20),默认存30W条
    mapedFileSizeConsumeQueue=8000000
    #存储使用率阀值,当使用率超过阀值时,将拒绝发送消息请求
    diskMaxUsedSpaceRatio=88
    #持久化消息存储根路径
    storePathRootDir=/java/rocketmq4/slave/store
    #commitLog文件存储路径
    storePathCommitLog=/java/rocketmq4/slave/store/commitlog
    #消费队列文件存储路径
    storePathConsumeQueue=/java/rocketmq4/slave/store/consumequeue
    #消息索引文件存储路径
    storePathIndex=/java/rocketmq4/slave/store/index
    #storeCheckpoint文件存储路径
    storeCheckpoint=/java/rocketmq4/slave/store/checkpoint
    #abortFile文件存储路径
    abortFile=/java/rocketmq4/slave/store/abort
    
    #最大消息大小限制(单位:字节)
    maxMessageSize=65536
    #commitLog最少刷盘page数
    flushCommitLogLeastPages=4
    #consumeQueue最少刷盘page数
    flushConsumeQueueLeastPages=2
    #commitLog刷盘间隔时间
    flushCommitLogThoroughInterval=10000
    #consumeQueue刷盘间隔时间
    flushConsumeQueueThoroughInterval=60000
    #处理消息发送线程池大小
    sendMessageThreadPoolNums=128
    #处理消息拉取线程池大小
    pullMessageThreadPoolNums=128
    #Slave节点设置
    brokerRole=SLAVE
    #刷盘方式(ASYNC_FLUSH:异步刷盘、SYNC_FLUSH:同步刷盘)
    flushDiskType=ASYNC_FLUSH

    服务器2(192.168.170.129)的配置:

    1、删除192.168.170.129无用的配置

    [root@host_132 myconf]# rm -f broker-a.properties
    [root@host_132 myconf]# rm -f broker-b-s.properties 
    [root@host_132 myconf]# 
    [root@host_132 myconf]# ll
    总用量 8
    -rw-r--r--. 1 root root 922 12月 25 10:39 broker-a-s.properties
    -rw-r--r--. 1 root root 928 12月 25 10:39 broker-b.properties

    2、broker-b.properties配置文件内容:

    文件路径:/java/rocketmq4/myconf/broker-b.properties

    配置内容:

    #broker集群名称,用于划分broker
    brokerClusterName=myRocketMQ
    #broker名称,用于主从配对,相同名称的broker才能做主从设置
    brokerName=broker-b
    #用于标识主从关系,0为主,其他大于0的为从(不能小于0)master设置0,slave设置1。Master角色的Broker支持读和写,Slave角色的Broker仅支持读,也就是Producer只能和Master角色的Broker连接写人消息:Consumer可以连接Master角色的Broker,也可以连接Slave角色的Broker来读取消息。
    #Master节点设置
    brokerId=0
    #name server服务器地址及端口,可以是多个,分号隔开
    namesrvAddr=192.168.170.128:9876;192.168.170.129:9876
    #创建topic时,若未指定topic下的队列数,则取该默认值作为默认队列数
    defaultTopicQueueNums=8
    #是否自动创建默认topic,生产需保持关闭
    autoCreateTopicEnable=true
    #是否自动创建topic的订阅组,默认开启,生产需保持关闭
    autoCreateSubscriptionGroup=true
    #broker服务监听端口
    listenPort=10911
    #未消费的持久化消息清理时间点,默认是凌晨4点
    deleteWhen=04
    #持久化消息保存周期(单位:小时),超过该周期将被清理,默认是48小时
    fileReservedTime=72
    #单个commitLog文件的大小限制(单位:字节),默认是1G
    mapedFileSizeCommitLog=1073741824
    #单个consumeQueue大小限制(存储的消息条数 * 每条消息的索引大小20),默认存30W条
    mapedFileSizeConsumeQueue=8000000
    #存储使用率阀值,当使用率超过阀值时,将拒绝发送消息请求
    diskMaxUsedSpaceRatio=88
    #持久化消息存储根路径
    storePathRootDir=/java/rocketmq4/master/store
    #commitLog文件存储路径
    storePathCommitLog=/java/rocketmq4/master/store/commitlog
    #消费队列文件存储路径
    storePathConsumeQueue=/java/rocketmq4/master/store/consumequeue
    #消息索引文件存储路径
    storePathIndex=/java/rocketmq4/master/store/index
    #checkpoint文件存储路径
    storeCheckpoint=/java/rocketmq4/master/store/checkpoint
    #abort文件存储路径
    abortFile=/java/rocketmq4/master/store/abort
    
    #最大消息大小限制(单位:字节)
    maxMessageSize=65536
    #commitLog最少刷盘page数
    flushCommitLogLeastPages=4
    #consumeQueue最少刷盘page数
    flushConsumeQueueLeastPages=2
    #commitLog刷盘间隔时间
    flushCommitLogThoroughInterval=10000
    #consumeQueue刷盘间隔时间
    flushConsumeQueueThoroughInterval=60000
    #处理消息发送线程池大小
    sendMessageThreadPoolNums=128
    #处理消息拉取线程池大小
    pullMessageThreadPoolNums=128
    #broker角色(SYNC_MASTER:同步双写Master、ASYNC_MASTER:异步复制Master、SLAVE:Slave)
    brokerRole=SYNC_MASTER
    #刷盘方式(ASYNC_FLUSH:异步刷盘、SYNC_FLUSH:同步刷盘)
    flushDiskType=ASYNC_FLUSH

    3、broker-a-s.properties配置文件内容:

    文件路径:/java/rocketmq4/myconf/broker-a-s.properties

    配置内容:

    #broker集群名称,用于划分broker
    brokerClusterName=myRocketMQ
    #broker名称,用于主从配对,相同名称的broker才能做主从设置
    brokerName=broker-a
    #用于标识主从关系,0为主,其他大于0的为从(不能小于0)master设置0,slave设置1。Master角色的Broker支持读和写,Slave角色的Broker仅支持读,也就是Producer只能和Master角色的Broker连接写人消息:Consumer可以连接Master角色的Broker,也可以连接Slave角色的Broker来读取消息。
    #Slave节点设置
    brokerId=1
    #name server服务器地址及端口,可以是多个,分号隔开
    namesrvAddr=192.168.170.128:9876;192.168.170.129:9876
    #创建topic时,若未指定topic下的队列数,则取该默认值作为默认队列数
    defaultTopicQueueNums=8
    #是否自动创建默认topic,生产需保持关闭
    autoCreateTopicEnable=true
    #是否自动创建topic的订阅组,默认开启,生产需保持关闭
    autoCreateSubscriptionGroup=true
    #broker服务监听端口
    listenPort=11011
    #未消费的持久化消息清理时间点,默认是凌晨4点
    deleteWhen=04
    #持久化消息保存周期(单位:小时),超过该周期将被清理,默认是48小时
    fileReservedTime=72
    #单个commitLog文件的大小限制(单位:字节),默认是1G
    mapedFileSizeCommitLog=1073741824
    #单个consumeQueue大小限制(存储的消息条数 * 每条消息的索引大小20),默认存30W条
    mapedFileSizeConsumeQueue=8000000
    #存储使用率阀值,当使用率超过阀值时,将拒绝发送消息请求
    diskMaxUsedSpaceRatio=88
    #持久化消息存储根路径
    storePathRootDir=/java/rocketmq4/slave/store
    #commitLog文件存储路径
    storePathCommitLog=/java/rocketmq4/slave/store/commitlog
    #消费队列文件存储路径
    storePathConsumeQueue=/java/rocketmq4/slave/store/consumequeue
    #消息索引文件存储路径
    storePathIndex=/java/rocketmq4/slave/store/index
    #storeCheckpoint文件存储路径
    storeCheckpoint=/java/rocketmq4/slave/store/checkpoint
    #abortFile文件存储路径
    abortFile=/java/rocketmq4/slave/store/abort
    
    #最大消息大小限制(单位:字节)
    maxMessageSize=65536
    #commitLog最少刷盘page数
    flushCommitLogLeastPages=4
    #consumeQueue最少刷盘page数
    flushConsumeQueueLeastPages=2
    #commitLog刷盘间隔时间
    flushCommitLogThoroughInterval=10000
    #consumeQueue刷盘间隔时间
    flushConsumeQueueThoroughInterval=60000
    #处理消息发送线程池大小
    sendMessageThreadPoolNums=128
    #处理消息拉取线程池大小
    pullMessageThreadPoolNums=128
    #Slave节点设置
    brokerRole=SLAVE
    #刷盘方式(ASYNC_FLUSH:异步刷盘、SYNC_FLUSH:同步刷盘)
    flushDiskType=ASYNC_FLUSH

    七、RocketMQ双主双从(同步),启动测试:

    1、先在两台服务器分别启动nameServer

    nohup sh mqnamesrv &

    2、在【192.168.170.128】启动master-a和broker-b-s(&符号表示后台运行)
    启动master-a:

    nohup sh mqbroker -c /java/rocketmq4/myconf/broker-a.properties &

    启动broker-b-s:

    nohup sh mqbroker -c /java/rocketmq4/myconf/broker-b-s.properties &

    查看进程:

    ps -ef | grep BrokerStartup

    查看日志文件:

    tail -f /java/rocketmq4/logs/rocketmqlogs/broker.log

    3、在【192.168.170.129】启动master-b和broker-a-s
    启动master-b:

    nohup sh mqbroker -c /java/rocketmq4/myconf/broker-b.properties &


    启动broker-a-s:

    nohup sh mqbroker -c /java/rocketmq4/myconf/broker-a-s.properties &

    查看集群信息,192.168.170.128:9876 为nameServer

    sh mqadmin clusterList -n 192.168.170.128:9876

    查看集群信息结果:

    [root@host_132 store]# sh mqadmin  clusterList -n 192.168.170.128: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
    myRocketMQ        broker-a                0     192.168.170.128:10911  V4_8_0                   0.00(0,0ms)         0.00(0,0ms)          0 446914.70 0.4031
    myRocketMQ        broker-a                1     192.168.170.129:11011  V4_8_0                   0.00(0,0ms)         0.00(0,0ms)          0 446914.70 0.3966
    myRocketMQ        broker-b                0     192.168.170.129:10911  V4_8_0                   0.00(0,0ms)         0.00(0,0ms)          0 446914.70 0.3966
    myRocketMQ        broker-b                1     192.168.170.128:11011  V4_8_0                   0.00(0,0ms)         0.00(0,0ms)          0 446914.70 0.4031

    八、RocketMQ双主双从(同步),关闭rocketMQ

    sh mqshutdown broker
    sh mqshutdown namesrv

    九、RocketMQ双主双从(同步),启动失败问题解决

    查看broker启动失败的错误日志(此处是修改了日志路径的,root用户默认是在:/root/logs/rocketmqlogs/broker.log):

    tail -f /java/rocketmq4/logs/rocketmqlogs/broker.log

    1、RocketMQ Broker端口和目录冲突导致启动失败问题解决

    Try to shutdown service thread:AllocateMappedFileService started:true lastThread:Thread[AllocateMappedFileService,5,main]

    Try to shutdown service thread:PullRequestHoldService started:false lastThread:null

    详细错误内容:

    [root@host_132 myconf]# tail -f /java/rocketmq4/logs/rocketmqlogs/broker.log
    2020-12-25 16:05:30 INFO main - dLegerGroup=
    2020-12-25 16:05:30 INFO main - dLegerPeers=
    2020-12-25 16:05:30 INFO main - dLegerSelfId=
    2020-12-25 16:05:30 INFO main - preferredLeaderId=
    2020-12-25 16:05:30 INFO main - isEnableBatchPush=false
    2020-12-25 16:05:30 INFO main - Try to start service thread:AllocateMappedFileService started:false lastThread:null
    2020-12-25 16:05:30 INFO main - Try to shutdown service thread:AllocateMappedFileService started:true lastThread:Thread[AllocateMappedFileService,5,main]
    2020-12-25 16:05:30 INFO main - shutdown thread AllocateMappedFileService interrupt true
    2020-12-25 16:05:30 INFO main - join thread AllocateMappedFileService elapsed time(ms) 7 90000
    2020-12-25 16:05:30 INFO main - Try to shutdown service thread:PullRequestHoldService started:false lastThread:null

    错误点1:配置文件

    双主双从中,如果同一个服务器部署启动了2个broker,配置文件需要注意修改的地方:

    #broker服务监听端口,同一个服务器中,主从的端口不能一样
    listenPort=11011

    #持久化消息存储根路径,同一个服务器中,主从的端口不能一样
    storePathRootDir=/java/rocketmq4/slave/store

    错误点2:产生了lock锁定

    由于第一次启动失败,导致产生相应的lock文件,所以需要清除之前产生的文件(注意:生产环境不能这样操作)

    如果日志存放路径没有修改,则删除:

    root用户在/root目录下,其他用户在/home目录

    rm -rf /root/store/*

    如果在多台服务器,分别有主从配置目录,请一定要仔细全部删除,然后重新启动。

    rm -rf /java/rocketmq4/master/store/*
    
    rm -rf /java/rocketmq4/slave/store/*

    另外需要注意的是,不使用kill -9 pid的方式结束进程,因为启动时产生了lock文件,这样操作可能导致下次启动失败。

    而是使用命令进行关闭:

    sh mqshutdown broker
    
    sh mqshutdown namesrv

    错误点3:特别需要注意:

     之前创建相关配置目录时,创建了很多目录,导致broker一直启动失败,而且没有明确的错误,只提示:

    Try to shutdown service thread:AllocateMappedFileService started:true lastThread:Thread[AllocateMappedFileService,5,main]

    Try to shutdown service thread:PullRequestHoldService started:false lastThread:null

    mkdir -p /java/rocketmq4/master/store
    mkdir -p /java/rocketmq4/master/store/commitlog
    mkdir -p /java/rocketmq4/master/store/consumequeue
    mkdir -p /java/rocketmq4/master/store/index
    mkdir -p /java/rocketmq4/master/store/checkpoint
    mkdir -p /java/rocketmq4/master/store/abort

    最后取消了相关文件的配置,查看store,有些配置是文件来的:

    [root@host_132 store]# ll
    总用量 12
    -rw-r--r--. 1 root root    0 12月 29 10:33 abort
    -rw-r--r--. 1 root root 4096 12月 29 10:33 checkpoint
    drwxr-xr-x. 2 root root    6 12月 29 10:32 commitlog
    drwxr-xr-x. 2 root root  193 12月 29 10:33 config
    -rw-r--r--. 1 root root    4 12月 29 10:33 lock

    问题原因:abort、checkpoint是文件来的,但创建成了目录,导致一直启动失败,这2个文件系统会自动创建。

    commitlog、consumequeue、index是目录,config是目录,但config自动创建的。

    启动后,如果提示consumequeue不存在:

    Error when measuring disk space usage, file doesn't exist on this path: /java/rocketmq4/master/store/consumequeue

     可以直接创建一个文件夹解决报错:

    mkdir -p /java/rocketmq4/master/store/consumequeue

    consumequeue这个是目录,千万不要创建成文件类型,不然后面可能报RocketMQ硬盘满了的错误:the broker's disk is full

    Caused by: org.apache.rocketmq.client.exception.MQBrokerException: CODE: 14 DESC:
    service not available now. It may be caused by one of the following reasons:
    the broker's disk is full [CL: 0.41 CQ: 0.41 INDEX: 0.41], messages are put to the slave, message store has been shut down, etc.

    2、、RocketMQ 默认配置文件内存过大,导致启动失败问题解决

    见:https://www.cnblogs.com/fanshuyao/p/14200170.html

    十、rocketmq-console安装和使用

    rocketmq-console是RocketMQ的运行监控管理系统

    1、下载地址:rocketmq-externals-rocketmq-console-1.0.0.zip

    https://github.com/apache/rocketmq-externals/releases

    源代码地址:

    https://github.com/apache/rocketmq-externals

    千万不要下载最新的源码运行,因为会报错:、

    最版本的代码下载下来会报错:

    java.lang.IllegalStateException: defaultMQAdminExt should be init before you get this
    at org.apache.rocketmq.console.service.client.MQAdminInstance.threadLocalMQAdminExt(MQAdminInstance.java:39)
    at org.apache.rocketmq.console.service.client.MQAdminExtImpl.examineBrokerClusterInfo(MQAdminExtImpl.java:204)
    at org.apache.rocketmq.console.task.DashboardCollectTask.collectBroker(DashboardCollectTask.java:170)

    2、配置荐修改:

    application.properties

    server.port=4000
    rocketmq.config.namesrvAddr=192.168.170.128:9876;192.168.170.129:9876
    #修改成windows的目录,在eclipse运行
    rocketmq.config.dataPath=E:/datas/rocketmq-console/data

    rocketmq.config.namesrvAddr必须修改成自己的NameServer地址,多个通过英文分号分隔

    3、rocketmq-console在eclipse中启动运行(或者打包成jar包运行)

    rocketmq-console是Java Springboot项目,依赖Jdk8和maven,打包需要用到。

    访问地址:

    http://127.0.0.1:4000/

    运行效果图:

    ================================

    ©Copyright 蕃薯耀 2020-12-28

    https://www.cnblogs.com/fanshuyao/

  • 相关阅读:
    【python+selenium】selenium grid(分布式)
    【python】导入自定义模块
    Maven的配置以及IDEA导入本地Maven
    java历史概述
    JVM 内存调优 与 实际案例
    ConcurrentHashMap实现线程安全的原理
    Request.UrlReferrer详解
    等比例缩放生成缩略图
    JavaEE的ajax入门
    javaee三层架构案例--简单学生管理系统
  • 原文地址:https://www.cnblogs.com/fanshuyao/p/14200573.html
Copyright © 2020-2023  润新知