rocketmq集群 部署笔记

                                                          ###                                   rocketmq 两主两从集群部署

1.单Master模式

这种方式风险较大,一旦Broker重启或者宕机时,会导致整个服务不可用。不建议线上环境使用,可以用于本地测试。

2.多Master模式

一个集群无Slave,全是Master,例如2个Master或者3个Master,这种模式的优缺点如下:

优点:配置简单,单个Master宕机或重启维护对应用无影响,在磁盘配置为RAID10时,即使机器宕机不可恢复情况下,由于RAID10磁盘非常可靠,消息也不会丢(异步刷盘丢失少量消息,同步刷盘一条不丢),性能最高;

缺点:单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅,消息实时性会受到影响。

3.多Master多Slave模式-异步复制

每个Master配置一个Slave,有多对Master-Slave,HA采用异步复制方式,主备有短暂消息延迟(毫秒级),这种模式的优缺点如下:

优点:即使磁盘损坏,消息丢失的非常少,且消息实时性不会受影响,同时Master宕机后,消费者仍然可以从Slave消费,而且此过程对应用透明,不需要人工干预,性能同多Master模式几乎一样;

缺点:Master宕机,磁盘损坏情况下会丢失少量消息。

4.多Master多Slave模式-同步双写

每个Master配置一个Slave,有多对Master-Slave,HA采用同步双写方式,即只有主备都写成功,才向应用返回成功,这种模式的优缺点如下:

优点:数据与服务都无单点故障,Master宕机情况下,消息无延迟,服务可用性与数据可用性都非常高;

缺点:性能比异步复制模式略低(大约低10%左右),发送单个消息的RT会略高,且目前版本在主节点宕机后,备机不能自动切换为主机。

  • 各个模块的作用

    • Namesrv: 存储当前集群所有Brokers信息、Topic跟Broker的对应关系。
    • Broker: 集群最核心模块,主要负责Topic消息存储、消费者的消费位点管理(消费进度)。
    • Producer: 消息生产者,每个生产者都有一个ID(编号),多个生产者实例可以共用同一个ID。同一个ID下所有实例组成一个生产者集群。
    • Consumer: 消息消费者,每个订阅者也有一个ID(编号),多个消费者实例可以共用同一个ID。同一个ID下所有实例组成一个消费者集群。
192.168.3.122broker-a主,broker-b从,NameServer
192.168.3.124broker-a从,broker-b主,NameServer
1.安装jdk(两台分别都要执行)
#!/bin/bash
cd /usr/local
wget https://github.com/frekele/oracle-java/releases/download/8u181-b13/jdk-8u181-linux-x64.tar.gz
        tar -xf jdk-8u181-linux-x64.tar.gz
        sleep 1
        mv  jdk-8u181-linux-x64.tar.gz jdk
        mv jdk-8u181-linux-x64.tar.gz /opt/src
echo '#######JDK環境變數########################
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
'>> /etc/profile

source /etc/profile
2.下载安装rocketmq
#下载rocketmq安装包
wget https://archive.apache.org/dist/rocketmq/4.7.0/rocketmq-all-4.7.0-bin-release.zip

#解压rocketmq安装包  
unzip rocketmq-all-4.7.0-bin-release.zip

#移动到要安装的目录
mv rocketmq-all-4.7.0-bin-release /opt/apps/rocketmq

3.启动NameServer
#启动NameServer (启动服务时,需要先启动NameServer)
nohup sh /opt/apps/rocketmq/bin/mqnamesrv > /opt/apps/rocketmq/logs/namesrv.log 2>&1 &

#验证NameServer是否启动成功  (通过jps命令查看有NameServer进程表示启动成功,NameServer的日志文件在/root/logs/rocketmqlogs目录中,通过/opt/apps/rocketmq/conf/logback_namesrv.xml可以配置日志文件目录。)
[root@rocketmq01 ~]# jps

#停止NameServer
sh /opt/apps/rocketmq/bin/mqshutdown namesrv
4.修改broker配置
# (每台机器上都要启动一个Master角色和Slave角色的Broker,并互为主备,即在A机器上启动broker-a的master节点、broker-b-s的slave节点;在B机器上启动broker-b的master节点、broker-a-s的slave节点。

在conf目录下提供了几种集群方式配置文件的示例,2m-noslave=双master模式;2m-2s-sync=双master双slave同步双写模式;2m-2s-async=双master双slave异步复制模式。)
本次安装采用2m-2s-async模式
修改192.168.3.122上的Master Broker的配置文件broker-a.properties

cd /opt/apps/rocketmq/conf/2m-2s-async

[root@rocketmq01 2m-2s-async]#vim broker-a.properties
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样  例如:在a.properties 文件中写 broker-a  在b.properties 文件中写 broker-b
brokerName=broker-a
#0 表示 Master,大于0 表示 Slave
brokerId=0
#删除文件时间点,默认凌晨 4点
deleteWhen=01
#文件保留时间,默认 48 小时
fileReservedTime=120
#Broker 的角色,ASYNC_MASTER=异步复制Master,SYNC_MASTER=同步双写Master,SLAVE=slave节点
brokerRole=SYNC_MASTER
#刷盘方式,ASYNC_FLUSH=异步刷盘,SYNC_FLUSH=同步刷盘 
flushDiskType=ASYNC_FLUSH
#Broker 对外服务的监听端口(默认端口为10911)
listenPort=10921
#nameServer地址,这里nameserver是单台,如果nameserver是多台集群的话,就用分号分割(即namesrvAddr=ip1:port1;ip2:port2;ip3:port3)
namesrvAddr=192.168.3.122:9876;192.168.3.124:9876
#每个topic对应队列的数量,默认为4,实际应参考consumer实例的数量,值过小不利于consumer负载均衡
defaultTopicQueueNums=8
#是否允许 Broker 自动创建Topic,生产建议关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,生产建议关闭
autoCreateSubscriptionGroup=true
#设置BrokerIP
brokerIP1=192.168.3.122
#存储路径
storePathRootDir=/opt/apps/rocketmq/data/store-a
#commitLog 存储路径
storePathCommitLog=/opt/apps/rocketmq/data/store-a/commitlog
#消费队列存储路径存储路径
storePathConsumerQueue=/opt/apps/rocketmq/data/store-a/consumequeue
#消息索引存储路径
storePathIndex=/opt/apps/rocketmq/data/store-a/index
#checkpoint 文件存储路径
#storeCheckpoint=/opt/apps/rocketmq/data/store-a/checkpoint
#abort 文件存储路径
#abortFile=/opt/apps/rocketmq/data/store-a/abort
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000


#修改 192.168.3.124 上 slave Broker的配置文件broker-b-s.properties
[root@rocketmq02 2m-2s-async]# vim broker-a-s.properties
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样  例如:在a.properties 文件中写 broker-a  在b.properties 文件中写 broker-b
brokerName=broker-a-s
#0 表示 Master,大于0 表示 Slave
brokerId=1
#删除文件时间点,默认凌晨 4点
deleteWhen=01
#文件保留时间,默认 48 小时
fileReservedTime=120
#Broker 的角色,ASYNC_MASTER=异步复制Master,SYNC_MASTER=同步双写Master,SLAVE=slave节点
brokerRole=SLAVE
#刷盘方式,ASYNC_FLUSH=异步刷盘,SYNC_FLUSH=同步刷盘 
flushDiskType=ASYNC_FLUSH
#Broker 对外服务的监听端口(默认端口为10911)
listenPort=10921 
#nameServer地址,这里nameserver是单台,如果nameserver是多台集群的话,就用分号分割(即namesrvAddr=ip1:port1;ip2:port2;ip3:port3)
namesrvAddr=192.168.3.122:9876;192.168.3.124:9876
#每个topic对应队列的数量,默认为4,实际应参考consumer实例的数量,值过小不利于consumer负载均衡
defaultTopicQueueNums=8
#是否允许 Broker 自动创建Topic,生产建议关闭
#autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,生产建议关闭
#autoCreateSubscriptionGroup=true
#设置BrokerIP
brokerIP1=192.168.3.124
#存储路径
storePathRootDir=/opt/apps/rocketmq/data/store-a
#commitLog 存储路径
storePathCommitLog=/opt/apps/rocketmq/data/store-a/commitlog
#消费队列存储路径存储路径
storePathConsumerQueue=/opt/apps/rocketmq/data/store-a/consumequeue
#消息索引存储路径
storePathIndex=/opt/apps/rocketmq/data/store-a/index
#checkpoint 文件存储路径
#storeCheckpoint=/opt/apps/rocketmq/data/store-a/checkpoint
#abort 文件存储路径
#abortFile=/opt/apps/rocketmq/data/store-a/abort
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
5.创建需要的相关目录
#创建存储目录
mkdir -p /opt/apps/rocketmq/data/store-a/{index,consumequeue,commitlog}

mkdir -p /opt/apps/rocketmq/data/store-b/{index,consumequeue,commitlog}
6.修改硬件配置要求
sed -i 's/-server -Xms8g -Xmx8g -Xmn4g\"/-server -Xms256m -Xmx256m -Xmn128m\"/' /opt/apps/rocketmq/bin/runbroker.sh
sed -i 's/-XX:MaxDirectMemorySize=15g\"/-XX:MaxDirectMemorySize=1g\"/' /opt/apps/rocketmq/bin/runbroker.sh
sed -i 's/-server -Xms4g -Xmx4g -Xmn2g/-server -Xms256m -Xmx256m -Xmn128m/' /opt/apps/rocketmq/bin/runserver.sh
sed -i 's/-server -Xms2g -Xmx2g -Xmn256m/-server -Xms128m -Xmx128m -Xmn256m/' /opt/apps/rocketmq/bin/tools.sh

#修改rocketmq 默认日志存放路径 (不修改默认是在启动用户家目录下)
vim  bin/runserver.sh
vim  bin/runbroker.sh 
分别都添加 JAVA_OPT="${JAVA_OPT} -Duser.home=新目录" 这条参数,如下图

image-20211029185927396

7.启动broker (启动broker之前,先启动NameServer,停止服务则相反)
#先启动两台机器上的Master节点,再启动两台机器上的Slave节点
[root@rocketmq01 ~]# nohup sh /opt/apps/rocketmq/bin/mqbroker -c /opt/apps/rocketmq/conf/2m-2s-async/broker-a.properties > /opt/apps/rocketmq/logs/broker-a.log 2>&1 &

[root@rocketmq02 ~]# nohup sh /opt/apps/rocketmq/bin/mqbroker -c /opt/apps/rocketmq/conf/2m-2s-async/broker-b.properties > /opt/apps/rocketmq/logs/broker-b.log 2>&1 &

[root@rocketmq01 ~]# nohup sh /opt/apps/rocketmq/bin/mqbroker -c /opt/apps/rocketmq/conf/2m-2s-async/broker-b-s.properties > /opt/apps/rocketmq/logs/broker-b-s.log 2>&1 &

[root@rocketmq02 ~]# nohup sh /opt/apps/rocketmq/bin/mqbroker -c /opt/apps/rocketmq/conf/2m-2s-async/broker-a-s.properties > /opt/apps/rocketmq/logs/broker-a-s.log 2>&1 &

启动报错:image-20211029180128010

查看日志文件(默认在启动用户家目录下)

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

解决办法:将自己创建的abort、checkpoint这两个目录删除掉,让程序自己创建即可

8.查看集群情况
 sh /opt/apps/rocketmq/bin/mqadmin clusterList -n "192.168.3.122:9876;192.168.3.124:9876"
9.关闭服务
#先关闭Broker、再关闭NameServer,服务启动的时候正好相反。
root@rocketmq_01 rocketmq]# sh /opt/apps/rocketmq/bin/mqshutdown broker

[root@rocketmq-1 rocketmq]# sh /opt/apps/rocketmq/bin/mqshutdown namesrv
10.安装rocketmq-console
[root@rocketmq_01 ~]# wget http://mirrors.cnnic.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz

[root@rocketmq_01 ~]# tar zxvf apache-maven-3.5.4-bin.tar.gz

[root@rocketmq_01 ~]# mv apache-maven-3.5.4 /opt/apps/maven

[root@rocketmq_01 ~]# vim  /etc/profile
export MAVEN_HOME=/opt/apps/maven
export PATH=$MAVEN_HOME/bin:$PATH

[root@rocketmq_01 ~]# source /etc/profile

[root@rocketmq_01 ~]# mvn -v

[root@rocketmq_01 ~]# wget https://github.com/apache/rocketmq-externals/archive/refs/tags/rocketmq-console-1.0.0.zip

[root@rocketmq_01 ~]# unzip rocketmq-console-1.0.0.zip

[root@rocketmq_01 ~]# mv rocketmq-externals-rocketmq-console-1.0.0/rocketmq-console/ /opt/apps/rocketmq-console  &&  cd  /opt/apps/rocketmq-console

[root@rocketmq_01 rocketmq-console]# mvn clean package -Dmaven.test.skip=true

#启动rocketmq-console
[root@rocketmq_01 rocketmq-console]# nohup java -jar /opt/apps/rocketmq-console/target/rocketmq-console-ng-1.0.0.jar --rocketmq.config.namesrvAddr='192.168.3.122:9876;192.168.3.124:9876' > /opt/apps/rocketmq-console/nohup.out 2>&1 &
#访问rocketmq-console
http://192.168.3.122:8080

@rocketmq_01 rocketmq-console]# nohup java -jar /opt/apps/rocketmq-console/target/rocketmq-console-ng-1.0.0.jar --rocketmq.config.namesrvAddr=‘192.168.3.122:9876;192.168.3.124:9876’ > /opt/apps/rocketmq-console/nohup.out 2>&1 &

#访问rocketmq-console
http://192.168.3.122:8080




评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值