RockMQ雙主雙從搭建

修改配置文件

將RocketMQ安裝到/usr/local/下
配置文件所在目錄/usr/local/rocketmq-all-4.7.0-source-release/distribution/target/rocketmq-4.7.0/rocketmq-4.7.0/conf/

配置文件修改及說明

#修改服務器1的broker-a.properties、broker-a-s.properties,服務器2的broker-b.properties、broker-b-s.properties
#後面啓動會用到這4個文件
/usr/local/rocketmq-all-4.7.0-source-release/distribution/target/rocketmq-4.7.0/rocketmq-4.7.0/conf/2m-2s-sync

配置:兩臺服務器(ip1、ip2)
服務器1(ip1)

#主
#如多網卡或者虛擬服務器,需要暴露真實ip
brokerIP1=ip1
namesrvAddr=ip1:9876;ip2:9876
brokerClusterName=DefaultCluster
#主從brokerName值一樣,表明關係
brokerName=broker-a
#爲0表示主,大於0表示從
brokerId=0
#刪除文件時間爲凌晨4點
deleteWhen=04
#文件保留時間
fileReservedTime=48
#同步雙寫Master
brokerRole=SYNC_MASTER
#同步刷盤
flushDiskType=SYNC_FLUSH
#同一臺服務器部署主從,需要不同端口來區分
listenPort=10911
#存儲路徑
storePathRootDir=/usr/local/rocketmq/store-a

#從
brokerIP1=ip1
namesrvAddr=ip1:9876;ip2:9876
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SYNC_MASTER
flushDiskType=ASYNC_FLUSH
listenPort=11011
storePathRootDir=/usr/local/rocketmq/store-a-slave

服務器2(ip2)

#主
brokerIP1=ip2
namesrvAddr=ip1:9876;ip2:9876
brokerClusterName=DefaultCluster
brokerName=broker-b
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=SYNC_MASTER
flushDiskType=SYNC_FLUSH
listenPort=10911
storePathRootDir=/home/rocketmq/store-b

#從
brokerIP1=ip2
namesrvAddr=ip1:9876;ip2:9876
brokerClusterName=DefaultCluster
brokerName=broker-b
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
listenPort=11011
storePathRootDir=/home/rocketmq/store-b-slave

啓動

cd /usr/local/rocketmq-all-4.7.0-source-release/distribution/target/rocketmq-4.7.0/rocketmq-4.7.0/
#啓動nameserver
nohup sh bin/mqnamesrv &

#啓動broker,其他類似
./bin/mqbroker -c /usr/local/rocketmq-all-4.7.0-source-release/distribution/target/rocketmq-4.7.0/rocketmq-4.7.0/conf/2m-2s-sync/broker-b.properties &

問題及解決

問題1

java.lang.RuntimeException: Lock failed,MQ already started
	at org.apache.rocketmq.store.DefaultMessageStore.start(DefaultMessageStore.java:214)
	at org.apache.rocketmq.broker.BrokerController.start(BrokerController.java:827)
	at org.apache.rocketmq.broker.BrokerStartup.start(BrokerStartup.java:64)
	at org.apache.rocketmq.broker.BrokerStartup.main(BrokerStartup.java:58)

解決:將broker的master和slave節點放在同一臺機器上,配置的storePath相同導致的,修改配置文件,改爲不同的路徑即可解決。

問題2

默認RocketMQ佔用的內存較大,可修改爲如下所示:

cd /usr/local/rocketmq/distribution/target/rocketmq-4.7.0/rocketmq-4.7.0/bin
vi runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

vi runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn256m"

問題3

如果是阿里雲服務器,需要放開對應的端口
在這裏插入圖片描述

問題4

Spring boot整合RocketMQ,啓動時報錯,更換spring boot版本或直接使用RocketMQ解決
使用如下配置報錯,改爲直接使用rocketmq-client

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.6.RELEASE</version>
    </parent>
    <dependency>
      <groupId>org.apache.rocketmq</groupId>
      <artifactId>rocketmq-spring-boot-starter</artifactId>
      <version>2.1.0</version>
    </dependency>
    
報錯信息:
[ ERROR ] [2020-06-29 16:13:32] [main-org.springframework.boot.SpringApplication--821 line]  - Application startup failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.apache.rocketmq.spring.autoconfigure.ListenerContainerConfiguration': Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.rocketmq.spring.autoconfigure.ListenerContainerConfiguration$$EnhancerBySpringCGLIB$$85647c72]: No default constructor found; nested exception is java.lang.NoSuchMethodException: org.apache.rocketmq.spring.autoconfigure.ListenerContainerConfiguration$$EnhancerBySpringCGLIB$$85647c72.<init>()
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1105)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1050)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:760)
    at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:360)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:306)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章