Centos7&Docker搭建Rocketmq环境

方式一:Centos7方式

一、所需前置环境

二、安装前置设置
1、安装jdk 1.8(步骤省略)
下载安装包解压到对应目录(/usr/local/java/jdk1.8.0_211/bin/java),

配置环境变量即可:

#打开环境变量配置文件
vim /etc/profile

########### profile 文件中新增如下三行 ###########
export JAVA_HOME=/usr/java/jdk1.8.0_181-amd64
export CLASS_PATH="$JAVA_HOME/lib"
export PATH="$PATH:$JAVA_HOME/bin"

# 配置立刻生效
source /etc/profile

2、安装maven

(1)、下载,下载*.tar.gz

wget https://downloads.apache.org/maven/maven-3/3.8.4/binaries/apache-maven-3.8.4-bin.tar.gz  

(2)、解压,重命名、移动到想要放置的安装目录

# 解压
tar -zxvf apache-maven-3.8.4-bin.tar.gz 

# 重命名
mv apache-maven-3.8.4 maven

# 移动maven到/usr/local/
mv maven /usr/local/

# 修改maven配置文件,添加阿里云仓库
    <mirror> 
         <id>alimaven</id> 
         <name>aliyun maven</name> 
         <url>https://maven.aliyun.com/nexus/content/groups/public/</url> 
         <mirrorOf>central</mirrorOf> 
     </mirror>
# 如果jar拉取不下来,可以换成maven仓库
    <mirror> 
         <id>maven2</id> 
         <name>maven2</name> 
         <url>https://repo1.maven.org/maven2/</url> 
         <mirrorOf>central</mirrorOf> 
     </mirror>

# 配置环境变量
vim /etc/profile

# profile 文件中新增如下两行
export  MAVEN_HOME=/usr/local/maven
export PATH=$PATH:$MAVEN_HOME/bin

# 配置立刻生效
source /etc/profile

# 检验是否安装成功
mvn -v

三、安装RocketMQ

1、下载

从github下载(下载zip包)

源码zip源码包:源码包(4.9.2版本)
下载扩展包(由原来的rocketmq-console,独立处了单独项目):扩展包(页面控制台)
2、启动mqnamesrv服务

# 解压源码包
unzip rocketmq-rocketmq-all-4.9.2.zip
# 进入解压的源码包
cd rocketmq-rocketmq-all-4.9.2
# 编译源码
mvn -Prelease-all -DskipTests clean install -U
# 找到编译后的文件包(distribution/target/rocketmq-4.9.2)
cd distribution/target
# 将rocketmq-4.9.2重新命名为rocketmq并且移动到/usr/local/下
mv rocketmq-4.9.2 rocketmq
mv rocketmq /usr/local/
# 进入bin目录并启动mqnamesrv服务(如果启动失败,可打开runserver.sh,把最小需要内存4G调小)
cd /usr/local/rocketmq/bin
./mqnamesrv

3、启动mqbroker服务

# 重新打开shell窗口,启动mqbroker服务
cd /usr/local/rocketmq/bin
./mqbroker

注意:如果启动报如下错误,说明内存不足,可调小runbroker.sh里面设置的最小需要内存
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000005c0000000, 8589934592, 0) failed; error='Cannot allocate memory' (errno=12)

查看runbroker.sh文件,可以看到,启动mqbroker至少需要8g内存 

JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g"

解决方案: 

# 进入runbroker.sh
vim runbroker.sh
# 修改最小需要启动内存大小为
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m"
# 重新启动mqbroker服务,并且连接到注册中心,否则控制台找不到broker
./mqbroker -n localhost:9876

如果找不到主机,可修改host添加一条对应
vim /etc/hosts
如果需要支持sql过滤需要在,broker.conf配置文件里面增加一条配置
enablePropertyFilter=true
同时启动的时候需要加上配置文件(conf目录)
../bin/mqbroker -n localhost:9876 -c broker.conf

4、添加测试配置

添加mqnamesrv环境变量,尽量添加到export一起
vi tools.sh
export NAMESRV_ADDR=localhost:9876

测试消息生产消费:
生产: 
./tools.sh org.apache.rocketmq.example.quickstart.Producer
消费:
./tools.sh org.apache.rocketmq.example.quickstart.Consumer

5、启动扩展服务databoard,web控制台

# 解压下载的扩展文件rocketmq-dashboard-master.zip
unzip rocketmq-dashboard-master.zip
# 进入解压文件,并进入到rocketmq-console
cd rocketmq-dashboard-master
# 控制台为springboot项目,修改application.properties配置,设置注册中心地址
rocketmq.config.namesrvAddr=127.0.0.1:9876

# 执行编译
mvn clean package -Dmaven.test.skip=true
# 找到编译后的rocketmq-dashboard-1.0.1-SNAPSHOT.jar
#并复制到/usr/local/rocketmq-dashboard(需要新建rocketmq-dashboard)
cd target
cp rocketmq-dashboard-1.0.1-SNAPSHOT.jar /usr/local/rocketmq-dashboard/
# 进入 /usr/local/rocketmq-dashboard/,启动web服务
cd /usr/local/rocketmq-dashboard/
java -jar rocketmq-dashboard-1.0.1-SNAPSHOT.jar
# 如果要后台启动,使用
nohup java -jar rocketmq-dashboard-1.0.1-SNAPSHOT.jar

遇到的问题:

[INFO] Downloading https://nodejs.org/dist/v16.2.0/node-v16.2.0-linux-x64.tar.gz to /root/.m2/repository/com/github/eirslett/node/16.2.0/node-16.2.0-linux-x64.tar.gz
[INFO] No proxies configured
[INFO] No proxy was configured, downloading directly

有可能因为网络原因,在编译下载node-v16.2.0-linux-x64.tar.gz的时候会下载不下来,此时可进行手动下载https://nodejs.org/dist/v16.2.0/node-v16.2.0-linux-x64.tar.gz,然后传到服务其上,并且放置到相应的位置/root/.m2/repository/com/github/eirslett/node/16.2.0/,并且把文件名称由node-v16.2.0-linux-x64.tar.gz修改为node-16.2.0-linux-x64.tar.g,符合编译需要,然后重新编译,执行上面的步骤

服务启动后即可浏览器访问web控制台,ip:8080(默认端口8080)

如果启动后,启动日志报错
Caused by: org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to null failed

解决方法:

# 找到broker.conf 文件(rocketmq/conf/broker.conf),新增如下两行
namesrvAddr=127.0.0.1:9876
# 指定的ip地址即是linux本身的IP地址
brokerIP1=10.118.241.145

# 重新启动mqnamesrv和mqbroker以及rocketmq-console服务
./mqnamesrv    
./mqbroker -n localhost:9876 -c ../conf/broker.conf
java -jar rocketmq-dashboard-1.0.1-SNAPSHOT.jar

# 后台启动方式
./mqnamesrv &    
./mqbroker -n localhost:9876 -c ../conf/broker.conf &
nohup java -jar rocketmq-dashboard-1.0.1-SNAPSHOT.jar --rocketmq.config.namesrvAddr=localhost:9876 > console-ng.log 2>&1&

四、遇到的坑

启动官网给的测试程序发送消息之前,需要开启默认服务端口号(9876),以及rocketmq的vip端口号,否则,发送消息会报错

vip端口号查看方式,打开rocketmq-console控制页面

开启响应端口号即可

firewall-cmd --zone=public --add-port=9876/tcp --permanent
firewall-cmd --zone=public --add-port=10911/tcp --permanent
firewall-cmd --reload

配置完成,重新启动控制台没有报错,去找个官网producer例子去发送消息,结果由于使用的是虚拟机,磁盘比较小,达到了91%使用率,程序报错,意思是磁盘大小不足

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.91 CQ:  0.91 INDEX:  0.91], messages are put to the slave, message store has been shut down, etc. BROKER: 10.118.241.145:10911

由于rocketmq默认会把剩余磁盘的比率不足75%(rocketmq版本不同这个比率好像不一样)当做磁盘空间不足处理

解决方式:

1、扩大磁盘

2、设置borker.conf增大报磁盘不足的阈值

vim broker.conf
# 在文件新增一行配置,磁盘使用率达到99%才允许报磁盘不足
diskMaxUsedSpaceRatio=99

然后,重新启动broker服务 ,再次发送消息,成功发送
注意:producer发送消息代码编写时,发送完消息不要调用shutdown,否则web控制台在producer页面查询时会查询不到

# 生产环境一定要注释掉
//producer.shutdown();

至此,整个简单的搭建过程完成 

方式二:Docker方式

1、拉取镜像创建namesrv服务

docker pull rocketmqinc/rocketmq

创建namesrv数据存储路径

mkdir -p  /data/docker/rocketmq/data/namesrv/logs   /data/docker/rocketmq/data/namesrv/store

构建容器

docker run -d \
--restart=always \
--name rmqnamesrv \
-p 9876:9876 \
-v /data/docker/rocketmq/data/namesrv/logs:/root/logs \
-v /data/docker/rocketmq/data/namesrv/store:/root/store \
-e "MAX_POSSIBLE_HEAP=100000000" \
rocketmqinc/rocketmq \
sh mqnamesrv 

2、创建Broker节点

创建broker数据存储路径

mkdir -p  /data/docker/rocketmq/data/broker/logs /data/docker/rocketmq/data/broker/store /data/docker/rocketmq/conf

创建broker读取配置文件

vi /data/docker/rocketmq/conf/broker.conf

配置文件内容如下: 

# 所属集群名称,如果节点较多可以配置多个
brokerClusterName = DefaultCluster
#broker名称,master和slave使用相同的名称,表明他们的主从关系
brokerName = broker-a
#0表示Master,大于0表示不同的slave
brokerId = 0
#表示几点做消息删除动作,默认是凌晨4点
deleteWhen = 04
#在磁盘上保留消息的时长,单位是小时
fileReservedTime = 48
#有三个值:SYNC_MASTER,ASYNC_MASTER,SLAVE;同步和异步表示Master和Slave之间同步数据的机制;
brokerRole = ASYNC_MASTER
#刷盘策略,取值为:ASYNC_FLUSH,SYNC_FLUSH表示同步刷盘和异步刷盘;SYNC_FLUSH消息写入磁盘后才返回成功状态,ASYNC_FLUSH不需要;
flushDiskType = ASYNC_FLUSH
# 设置broker节点所在服务器的ip地址
brokerIP1 = 192.168.2.115
# 开启权限认证
#aclEnable=true

若要开启权限认证需要创建plain_acl.yml

vi /data/docker/rocketmq/conf/plain_acl.yml

配置用户权限

globalWhiteRemoteAddresses:
accounts:
- accessKey: RocketMQ
  secretKey: 123456
  whiteRemoteAddress:
  admin: false
  defaultTopicPerm: DENY
  defaultGroupPerm: SUB
  topicPerms:
  # 用户RocketMQ只能发送TopicTest的消息,其他topic无权限发送
  - TopicTest=PUB
  groupPerms:
  # the group should convert to retry topic
  - oms_consumer_group=DENY
- accessKey: admin
  secretKey: 123456
  whiteRemoteAddress:
  # if it is admin, it could access all resources
  admin: true

构建broker容器

非开启权限方式:(推荐)

docker run -d  \
--restart=always \
--name rmqbroker \
--link rmqnamesrv:namesrv \
-p 10911:10911 \
-p 10909:10909 \
-v /data/docker/rocketmq/data/broker/logs:/root/logs \
-v /data/docker/rocketmq/data/broker/store:/root/store \
-v /data/docker/rocketmq/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf \
-e "NAMESRV_ADDR=namesrv:9876" \
-e "MAX_POSSIBLE_HEAP=200000000" \
rocketmqinc/rocketmq \
sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf 

开启权限方式:

docker run -d  \
--restart=always \
--name rmqbroker \
--link rmqnamesrv:namesrv \
-p 10911:10911 \
-p 10909:10909 \
-v /data/docker/rocketmq/data/broker/logs:/root/logs \
-v /data/docker/rocketmq/data/broker/store:/root/store \
-v /data/docker/rocketmq/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf \
-v /data/docker/rocketmq/conf/plain_acl.yml:/opt/rocketmq-4.4.0/conf/plain_acl.yml \
-e "NAMESRV_ADDR=namesrv:9876" \
-e "MAX_POSSIBLE_HEAP=200000000" \
rocketmqinc/rocketmq \
sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf 

3、创建rockermq-console服务

拉取镜像

docker pull pangliang/rocketmq-console-ng

构建rockermq-console-ng容器

docker run -d \
--restart=always \
--name rmqadmin \
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.2.115:9876 \
-Dcom.rocketmq.sendMessageWithVIPChannel=false" \
-p 9999:8080 \
pangliang/rocketmq-console-ng

访问:ip:9999即可访问控制台

 若需要开启管理页面登录,在/data/docker/rocketmq/dashboard文件夹下创建users.properties文件,更新了用户名/密码无须重启就能生效

# This file supports hot change, any change will be auto-reloaded without Console restarting.
# Format: a user per line, username=password[,N] #N is optional, 0 (Normal User); 1 (Admin)
 
# Define Admin
# =============用户名和密码规则「用户名=密码,权限」,这里的权限为1表示管理员,为0表示普通用户=============
# 例如:admin=admin123,1
admin=admin,1
user=user,0
 
 
# Define Users
# =============屏蔽下边两个账户=============
#user1=user1
#user2=user2

先删除启用的启动的dashboard实例,然后重启创建容器

docker run -d \
--restart=always \
--name rmqadmin -v /data/docker/rocketmq/dashboard:/tmp/rocketmq-console/data \
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.2.115:9876 \
-Dcom.rocketmq.sendMessageWithVIPChannel=false \
-Drocketmq.config.loginRequired=true" \
-p 9999:8080 \
pangliang/rocketmq-console-ng

容器启动后访问控制台需要登录账号访问:

 到这里centos7搭建以及docker搭建rocketmq教程结束。

猜你喜欢

转载自blog.csdn.net/qq_21875331/article/details/121530927