devops/rocketmq/README.md

217 lines
5.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# RocketMQ 安装指南
本目录包含在 Kubernetes 集群中安装 RocketMQ 的配置文件。
## 文件说明
- `install-rocketmq.sh` - RocketMQ 安装脚本
- `rocketmq-nameserver-deployment.yaml` - NameServer Deployment 配置
- `rocketmq-broker-deployment.yaml` - Broker Deployment 配置
- `rocketmq-nameserver-service.yaml` - NameServer Service 配置
- `rocketmq-broker-service.yaml` - Broker Service 配置
- `rocketmq-configmap.yaml` - RocketMQ 配置文件
## RocketMQ 架构
RocketMQ 由两个核心组件组成:
### 1. NameServer
- **作用**: 注册中心,管理 Broker 和 Topic 的路由信息
- **端口**: 9876
- **服务地址**: `rocketmq-nameserver.default.svc.cluster.local:9876`
### 2. Broker
- **作用**: 消息存储和转发
- **端口**: 10911 (主端口), 10912 (VIP端口)
- **服务地址**: `rocketmq-broker.default.svc.cluster.local:10911`
## 安装步骤
1. 确保 kubectl 已安装并配置好集群连接
2. 运行安装脚本:
```bash
chmod +x install-rocketmq.sh
./install-rocketmq.sh
```
## 配置说明
### 镜像配置
- **NameServer**: `registry.t-aaron.com/apache/rocketmq:4.9.7`
- **Broker**: `registry.t-aaron.com/apache/rocketmq:4.9.7`
### 资源限制
- **NameServer**: 512Mi-1Gi 内存, 200m-500m CPU
- **Broker**: 1Gi-2Gi 内存, 300m-1000m CPU
### 存储配置
- **日志目录**: `/opt/rocketmq-4.9.7/logs`
- **数据目录**: `/opt/rocketmq-4.9.7/store`
- **配置目录**: `/opt/rocketmq-4.9.7/conf`
## 使用示例
### 查看服务状态
```bash
# 查看 NameServer Pod
kubectl get pods -l app=rocketmq-nameserver
# 查看 Broker Pod
kubectl get pods -l app=rocketmq-broker
# 查看服务
kubectl get svc -l app=rocketmq
```
### 查看日志
```bash
# NameServer 日志
kubectl logs -f <nameserver-pod-name>
# Broker 日志
kubectl logs -f <broker-pod-name>
```
### 进入容器
```bash
# 进入 NameServer 容器
kubectl exec -it <nameserver-pod-name> -- sh
# 进入 Broker 容器
kubectl exec -it <broker-pod-name> -- sh
```
### 测试连接
```bash
# 测试 NameServer 连接
kubectl exec -it <nameserver-pod-name> -- netstat -tlnp | grep 9876
# 测试 Broker 连接
kubectl exec -it <broker-pod-name> -- netstat -tlnp | grep 10911
```
## 应用集成
### Java 应用配置
```properties
# application.properties
rocketmq.name-server=rocketmq-nameserver.default.svc.cluster.local:9876
rocketmq.producer.group=producer-group
rocketmq.consumer.group=consumer-group
```
### Spring Boot 集成
```xml
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>2.2.3</version>
</dependency>
```
```java
@RestController
public class MessageController {
@Autowired
private RocketMQTemplate rocketMQTemplate;
@PostMapping("/send")
public String sendMessage(@RequestParam String message) {
rocketMQTemplate.convertAndSend("test-topic", message);
return "Message sent: " + message;
}
}
```
## 监控和维护
### 健康检查
```bash
# 检查 NameServer 健康状态
kubectl get pods -l app=rocketmq-nameserver -o wide
# 检查 Broker 健康状态
kubectl get pods -l app=rocketmq-broker -o wide
```
### 性能监控
```bash
# 查看资源使用情况
kubectl top pods -l app=rocketmq
# 查看详细资源信息
kubectl describe pods -l app=rocketmq
```
### 数据备份
```bash
# 备份 Broker 数据
kubectl exec -it <broker-pod-name> -- tar -czf /tmp/rocketmq-backup.tar.gz /opt/rocketmq-4.9.7/store
# 复制备份文件到本地
kubectl cp <broker-pod-name>:/tmp/rocketmq-backup.tar.gz ./rocketmq-backup.tar.gz
```
## 故障排除
### 常见问题
1. **NameServer 启动失败**
- 检查内存配置
- 查看启动日志
- 验证端口占用
2. **Broker 连接 NameServer 失败**
- 检查网络连接
- 验证 NameServer 地址配置
- 查看 Broker 日志
3. **消息发送失败**
- 检查 Topic 是否存在
- 验证 Producer 配置
- 查看 Broker 状态
4. **消息消费失败**
- 检查 Consumer 配置
- 验证 Topic 和 Tag 配置
- 查看消费日志
### 日志分析
```bash
# 查看错误日志
kubectl logs <pod-name> | grep ERROR
# 查看警告日志
kubectl logs <pod-name> | grep WARN
# 实时查看日志
kubectl logs -f <pod-name>
```
## 生产环境建议
1. **高可用部署**: 部署多个 NameServer 和 Broker 实例
2. **持久化存储**: 使用 PersistentVolume 替代 emptyDir
3. **资源监控**: 集成 Prometheus 和 Grafana 监控
4. **日志管理**: 配置日志收集和分析
5. **安全配置**: 启用 ACL 和网络策略
6. **备份策略**: 定期备份消息数据
7. **性能调优**: 根据业务需求调整 JVM 参数
## 扩展功能
### 管理控制台
可以部署 RocketMQ Console 来管理消息队列:
```bash
# 部署 Console
kubectl apply -f rocketmq-console-deployment.yaml
kubectl apply -f rocketmq-console-service.yaml
```
### 集群部署
对于生产环境,建议部署 RocketMQ 集群:
- 多个 NameServer 实例
- 多个 Broker 实例Master-Slave
- 负载均衡配置