rockermq单机部署与hashboard

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

猜你喜欢

转载自blog.csdn.net/fhw925464207/article/details/131455669