【Linux】RocketMQ 部署
系统要求
系统要求
1、64位操作系统,推荐 Linux/Unix/macOS
2、64位 JDK 1.8+
3、官网文档
安装部署
下载
这里使用release免编译版本
# 解压$ unzip rocketmq-all-5.1.0-source-release.zip# 打开文件夹$ cd rocketmq-all-5.1.0-source-release/启动NameServer
### 启动namesrv$ nohup sh bin/mqnamesrv &
### 验证namesrv是否启动成功$ tail -f ~/logs/rocketmqlogs/namesrv.logThe Name Server boot success...我们可以在namesrv.log 中看到
The Name Server boot success.., 表示NameServer 已成功启动。
启动Broker+Proxy
NameServer成功启动后,我们启动Broker和Proxy,5.x 版本下我们建议使用 Local 模式部署,即 Broker 和 Proxy 同进程部署。5.x 版本也支持 Broker 和 Proxy 分离部署以实现更灵活的集群能力。
### 先启动broker$ nohup sh bin/mqbroker -n localhost:9876 --enable-proxy &
### 验证broker是否启动成功, 比如, broker的ip是192.168.1.2 然后名字是broker-a$ tail -f ~/logs/rocketmqlogs/proxy.logThe broker[broker-a,192.169.1.2:10911] boot success...我们可以在 proxy.log 中看到
The broker[brokerName,ip:port] boot success..,这表明 broker 已成功启动。
工具测试消息收发
$ export NAMESRV_ADDR=localhost:9876$ sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer SendResult [sendStatus=SEND_OK, msgId= ...$ sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer ConsumeMessageThread_%d Receive New Messages: [MessageExt...dashboard(非必须)
安装
安装 dashboard,需要编译源代码. 源码github 地址
下载之后,修改 application.yml 参数,我这里只修改了 Name Server 地址:
rocketmq: config: namesrvAddrs: - 127.0.0.1:9876 - 47.xx.xx.xx:9876然后执行 Maven 打包命令,打出 jar 包:
mvn clean package -Dmaven.test.skip=true打好 jar 包后上传到服务器,执行下面命令启动:
java -jar rocketmq-dashboard-1.0.1-SNAPSHOT.jar测试
浏览器输入 http://127.0.0.1:8080/
Docker 部署
创建namesrv服务
拉取镜像
docker pull apache/rocketmq创建namesrv数据存储路径
mkdir -p /docker/rocketmq/data/namesrv/logs /docker/rocketmq/data/namesrv/store构建namesrv容器
docker run -d \--restart=always \--name rmqnamesrv \-p 9876:9876 \-v /docker/rocketmq/data/namesrv/logs:/root/logs \-v /docker/rocketmq/data/namesrv/store:/root/store \-e "MAX_POSSIBLE_HEAP=100000000" \apache/rocketmq \sh mqnamesrv-restart=always| docker重启时候容器自动重启
-name rmqnamesrv | 把容器的名字设置为rmqnamesrv
-p 9876<9876>9876>| 把容器内的端口9876挂载到宿主机9876上面
-v /docker/rocketmq/data/namesrv/logs:/root/logs | 把容器内的/root/logs日志目录挂载到宿主机的 /docker/rocketmq/data/namesrv/logs目录
-v /docker/rocketmq/data/namesrv/store:/root/store | 把容器内的/root/store数据存储目录挂载到宿主机的 /docker/rocketmq/data/namesrv目录 rmqnamesrv | 容器的名字
-e “MAX_POSSIBLE_HEAP=100000000” | 设置容器的最大堆内存为100000000
apache/rocketmq | 使用的镜像名称
sh mqnamesrv | 启动namesrv服务
创建broker节点
创建broker数据存储路径
mkdir -p /docker/rocketmq/data/broker/logs /docker/rocketmq/data/broker/store /docker/rocketmq/conf创建配置文件
注意修改
brokerIP1 = 172.18.88.54中ip地址。
vi /docker/rocketmq/conf/broker.conf# 所属集群名称,如果节点较多可以配置多个brokerClusterName = DefaultCluster#broker名称,master和slave使用相同的名称,表明他们的主从关系brokerName = broker-a#0表示Master,大于0表示不同的slavebrokerId = 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 = 172.18.88.54# 磁盘使用达到95%之后,生产者再写入消息会报错 CODE: 14 DESC: service not available now, maybe disk fulldiskMaxUsedSpaceRatio=95构建broker容器
docker run -d \--restart=always \--name rmqbroker \--link rmqnamesrv:namesrv \-p 10911:10911 \-p 10909:10909 \-v /docker/rocketmq/data/broker/logs:/root/logs \-v /docker/rocketmq/data/broker/store:/root/store \-v /docker/rocketmq/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf \-e "NAMESRV_ADDR=namesrv:9876" \-e "MAX_POSSIBLE_HEAP=200000000" \apache/rocketmq \sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf-name rmqbroker | 把容器的名字设置为rmqbroker
–link rmqnamesrv:namesrv | 和rmqnamesrv容器通信
-p 10911<10911>10911> | 把容器的非vip通道端口挂载到宿主机
-p 10909<10909>10909> | 把容器的vip通道端口挂载到宿主机
-e “NAMESRV_ADDR=namesrv<9876>9876>” | 指定namesrv的地址为本机namesrv的ip地址<9876>9876>
-e “MAX_POSSIBLE_HEAP=200000000” rocketmqinc/rocketmq sh mqbroker |指定broker服务的最大堆内存
rocketmqinc/rocketmq | 使用的镜像名称
sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf | 指定配置文件启动broker节点
创建rockermq-console服务
拉取镜像
docker pull pangliang/rocketmq-console-ng构建rockermq-console容器
需要替换
192.168.52.136为实际ip地址
docker run -d \--restart=always \--name rmqadmin \-e "JAVA_OPTS=-Drocketmq.namesrv.addr=172.18.88.54:9876 \-Dcom.rocketmq.sendMessageWithVIPChannel=false" \-p 10010:8080 \pangliang/rocketmq-console-ng-restart=always| docker重启时候镜像自动重启
-name rmqadmin | 把容器的名字设置为rmqadmin
-e “JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.52.136<9876>9876> | 设置namesrv服务的ip地址
-Dcom.rocketmq.sendMessageWithVIPChannel=false” | 不使用vip通道发送消息
–p 10010<8080>8080> | 把容器内的端口8080挂载到宿主机上的9999端口
开放端口 9876/10911/10010
创建系统服务
1、 编写管理脚本命令,vi /etc/init.d/rocketmq
#!/bin/sh## rocketmq - this script starts and stops the rocketmq daemon## chkconfig: - 85 15
ROCKETMQ_HOME=/home/sys_wh/soft/rocketmq-5.1.4ROCKETMQ_BIN=${ROCKETMQ_HOME}/binADDR=192.168.0.75:9876LOG_DIR=${ROCKETMQ_HOME}/logs
start() {if [ ! -d ${LOG_DIR} ];thenmkdir ${LOG_DIR}ficd ${ROCKETMQ_HOME}nohup sh bin/mqnamesrv > ${LOG_DIR}/mqnamesrv.log 2>&1 &echo -n "The Name Server boot success..."nohup sh bin/mqbroker -c ${ROCKETMQ_HOME}/conf/broker.conf >${LOG_DIR}/broker.log 2>&1 &echo -n "The broker[%s, ${ADDR}] boot success..."}stop() {cd ${ROCKETMQ_HOME}sh bin/mqshutdown brokersleep 1sh bin/mqshutdown namesrv}restart() {stopsleep 5start}
case "$1" instart)start;;stop)stop;;restart)restart;;*)echo $"Usage: $0 {start|stop|restart}"exit 2esac注意:
1.1 注: 复制这个脚本到Linux可能会丢失最上面的一部分,不知道为什么,通过xshell打开Linux,然后复制这些内容到文件中,会丢失一部分,自己复制过去以后检查清楚是否丢失一些内容。不然就算注册成一个服务也没法用。
1.2 ROCKETMQ_HOME的地址、利用nohup启动broker是指定启动的配置文件都要写对
2、将rocketmq服务添加为开机启动服务
chmod +x /etc/init.d/rocketmq
chkconfig --add rocketmq再运行chkconfig —list查看是否出现以下内容,出现则代表加入成功了
注:若出现下图0-6都是关,那代表还不能开机自启,再运行 chkconfig rocketmq on,然后再运行chkconfig —list以后2-5都是开以后才行。
[root@host-172-20-42-212 rocketmq-5.1.2]# chkconfig --list
Note: This output shows SysV services only and does not include native systemd services. SysV configuration data might be overridden by native systemd configuration.
If you want to list systemd services use 'systemctl list-unit-files'. To see services enabled on particular target use 'systemctl list-dependencies [target]'.
rocketmq 0:off 1:off 2:off 3:off 4:off 5:off 6:off3、通过service命令来管理rocketmq
# 启动service rocketmq start# 关闭service rocketmq stop# 重启service rocketmq restart-- 启动namesrvnohup sh /home/sys_wh/soft/rocketmq-5.1.4/bin/mqnamesrv > /home/sys_wh/soft/rocketmq-5.1.4/logs/mqnamesrv.log 2>&1 &-- 验证是否成功tail -f /home/sys_wh/soft/rocketmq-5.1.4/logs/mqnamesrv.log-- 启动brokernohup sh /home/sys_wh/soft/rocketmq-5.1.4/bin/mqbroker -c /home/sys_wh/soft/rocketmq-5.1.4/conf/broker.conf >/home/sys_wh/soft/rocketmq-5.1.4/logs/broker.log 2>&1 &-- 验证是否成功tail -f /home/sys_wh/soft/rocketmq-5.1.4/logs/broker.log
--停止brokersh /home/sys_wh/soft/rocketmq-5.1.4/bin/mqshutdown broker--停止 namesrvsh /home/sys_wh/soft/rocketmq-5.1.4/bin/mqshutdown namesrv-- 启动管理平台nohup java -jar rocketmq-dashboard-1.0.0.jar > dashboard.log 2>&1 &4、设置密码
4.1 开启acl控制
在conf/broker.conf中开启aclEnable=true
vim conf/broker.conf# 最下面增加下面一行aclEnable=true4.2 配置账号密码
修改conf/plain_acl.yml
accounts: # 管理员账号/密码 accessKey: catsicrocketmq secretKey: Catsic1qsx@WDC4.3 配置面板中的密码
在dashboard.jar包同级目录创建config文件夹,将项目底下的application.properties上传到config文件夹下,将注释放开,设置对应的账号密码。修改后重启
rocketmq.config.accessKey=catsicrocketmqrocketmq.config.secretKey=Catsic1qsx@WDC4.4 当前,已经为RocketMQ设置了密码,但是,还存在问题,操作面板没有设置密码,操作面板没有设置密码,在实际应用中,也是很危险的。下面讲解面板设置密码:
4.5 开启账号密码访问
# 修改application.properties# 是否开启账号密码验证rocketmq.config.loginRequired= true# 账号密码配置文件为:users.properties,将users.properties上传到config目录,修改内容为# ,1 为管理员,不加为普通用户catstiMQ=catsti1qaz@WSX,1# 修改默认用户配置文件路径vim application.properties# 将其修改为:rocketmq.config.dataPath=./config# 重启dashboard支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!
小王的博客














