rockermq单机部署与hashboard
官网地址:https://rocketmq.apache.org/
配置java环境(略)
1.下载安装Apache RocketMQ
ROCKETMQ下载
RocketMQ 的安装包分为两种,二进制包和源码包。
源码包需要编译构建出二进制文件。
二进制包是已经编译完成后可以直接运行的。
解压下载的源码包并编译构建二进制可执行文件
$ mvn -Prelease-all -DskipTests -Dspotbugs.skip=true clean install -U
$ cd distribution/target/rocketmq-4.9.4/rocketmq-4.9.4
1.1创建存储路径(根据自己的磁盘情况)
mkdir store
mkdir store/commitlog
mkdir store/consumequeue
mkdir store/index
1.2配置文件
配置文件中可以指定store的路径,不设置的话,消息存储在本地文件系统中,默认在当前用户家目录下的store目录中。
abort: broker启动之后自动创建,正常关闭broker会自动删除.如果在没有启动Broker出现这个文件说明之前broker非正常关闭
checkpoint: 存储着commitlog consumequeue index文件的最后刷盘时间戳
commitlog: 消息真实存储的文件
config: broker运行期间的配置数据
consumequeue: 队列信息存放在该目录
Index: 存在消息索引文件IndexFile
lock: 运行期间使用的全局锁资源
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker 名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=0
# 当前broker监听的IP地址 多网卡的时候需要
brokerIP1=127.0.0.1
# Broker 对外服务的监听端口
listenPort=10911
-------------------------------这部分根据情况配置使用-------------------------
#主要用于slave同步master 默认listenPort - 2
fastListenPort=10909
#haService中使用 默认listenPort + 1
haListenPort=10912
# 鉴权
aclEnable=true
------------------------------- ------------------------
#nameServer 地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#是否允许 Broker 自动创建 Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#在发送消息时,自动创建服务器不存在的 topic,默认创建的队列数
defaultTopicQueueNums=4
#删除文件时间点,默认凌晨 4 点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog 每个文件的大小默认 1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue 每个文件默认存 30W 条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制 Master
#- SYNC_MASTER 同步双写 Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128
ACL配置(aclEnable=true
时配置)在aclEnable=true
时配置,修改plain_acl.yml
globalWhiteRemoteAddresses:
accounts:
- accessKey: RocketMQ
secretKey: 12345678
whiteRemoteAddress:
admin: false
defaultTopicPerm: DENY
defaultGroupPerm: SUB
topicPerms:
- TopicTest=PUB
groupPerms:
# the group should convert to retry topic
- oms_consumer_group=DENY
- accessKey: admin
secretKey: 12345678
whiteRemoteAddress:
# if it is admin, it could access all resources
admin: true
# RocketMQ有个bug,admin默认权限不对,所以下面默认给发布和订阅权限
defaultTopicPerm: PUB|SUB
defaultGroupPerm: PUB|SUB
上面的配置示例,结果为:
- PUB是发布权限,SUB是订阅权限、也就是消费权限,按需配置,可以分发布用户和订阅用户,也可以一个用户拥有PUB|SUB权限
- 用户RocketMQ普通用户,分配的权限为只能发送TopicTest的消息,其他topic无权限发送;拒绝oms_consumer_group消费组的消息消费,其他消费组默认可消费。
- 用户admin是管理员用户,权限最大
tools.yml
accessKey: 普通用户accessKey
secretKey: 普通用户secretKey
1.3修改日志配置文件存存储位置
# mkdir -p /usr/local/rocketmq/logs
# cd /usr/local/rocketmq/conf && sed -i 's#${user.home}#/usr/local/rocketmq#g' *.xml
1.4修改启动脚本参数 默认8G
vim /usr/local/rocketmq/bin/runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m -XX:PermSize=128m -XX:MaxPermSize=320m"
vim /usr/local/rocketmq/bin/runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m -XX:PermSize=128m -XX:MaxPermSize=320m"
2. 启动NameServer
安装完RocketMQ包后,我们启动NameServer
### 后台启动namesrv
$ nohup sh bin/mqnamesrv &
### 后台启动namesrv,指定日志输出
$ nohup sh bin/mqnamesrv > namesrc.log 2>&1 &
### 验证namesrv是否启动成功
$ tail -f ~/logs/rocketmqlogs/namesrv.log
The Name Server boot success...
我们可以在namesrv.log 中看到 ‘The Name Server boot success…’, 表示NameServer 已成功启动。
备注:修改namesrv端口
# 修改conf目录下有这个文件namesrv.properties,添加内容
listenPort=端口号
# 如果下载的rocketmq版本没有这个文件,那就在conf目录下新建一个nameserver.conf,添加内容
listenPort=端口号
# 然后启动namesrv是指定配置文件
nohup sh bin/mqnamesrv -c conf/nameserver.conf >namesrc.log 2>&1 &
2.1检测启动情况
[root@localhost rocketmq]# jps
47108 Jps
46220 NamesrvStartup
3. 启动Broker
NameServer成功启动后,我们启动Broker
### 先启动broker
$ nohup sh bin/mqbroker -n localhost:9876 &
### 后台启动namesrv,指定日志输出 -c 指定配置文件
$ nohup sh bin/mqbroker -c conf/broker.conf >broker.log 2>&1 &
### 验证broker是否启动成功, 比如, broker的ip是192.168.1.2 然后名字是broker-a
$ tail -f ~/logs/rocketmqlogs/Broker.log
The broker[broker-a,192.169.1.2:10911] boot success...
我们可以在 Broker.log 中看到“The broker[brokerName,ip:port] boot success…”,这表明 broker 已成功启动。
至此,一个单Master的RocketMQ集群已经部署起来了,我们可以利用脚本进行简单的消息收发。
4. 消息收发测试
在进行消息收发之前,我们需要告诉客户端NameServer的地址,RocketMQ有多种方式在客户端中设置NameServer地址,这里我们利用环境变量NAMESRV_ADDR
$ export NAMESRV_ADDR=localhost:9876
$ sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
SendResult [sendStatus=SEND_OK, msgId= ...
# 成功最后的两行日志
07:06:35.589 [NettyClientSelector_1] INFO RocketmqRemoting - closeChannel: close the connection to remote address[127.0.0.1:9876] result: true
07:06:35.596 [NettyClientSelector_1] INFO RocketmqRemoting - closeChannel: close the connection to remote address[192.168.1.160:10911] result: true
# 会接受上面发送的1000条数据
$ sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
ConsumeMessageThread_%d Receive New Messages: [MessageExt...
到此,单机版本的MQ部署完成
5. 部署RocketMQ控制台
# 下载源码包 # yum install -y git maven
git clone https://github.com/apache/rocketmq-dashboard.git
cd rocketmq-dashboard
# 修改文件位置:/app/rocketmq-dashboard/src/test/resources
mvn clean package -Dmaven.test.skip=true
5.1配置RocketMQ控制台用户密码
下载源码 https://github.com/apache/rocketmq-dashboard.git
修改 application.properties 内容如下
server.address=0.0.0.0
# =============修改端口为19876=============
server.port=19876
### SSL setting
#server.ssl.key-store=classpath:rmqcngkeystore.jks
#server.ssl.key-store-password=rocketmq
#server.ssl.keyStoreType=PKCS12
#server.ssl.keyAlias=rmqcngkey
#spring.application.index=true
spring.application.name=rocketmq-console
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
logging.level.root=INFO
logging.config=classpath:logback.xml
#if this value is empty,use env value rocketmq.config.namesrvAddr NAMESRV_ADDR | now, you can set it in ops page.default localhost:9876
# =============修改namesrv地址,如果是多个请以分号;分隔(此处修改成你自己安装的rocket namesrv地址ip即可)=============
rocketmq.config.namesrvAddr=10.211.55.11:9876
#if you use rocketmq version < 3.5.8, rocketmq.config.isVIPChannel should be false.default true
rocketmq.config.isVIPChannel=
#rocketmq-console's data path:dashboard/monitor
rocketmq.config.dataPath=/tmp/rocketmq-console/data
#set it false if you don't want use dashboard.default true
rocketmq.config.enableDashBoardCollect=true
#set the message track trace topic if you don't want use the default one
rocketmq.config.msgTrackTopicName=
rocketmq.config.ticketKey=ticket
#Must create userInfo file: ${rocketmq.config.dataPath}/users.properties if the login is required
# =============开启控制台账户密码登录(为true表示开启,为false表示关闭)=============
rocketmq.config.loginRequired=true
#set the accessKey and secretKey if you used acl
#rocketmq.config.accessKey=
#rocketmq.config.secretKey=
修改 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
这是用户名=这是密码,1
# Define Users
# =============屏蔽下边两个账户=============
#user1=user1
#user2=user2
打包
mvn clear package -Dmaven.test.skip=true
启动
# 后台运行
nohup java -jar rocketmq-console-ng-1.0.1.jar >console.log 2>&1 &
5.2 配合broker开启ACL
如果在broker配置文件中开启了ACL,这里的dashboard配置文件注意配置accessKey、secretKey,建议配置admin的账户,不然有些功能没有权限使用
#set the accessKey and secretKey if you used acl
#rocketmq.config.accessKey= # if version > 4.4.0
#rocketmq.config.secretKey= # if version > 4.4.0
6. 关闭服务
完成实验后,我们可以通过以下方式关闭服务
$ sh bin/mqshutdown broker
The mqbroker(36695) is running...
Send shutdown request to mqbroker(36695) OK
$ sh bin/mqshutdown namesrv
The mqnamesrv(36664) is running...
Send shutdown request to mqnamesrv(36664) OK