04_虚拟机中间件部署_RocketMQ 5.1.4 部署、docker 安装 dashboard 可视化、JDK 21 安装

RocketMQ 5.1.4

RocketMQ 5.1.4 和 JDK 21

作用:做消息的分发、削峰填谷、异步

安装 JDK 21

因为 rockermq 是依赖于java环境的,所以虚拟机也需要有java环境,现在安装个 jdk 21.

下载解压

复制代码
得到下载地址后,用wget命令拉取即可,这里下载的是 linux 版本
wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz

解压
tar -zxvf jdk-21_linux-x64_bin.tar.gz

unzip 和 tar -zxvf 的区别

unzip 用来解压 zip 文件,tar -zxvf 用来解压 tar.gz 文件。

配置环境变量

.bash_profile 是 Bash 登录 shell 的初始化配置文件,用于设置 用户级环境变量、PATH、别名、函数,在用户登录 Linux 系统时自动执行。

Bash :Bourne Again Shell,是 Linux/Unix 系统的默认命令行解释器(Shell)

复制代码
我先全局查找下 .bash_profile 文件在哪里
sudo find / -name ".bash_profile" 2>/dev/null
复制代码
我当前的 /home/ljh 这个目录是没有这个.bash_profile配置文件的,可以自己创建一个,用于我当前登录用户 ljh 可以使用。
.bash_profile 是 Bash 登录 Shell 的初始化配置文件,用于设置用户级环境变量和启动配置

在 .bash_profile 配置文件里面添加环境变量
export JAVA_HOME=/home/ljh/nfturbo/middleware/java/jdk-21.0.10
export PATH=$JAVA_HOME/bin:$PATH

执行这个配置文件
source .bash_profile  

如图可以看到jdk的环境变量生效了,可以在任意位置查看版本号了。

虚拟机 安装 RocketMQ 5.1.4

重启命令

虚拟机重启之后,目前broker 和 nameserver 还不会自动启动,手动命令启动

复制代码
在根目录下执行这个命令:
位置: cd /home/ljh/nfturbo/middleware/rocketmq/rocketmq-all-5.1.4-bin-release

启动 name server
nohup sh bin/mqnamesrv -n "192.168.209.129:9876" &

启动 broker
nohup ./bin/mqbroker -n localhost:9876 -c conf/broker.conf autoCreateTopicEnable=true &

然后查看是否启动成功

ps -ef | grep broker

ps -ef | grep mqnamesrv

对比下就可以看到启动成功了

命令获取

官网下载地址

复制代码
wget https://dist.apache.org/repos/dist/release/rocketmq/5.1.4/rocketmq-all-5.1.4-bin-release.zip

下载后用unzip解压就行了

启动

启动name server
复制代码
在根目录下执行这个命令:
位置:/home/ljh/nfturbo/middleware/rocketmq/rocketmq-all-5.1.4-bin-release

nohup sh bin/mqnamesrv -n "192.168.209.129:9876" &

在这个启动命令在后台执行,我们就不用一直等。

nohup 是 让进程不被挂断
& 是 让进程在后台运行
移除掉偏向锁的参数
复制代码
到 /home/ljh/nfturbo/middleware/rocketmq/rocketmq-all-5.1.4-bin-release/bin 位置下的 runbroker.sh 配置文件里面,
移除掉 UseBiasedLocking 这个偏向锁的参数。
因为 偏向锁被废弃了,所以需要移除这个VM参数

vim 进去后 直接用 ? + 关键词 查找,然后回车即可。
启动Broker
复制代码
修改conf/broker.conf,加入:brokerIP1=你的ip地址

brokerIP1=192.168.209.129

直接在 RocketMQ 根目录启动即可
./bin/mqbroker -n localhost:9876 -c conf/broker.conf autoCreateTopicEnable=true

或者后台启动,然后回车即可【我用这个,不然还得重新开另一个连接】
nohup ./bin/mqbroker -n localhost:9876 -c conf/broker.conf autoCreateTopicEnable=true &

nohup → 关闭终端也不会挂掉
& → 后台运行,立即返回 shell
查看是否启动成功
复制代码
ps aux | grep broker
ps aux | grep mqnamesrv

或者

ps -ef | grep broker
ps -ef | grep mqnamesrv

ps 是 Linux/Unix 下用来查看当前系统运行进程的命令
ps aux ------ 显示系统中所有进程(BSD 风格)
ps -ef ------ 显示系统中所有进程(Unix 风格)

a:显示所有用户的进程
u:显示用户信息
x:显示没有控制终端的进程(比如后台进程)
grep 用来在文本中搜索匹配的字符串

mqnamesrv 和 broker 都有进程,表示都启动成功了

调整内存大小

复制代码
如果内存不够,修改 bin/runserver.sh 和 runbroker.sh,把内存调小一点。
我这里自己测试用的,也不用太多占内存

消息和日志存放位置

配置文件没改的话,日志和消息数据库位置


查看日志是否启动成功
1、直接查关键字
复制代码
grep "boot success" broker.log
grep "boot success" namesrv.log
2、查看 NameServer 日志 namesrv.log
复制代码
cd /home/ljh/logs/rocketmqlogs

tail -f namesrv.log

或者

tail -n 100 /home/ljh/logs/rocketmqlogs/namesrv.log

日志显示成功启动

3、查看 broker 日志 broker.log
复制代码
cd /home/ljh/logs/rocketmqlogs

tail -f broker.log

或者

tail -n 100 /home/ljh/logs/rocketmqlogs/broker.log

日志显示成功启动

4:jps -l 查看当前机器上运行的 Java 程序进程
复制代码
列出所有 Java 进程,并显示启动的主类或 jar 包路径
jps -l

可以看到 broker 和 nameserver都启动成功了

docker 安装 dashboard

为什么rockermq安装在宿主机,而dashboard 安装在docker?

因为 RocketMQ 是核心服务(高性能组件),而 Dashboard 只是一个管理工具,放容器里更方便、更安全、更解耦。

Dashboard 是运行在 Docker 容器里的 JVM,不在宿主机 JVM 进程列表中。

命令

复制代码
Docker 会从 Docker Hub 下载镜像层(layers)
下载完成后,这个镜像 不是放在当前目录,而是存储在 Docker 的 默认存储目录,由 Docker 管理。
镜像默认存储在:/var/lib/docker

docker pull apacherocketmq/rocketmq-dashboard:latest

启动:
docker run -d \
  --name rocketmq-dashboard \
  --restart unless-stopped \
  -e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.209.129:9876" \
  -p 8080:8080 \
  -t apacherocketmq/rocketmq-dashboard:latest

解释:

-d 关掉终端,容器还会继续运行
--restart unless-stopped \ 容器自动重启策略 ,除非手动停止,否则会自动重启	

-Drocketmq.namesrv.addr=192.168.209.129:9876 
 Dashboard 去连接 RocketMQ NameServer

总结:
从镜像创建一个容器,并在后台运行 RocketMQ Dashboard
Dashboard 是运行在 Docker 容器里的 Java 程序
------------------------------------------------

后面报错,重新安装了:
1、先拉取镜像
docker pull styletang/rocketmq-console-ng:latest

2、重新创建容器
docker run -d \
  --name rocketmq-dashboard \
  -e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.209.129:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" \
  -p 8080:8080 \
  -t styletang/rocketmq-console-ng	

启动失败

浏览器无法访问,开始排除问题

1、查看进程
1-1:ps -ef | grep dashboard
1-2:docker ps
1-3:直接看容器进程 docker top rocketmq-dashboard
2、查看日志
2-1:容器日志路径
复制代码
安装在docker 里面的服务的具体位置
cd /var/lib/docker/containers

问题:

为什么 docker logs -f rocketmq-dashboard 这个命令看日志有报错,

看 ad4e0f8bbf72f76f85bee782de60260d12f10bf3d33ca6b7de62aac1097f9fd8-json.log ·······这个日志没有报错,不都是 dashboard的日志吗?

回答:

复制代码
两个日志是同一来源,但看到的内容不一定完全一致,因为:

docker logs 是 Docker 解析后的流式输出
*-json.log 是 Docker 原始底层日志文件

就是这个日志也有报错,只不过是 json 格式,我没看出来而已
2-1:通过 docker 容器名字查看日志 docker logs -f rocketmq-dashboard
复制代码
docker logs 是 Docker 客户端提供的子命令,用来查看容器标准输出日志

docker logs -f rocketmq-dashboard

执行这个查询日志,Docker 会:
1、找到容器 rocketmq-dashboard
2、找到这个容器的日志驱动(默认 json-file)
3、读取:/var/lib/docker/containers/<容器ID>/<容器ID>-json.log
4、解析 JSON
5、输出人类可读内容

只查看 100 行
docker logs --tail 100 rocketmq-dashboard

可以看到报错信息了

复制代码
RocketMQ 内部调用链是:Dashboard → NameServer → Broker
Dashboard → NameServer   (查询 Broker 地址)
Dashboard → Broker       (直接通信)
1️⃣ Dashboard 先找 NameServer
2️⃣ NameServer 返回 Broker 地址
3️⃣ Dashboard 再自己去找 Broker,而不是nameserver去找broker
复制代码
这行异常是在 获取 Broker 集群信息时发生的:
说明 NameServer 已经返回了 Broker 信息,
但 Dashboard 去连接 Broker 时失败
.RemotingConnectException: connect to null failed

和 

validateObject failed, clusterInfo = null 
(Broker 集群信息获取失败,说明 Broker 根本没有连上)

可以看出在控制台上无法访问broker

这里可以看出 nameserver 已经链接上了	
ClientConfig{namesrvAddr='192.168.209.129:9876'

可能是启动控制台的时候ip地址不对。如果按照官方文档,你用的是

复制代码
docker run -d \
  --name rocketmq-dashboard \
  -e "JAVA_OPTS=-Drocketmq.namesrv.addr=127.0.0.1:9876" \
  -p 8080:8080 \
  -t apacherocketmq/rocketmq-dashboard:latest
 
----------------------------------------
这个命令只适用于一种情况:
NameServer 和 Dashboard 在同一个容器,
或者
Dashboard 直接跑在宿主机(不是 Docker)

但是现在我是:
NameServer:宿主机虚拟机
Dashboard:Docker 容器

问题:
可是我不是已经能连接到nameserver了吗,然后nameserver再去连接broker为什么会失败?

回答:
NameServer 只负责"告诉你 Broker 在哪",不做代理、不转发

RocketMQ 内部调用链是:Dashboard → NameServer → Broker

Dashboard → NameServer   (查询 Broker 地址)
Dashboard → Broker       (直接通信)

1️⃣ Dashboard 先找 NameServer
2️⃣ NameServer 返回 Broker 地址
3️⃣ Dashboard 再自己去找 Broker,而不是nameserver去找broker

那么就会有问题。因为,docker容器 是一个容器,doccker容器 与 宿主机 可以看成是两个独立的服务器,在 docker 容器内访问 127.0.0.1或localhost都是访问的这个docker容器本身,如果要访问宿主机的必须使用宿主机IP

复制代码
docker run -d \
  --name rocketmq-dashboard \
  --link rmqserver:namesrv \
  -e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.209.129:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" \
  -p 8080:8080 \
  -t styletang/rocketmq-console-ng

-----------------
解释:
Dcom.rocketmq.sendMessageWithVIPChannel=false
关闭 VIP 通道【一个 10909 的端口】

 --link rmqserver:namesrv \
 这个后面被我删掉了
 容器 rmqserver 可以用 hostname namesrv 访问,不过这里没用到,因为写了 宿主机IP。

 styletang/rocketmq-console-ng
 这个是更新的版本


重新安装成功

复制代码
 停掉并删除旧容器
docker rm -f rocketmq-dashboard

先拉取镜像
docker pull styletang/rocketmq-console-ng:latest


重新创建容器
docker run -d \
  --name rocketmq-dashboard \
  -e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.209.129:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" \
  -p 8080:8080 \
  -t styletang/rocketmq-console-ng	

拉取成功

创建容器成功

查看日志

docker logs -f rocketmq-dashboard

好像没毛病

启动已有容器
复制代码
启动已有容器
docker start rocketmq-dashboard
设置自动重启
复制代码
docker update --restart unless-stopped rocketmq-dashboard

访问成功

http://192.168.209.129:8080/#/

相关推荐
猫头虎10 天前
多项目开发环境:如何使用update-alternatives管理多版本Java JDK?(Windows、Mac、Ubuntu)
java·windows·ubuntu·macos·jdk·jdk17·jdk21
瑶山11 天前
Spring Cloud微服务搭建四、集成RocketMQ消息队列
java·spring cloud·微服务·rocketmq·dashboard
嗯嗯**17 天前
Neo4j学习1:概述、安装
学习·neo4j·概述·安装·图数据库·jdk21
WorldWelcome1 个月前
springboot3整合knife4j,并nginx映射到外网
nginx·springboot3·knife4j·jdk21
汪碧康2 个月前
【k8s-1.34.2安装部署】三.etcd-v3.6.6 TLS版集群安装
容器·kubernetes·k8s·etcd·dashboard·xkube·etcd集群部署
虚伪的空想家5 个月前
K8S的dashboard部署与访问
云原生·容器·kubernetes·k8s·web·dashboard
墨城之左6 个月前
低版本 IntelliJ IDEA 使用高版本 JDK 语言特性的问题
java·开发语言·intellij-idea·jdk21
船长@Quant6 个月前
开源的现代数据探索和可视化平台:Apache Superset 在 Kubernetes 上安装
kubernetes·dashboard·大数据可视化·apache superset·sql-lab·商业智能工具
船长@Quant6 个月前
开源的现代数据探索和可视化平台:Apache Superset 从 PyPI 安装 Superset
dashboard·pypi·大数据可视化·apache superset·sql-lab·商业智能工具