在 2核4G(2c4g)的服务器 上部署 RocketMQ 是可行的,但需要根据资源限制进行适当调整和优化。以下是详细的部署步骤和注意事项:
📌 一、环境准备
1. 操作系统
推荐使用 Linux 系统(如 CentOS、Ubuntu),因为 RocketMQ 原生支持 Linux。
2. Java 环境
RocketMQ 需要 Java 8 或以上版本。
java -version
如果没有安装 Java,可以使用如下命令安装(以 Ubuntu 为例):
sudo apt update
sudo apt install openjdk-8-jdk -y
设置 JAVA_HOME:
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
📌 二、下载 RocketMQ
从 Apache 官网 下载合适版本(推荐使用稳定版):
wget https://archive.apache.org/dist/rocketmq/4.9.4/apache-rocketmq-all-bin-release.zip
unzip apache-rocketmq-all-bin-release.zip -d /usr/local/rocketmq
📌 三、启动 NameServer 和 Broker
1. 启动 NameServer(默认内存配置可能过高)
由于是 2c4G 的机器,建议降低 JVM 内存参数。
修改启动脚本中的 JVM 参数(避免 OOM):
cd /usr/local/rocketmq/bin
vim runserver.sh
修改以下内容(根据你的实际路径):
# 原来可能是:
JAVA_OPT="${JAVA_OPT} -Xms4g -Xmx4g"
# 修改为:
JAVA_OPT="${JAVA_OPT} -Xms256m -Xmx256m"
然后启动 NameServer:
nohup ./mqnamesrv &
查看日志确认是否启动成功:
tail -f logs/startup.log
2. 启动 Broker
同样修改 runbroker.sh 中的 JVM 参数:
vim runbroker.sh
将:
JAVA_OPT="${JAVA_OPT} -Xms8g -Xmx8g"
改为:
JAVA_OPT="${JAVA_OPT} -Xms512m -Xmx512m"
然后启动 Broker(单机模式):
nohup ./mqbroker -n localhost:9876 -c ../conf/broker.conf &
如果出现内存不足问题,还可以进一步调小
-Xms和-Xmx,比如到 256m。
📌 四、解决本地 IP 问题(关键!)
RocketMQ 默认会使用本地网卡 IP 注册,但在云服务器中可能会注册成内网 IP,导致客户端无法连接。
解决方法:在 broker.conf 中添加:
brokerIP1=你的公网IP
同时关闭自动注册本机 IP:
useLocalIP=false
也可以在启动命令中指定:
./mqbroker -n localhost:9876 -c ../conf/broker.conf -b 你的公网IP:10911
📌 五、测试生产与消费消息
RocketMQ 自带了示例生产者和消费者程序,可以测试是否正常工作。
设置环境变量(可选):
export NAMESRV_ADDR=localhost:9876
生产消息:
export NAMESRV_ADDR=localhost:9876
./tools.sh org.apache.rocketmq.example.quickstart.Producer
消费消息:
./tools.sh org.apache.rocketmq.example.quickstart.Consumer
📌 六、常见问题与优化建议
❗1. 内存不足(OOM)
- 调整
runserver.sh和runbroker.sh中的 JVM 参数。 - 可以考虑使用更轻量级的消息队列(如 ActiveMQ Artemis)用于低配服务器。
❗2. 磁盘空间不足
- RocketMQ 默认会写入大量日志文件,建议定期清理或挂载大容量磁盘。
- 修改存储路径(在
broker.conf中):
storePathRootDir=/data/rocketmq/store
storePathCommitLog=/data/rocketmq/store/commitlog
❗3. 不允许X_X访问
- 检查防火墙设置,确保开放端口:
9876(NameServer)10911(Broker)10909(Broker HA)
✅ 七、总结
| 项目 | 推荐值 |
|---|---|
| NameServer JVM 内存 | -Xms256m -Xmx256m |
| Broker JVM 内存 | -Xms512m -Xmx512m |
| 存储目录 | 自定义路径(如 /data/rocketmq/store) |
| 是否适合生产? | 单节点不建议用于高并发生产环境,可用于开发测试或低频业务 |
如果你有更多需求,例如集群部署、Docker 化部署、持久化、监控等,我也可以继续为你提供详细方案。欢迎继续提问!
秒懂云