rocketmq主从模式搭建

微信公众号:PersistentCoder 关注可了解更多的教程。问题或建议,请公众号留言;

内容目录

一、服务结构二、相关版本要求三、服务搭建四、配置alb负载五、配置域名和证书

一、服务结构

二、相关版本要求

1.服务器

服务器类型

ec2 amazon linux2

或者其他linux版本

cpu

2核

可根据需要调整

内存

8G

可根据需要调整

硬盘

128G

可根据需要调整

2.jdk

jdk1.8

3.rocketmq

5.0.0

4.控制台

dashboard1.0.1

三、服务搭建

1.机器初始化

初始化两台机器,忽略。

2.安装jdk
代码语言:javascript
复制
yum install -y java-1.8.0-openjdk-devel

#/etc/profile环境变量

jdk 8

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.382.b05-1.amzn2.0.2.x86_64
export CLASSPATH=.:JAVA_HOME/jre/lib/rt.jar:JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=PATH:JAVA_HOME/bin

保存后,source生效

source /etc/profile

3.安装rocketmq

下载

代码语言:javascript
复制
mkdir -p /usr/local/apache-rocketmq
cd /usr/local/apache-rocketmq
wget https://archive.apache.org/dist/rocketmq/5.0.0/rocketmq-all-5.0.0-bin-release.zip
unzip rocketmq-all-5.0.0-bin-release.zip

mkdir -p /usr/local/rocketmq/store
mkdir /usr/local/rocketmq/store/commitlog -p
mkdir /usr/local/rocketmq/store/consumequeue -p
mkdir /usr/local/rocketmq/store/index -p

修改配置文件

代码语言:javascript
复制
vim /usr/local/apache-rocketmq/conf/2m-2s-async/broker-a.properties

对于master,填入以下内容:

代码语言:javascript
复制
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=0
namesrvAddr=rocketmq-nameserver1:9876
brokerIP1=ip
defaultTopicQueueNums=4
#是否允许Broker自动创建 Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
listenPort=10911
deleteWhen=04
fileReservedTime=120
mapedFileSizeCommitLog=1073741824
mapedFileSizeConsumeQueue=300000
diskMaxUsedSpaceRatio=88
storePathRootDir=/usr/local/rocketmq/store
storePathCommitLog=/usr/local/rocketmq/store/commitlog
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
storePathIndex=/usr/local/rocketmq/store/index
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
abortFile=/usr/local/rocketmq/store/abort
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH

对于slave,填入如下内容:

代码语言:javascript
复制
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=1
namesrvAddr=rocketmq-nameserver1:9876
brokerIP1=172.31.23.122
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH

修改其他配置:

代码语言:javascript
复制
cd /usr/local/apache-rocketmq/conf/
sed -i 's#${user.home}#/usr/local/rocketmq#g' *.xml

在主从两台机器的/etc/hosts中添加以下内容:

代码语言:javascript
复制
内网ip1   rocketmq-nameserver1
内网ip1 rocketmq-master1
内网ip2 rocketmq-slave1

修改nameserver和broker的启动参数,对于2c8g机器,nameserver建议1g,broker建议4g。

nameserver启动脚本/usr/local/apache-rocketmq/bin/runserver.sh

broker启动脚本/usr/local/apache-rocketmq/bin/runbroker.sh

在server1上先启动nameserver:

代码语言:javascript
复制
/usr/local/apache-rocketmq/bin
nohup sh mqnamesrv >/dev/null 2>&1 &

再启动master broker:

代码语言:javascript
复制
cd /usr/local/apache-rocketmq/bin
nohup sh mqbroker -c /usr/local/apache-rocketmq/conf/2m-2s-async/broker-a.properties >/dev/null 2>&1 &

最后启动slave broker(同样修改启动参数 jvm 4g):

代码语言:javascript
复制
cd /usr/local/apache-rocketmq/bin
nohup sh mqbroker -c /usr/local/apache-rocketmq/conf/2m-2s-async/broker-a.properties >/dev/null 2>&1 &
4.安装控制台

低版本的控制台不支持账密登录,高版本的控制台需要自己编译打包。

安装maven并配置环境变量:

代码语言:javascript
复制
mkdir /opt/tools/maven
cd /opt/tools/maven
wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz
tar -zxvf apache-maven-3.8.8-bin.tar.gz
#配置环境变量
vim /etc/profile

maven 3.8.8

export MAVEN_HOME=/opt/tools/maven/apache-maven-3.8.8
export PATH={PATH}:{MAVEN_HOME}/bin
#保存后source生效
source /etc/profile

安装git,从github拉取控制台源码:

代码语言:javascript
复制
yum -y install git

拉取dashboard代码:

代码语言:javascript
复制
mkdir -p /usr/local/rocketmq-console/
cd /usr/local/rocketmq-console/
git clone https://github.com/apache/rocketmq-dashboard.git

开启账密登录:

代码语言:javascript
复制
vim /usr/local/rocketmq-console/rocketmq-dashboard/src/main/resources/application.yml

rocketmq:
config:
loginRequired: true

设置登录账密:

代码语言:javascript
复制
vim /usr/local/rocketmq-console/rocketmq-dashboard/src/main/resources/users.properties
admin=xxxxxx,1

编译打包:

代码语言:javascript
复制
cd /usr/local/rocketmq-console/rocketmq-dashboard
mvn clean package -Dmaven.test.skip=true

拷贝到/usr/local/rocketmq-console目录

cp target/rocketmq-dashboard-1.0.1-SNAPSHOT.jar /usr/local/rocketmq-console/

启动控制台:

代码语言:javascript
复制
cd /usr/local/rocketmq-console
nohup java -jar rocketmq-dashboard-1.0.1-SNAPSHOT.jar --server.port=8080 --rocketmq.config.namesrvAddr=ip1:9876 >/dev/null 2>&1 &

四、配置alb负载

消息能力主要是线上机器内网访问,配置安全组的时候配置内网即可,控制台需要开发人员本地电脑访问,考虑到安全问题,基于alb穿透到内网机器,内网机器不用暴露任何ip和端口到公网。

1.创建目标群组
2.注册目标机器
3.创建alb

创建完成后可以看到详情页有dns信息和对应A记录:

A记录可以直接拿来访问.

五、配置域名和证书

1.配置域名

到域名管理平台配置二级域名解析,配置cname类型:

2.配置证书

这里使用aws免费证书

需要按照aws的要求,将上述截图中的内容到域名管理平台配置cname解析,这里验证域名所属权,如果验证没问题,等5分钟左右,aws会颁发证书,证书状态变成已颁发:

3.配置加密访问

到alb详情页添加侦听器:

配置http协议自动转换成https协议,修改80端口的侦听器:

这样http和https协议都可以访问,并且通过http协议访问会自动转换为https协议。