add redis rocketmq xxljob
This commit is contained in:
parent
1611120b20
commit
b0079fbb31
|
|
@ -29,5 +29,5 @@ kubectl get svc nacos -n default
|
|||
kubectl get ingress nacos-ingress -n default
|
||||
|
||||
echo "Nacos 安装完成!"
|
||||
echo "访问地址: https://nacos-ops.t-aaron.com"
|
||||
echo "访问地址: https://nacos-ops.t-aaron.com/nacos"
|
||||
echo "默认用户名/密码: nacos/nacos"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,118 @@
|
|||
# Redis 安装指南
|
||||
|
||||
本目录包含在 Kubernetes 集群中安装 Redis 的配置文件。
|
||||
|
||||
## 文件说明
|
||||
|
||||
- `install-redis.sh` - Redis 安装脚本
|
||||
- `redis-deployment.yaml` - Redis Deployment 配置
|
||||
- `redis-service.yaml` - Redis Service 配置
|
||||
- `redis-configmap.yaml` - Redis 配置文件
|
||||
|
||||
## 安装步骤
|
||||
|
||||
1. 确保 kubectl 已安装并配置好集群连接
|
||||
2. 运行安装脚本:
|
||||
```bash
|
||||
chmod +x install-redis.sh
|
||||
./install-redis.sh
|
||||
```
|
||||
|
||||
## 配置说明
|
||||
|
||||
### Redis 配置
|
||||
- **端口**: 6379
|
||||
- **密码**: redis123
|
||||
- **内存限制**: 512Mi
|
||||
- **持久化**: 启用 RDB 和 AOF
|
||||
- **数据目录**: /data
|
||||
|
||||
### 服务访问
|
||||
- **集群内访问**: `redis.default.svc.cluster.local:6379`
|
||||
- **密码**: redis123
|
||||
|
||||
## 使用示例
|
||||
|
||||
### 连接 Redis
|
||||
```bash
|
||||
# 获取 Redis Pod 名称
|
||||
kubectl get pods -l app=redis
|
||||
|
||||
# 连接到 Redis
|
||||
kubectl exec -it <redis-pod-name> -n default -- redis-cli -a redis123
|
||||
```
|
||||
|
||||
### 基本操作
|
||||
```bash
|
||||
# 设置键值
|
||||
SET mykey "Hello Redis"
|
||||
|
||||
# 获取值
|
||||
GET mykey
|
||||
|
||||
# 查看所有键
|
||||
KEYS *
|
||||
|
||||
# 查看 Redis 信息
|
||||
INFO
|
||||
```
|
||||
|
||||
### 从应用连接
|
||||
```yaml
|
||||
# 在应用的配置中使用
|
||||
redis:
|
||||
host: redis.default.svc.cluster.local
|
||||
port: 6379
|
||||
password: redis123
|
||||
```
|
||||
|
||||
## 监控和维护
|
||||
|
||||
### 查看 Redis 状态
|
||||
```bash
|
||||
kubectl get pods -l app=redis
|
||||
kubectl logs <redis-pod-name>
|
||||
```
|
||||
|
||||
### 查看 Redis 信息
|
||||
```bash
|
||||
kubectl exec -it <redis-pod-name> -- redis-cli -a redis123 INFO
|
||||
```
|
||||
|
||||
### 备份数据
|
||||
```bash
|
||||
# 创建快照
|
||||
kubectl exec -it <redis-pod-name> -- redis-cli -a redis123 BGSAVE
|
||||
|
||||
# 查看备份文件
|
||||
kubectl exec -it <redis-pod-name> -- ls -la /data/
|
||||
```
|
||||
|
||||
## 故障排除
|
||||
|
||||
### 常见问题
|
||||
|
||||
1. **Pod 启动失败**
|
||||
- 检查资源限制
|
||||
- 查看 Pod 日志:`kubectl logs <pod-name>`
|
||||
|
||||
2. **连接被拒绝**
|
||||
- 检查 Service 配置
|
||||
- 验证网络策略
|
||||
|
||||
3. **内存不足**
|
||||
- 调整 maxmemory 配置
|
||||
- 增加 Pod 内存限制
|
||||
|
||||
### 日志查看
|
||||
```bash
|
||||
kubectl logs -f <redis-pod-name>
|
||||
```
|
||||
|
||||
## 生产环境建议
|
||||
|
||||
1. **持久化存储**: 使用 PersistentVolume 替代 emptyDir
|
||||
2. **高可用**: 考虑 Redis Sentinel 或 Redis Cluster
|
||||
3. **监控**: 集成 Prometheus 监控
|
||||
4. **备份**: 定期备份 RDB 和 AOF 文件
|
||||
5. **安全**: 使用强密码和网络策略
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
#!/bin/bash
|
||||
|
||||
echo "开始安装 Redis 到 Kubernetes 集群..."
|
||||
|
||||
# 检查 kubectl 是否可用
|
||||
if ! command -v kubectl &> /dev/null; then
|
||||
echo "错误: kubectl 命令未找到,请先安装 kubectl"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 应用 Redis 配置
|
||||
echo "应用 Redis ConfigMap..."
|
||||
kubectl apply -f redis-configmap.yaml
|
||||
|
||||
echo "应用 Redis Deployment..."
|
||||
kubectl apply -f redis-deployment.yaml
|
||||
|
||||
echo "应用 Redis Service..."
|
||||
kubectl apply -f redis-service.yaml
|
||||
|
||||
# 等待 Pod 启动
|
||||
echo "等待 Redis Pod 启动..."
|
||||
kubectl wait --for=condition=ready pod -l app=redis -n default --timeout=300s
|
||||
|
||||
# 检查状态
|
||||
echo "检查 Redis 部署状态..."
|
||||
kubectl get pods -l app=redis -n default
|
||||
kubectl get svc redis -n default
|
||||
|
||||
# 测试 Redis 连接
|
||||
echo "测试 Redis 连接..."
|
||||
REDIS_POD=$(kubectl get pods -l app=redis -n default -o jsonpath='{.items[0].metadata.name}')
|
||||
if [ ! -z "$REDIS_POD" ]; then
|
||||
echo "在 Pod $REDIS_POD 中测试 Redis..."
|
||||
kubectl exec -it $REDIS_POD -n default -- redis-cli ping
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "Redis 连接测试成功!"
|
||||
else
|
||||
echo "Redis 连接测试失败!"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "Redis 安装完成!"
|
||||
echo "Redis 服务地址: redis.default.svc.cluster.local:6379"
|
||||
echo "默认密码: redis123"
|
||||
echo ""
|
||||
echo "使用示例:"
|
||||
echo "kubectl exec -it <redis-pod-name> -n default -- redis-cli -a redis123"
|
||||
echo ""
|
||||
echo "注意: 请确保已正确配置 Redis 密码和持久化存储"
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: redis-config
|
||||
namespace: default
|
||||
labels:
|
||||
app: redis
|
||||
data:
|
||||
redis.conf: |
|
||||
# Redis 配置文件
|
||||
|
||||
# 网络配置
|
||||
bind 0.0.0.0
|
||||
port 6379
|
||||
timeout 300
|
||||
tcp-keepalive 60
|
||||
|
||||
# 安全配置
|
||||
requirepass redis123
|
||||
|
||||
# 持久化配置
|
||||
save 900 1
|
||||
save 300 10
|
||||
save 60 10000
|
||||
|
||||
# RDB 配置
|
||||
rdbcompression yes
|
||||
rdbchecksum yes
|
||||
dbfilename dump.rdb
|
||||
dir /data
|
||||
|
||||
# AOF 配置
|
||||
appendonly yes
|
||||
appendfilename "appendonly.aof"
|
||||
appendfsync everysec
|
||||
no-appendfsync-on-rewrite no
|
||||
auto-aof-rewrite-percentage 100
|
||||
auto-aof-rewrite-min-size 64mb
|
||||
|
||||
# 内存配置
|
||||
maxmemory 256mb
|
||||
maxmemory-policy allkeys-lru
|
||||
|
||||
# 日志配置
|
||||
loglevel notice
|
||||
logfile ""
|
||||
|
||||
# 其他配置
|
||||
daemonize no
|
||||
supervised no
|
||||
pidfile /var/run/redis_6379.pid
|
||||
|
||||
# 客户端配置
|
||||
maxclients 10000
|
||||
|
||||
# 慢查询日志
|
||||
slowlog-log-slower-than 10000
|
||||
slowlog-max-len 128
|
||||
|
||||
# 延迟监控
|
||||
latency-monitor-threshold 100
|
||||
|
|
@ -0,0 +1,70 @@
|
|||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: redis
|
||||
namespace: default
|
||||
labels:
|
||||
app: redis
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: redis
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: redis
|
||||
spec:
|
||||
containers:
|
||||
- name: redis
|
||||
image: registry.t-aaron.com/redis:7.2-alpine
|
||||
ports:
|
||||
- containerPort: 6379
|
||||
name: redis
|
||||
command:
|
||||
- redis-server
|
||||
- /etc/redis/redis.conf
|
||||
env:
|
||||
- name: REDIS_PASSWORD
|
||||
value: "redis123"
|
||||
resources:
|
||||
requests:
|
||||
memory: "256Mi"
|
||||
cpu: "100m"
|
||||
limits:
|
||||
memory: "512Mi"
|
||||
cpu: "200m"
|
||||
livenessProbe:
|
||||
exec:
|
||||
command:
|
||||
- redis-cli
|
||||
- -a
|
||||
- redis123
|
||||
- ping
|
||||
initialDelaySeconds: 30
|
||||
periodSeconds: 10
|
||||
timeoutSeconds: 5
|
||||
failureThreshold: 3
|
||||
readinessProbe:
|
||||
exec:
|
||||
command:
|
||||
- redis-cli
|
||||
- -a
|
||||
- redis123
|
||||
- ping
|
||||
initialDelaySeconds: 5
|
||||
periodSeconds: 5
|
||||
timeoutSeconds: 3
|
||||
failureThreshold: 3
|
||||
volumeMounts:
|
||||
- name: redis-config
|
||||
mountPath: /etc/redis
|
||||
- name: redis-data
|
||||
mountPath: /data
|
||||
volumes:
|
||||
- name: redis-config
|
||||
configMap:
|
||||
name: redis-config
|
||||
- name: redis-data
|
||||
emptyDir: {}
|
||||
restartPolicy: Always
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: redis
|
||||
namespace: default
|
||||
labels:
|
||||
app: redis
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- name: redis
|
||||
port: 6379
|
||||
targetPort: 6379
|
||||
protocol: TCP
|
||||
selector:
|
||||
app: redis
|
||||
|
|
@ -0,0 +1,216 @@
|
|||
# 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)
|
||||
- 负载均衡配置
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
#!/bin/bash
|
||||
|
||||
echo "开始安装 RocketMQ 到 Kubernetes 集群..."
|
||||
|
||||
# 检查 kubectl 是否可用
|
||||
if ! command -v kubectl &> /dev/null; then
|
||||
echo "错误: kubectl 命令未找到,请先安装 kubectl"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 应用 RocketMQ 配置
|
||||
echo "应用 RocketMQ ConfigMap..."
|
||||
kubectl apply -f rocketmq-configmap.yaml
|
||||
|
||||
echo "应用 RocketMQ NameServer Deployment..."
|
||||
kubectl apply -f rocketmq-nameserver-deployment.yaml
|
||||
|
||||
echo "应用 RocketMQ NameServer Service..."
|
||||
kubectl apply -f rocketmq-nameserver-service.yaml
|
||||
|
||||
echo "应用 RocketMQ Broker Deployment..."
|
||||
kubectl apply -f rocketmq-broker-deployment.yaml
|
||||
|
||||
echo "应用 RocketMQ Broker Service..."
|
||||
kubectl apply -f rocketmq-broker-service.yaml
|
||||
|
||||
# 等待 Pod 启动
|
||||
echo "等待 RocketMQ NameServer Pod 启动..."
|
||||
kubectl wait --for=condition=ready pod -l app=rocketmq-nameserver -n default --timeout=300s
|
||||
|
||||
echo "等待 RocketMQ Broker Pod 启动..."
|
||||
kubectl wait --for=condition=ready pod -l app=rocketmq-broker -n default --timeout=300s
|
||||
|
||||
# 检查状态
|
||||
echo "检查 RocketMQ 部署状态..."
|
||||
echo "=== NameServer Pods ==="
|
||||
kubectl get pods -l app=rocketmq-nameserver -n default
|
||||
echo "=== Broker Pods ==="
|
||||
kubectl get pods -l app=rocketmq-broker -n default
|
||||
echo "=== Services ==="
|
||||
kubectl get svc -l app=rocketmq -n default
|
||||
|
||||
# 测试 RocketMQ 连接
|
||||
echo "测试 RocketMQ NameServer 连接..."
|
||||
NAMESERVER_POD=$(kubectl get pods -l app=rocketmq-nameserver -n default -o jsonpath='{.items[0].metadata.name}')
|
||||
if [ ! -z "$NAMESERVER_POD" ]; then
|
||||
echo "在 Pod $NAMESERVER_POD 中测试 NameServer..."
|
||||
kubectl exec -it $NAMESERVER_POD -n default -- sh -c "netstat -tlnp | grep 9876"
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "RocketMQ NameServer 连接测试成功!"
|
||||
else
|
||||
echo "RocketMQ NameServer 连接测试失败!"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "RocketMQ 安装完成!"
|
||||
echo "NameServer 地址: rocketmq-nameserver.default.svc.cluster.local:9876"
|
||||
echo "Broker 地址: rocketmq-broker.default.svc.cluster.local:10911"
|
||||
echo ""
|
||||
echo "使用示例:"
|
||||
echo "1. 查看 NameServer 日志: kubectl logs -f <nameserver-pod-name> -n default"
|
||||
echo "2. 查看 Broker 日志: kubectl logs -f <broker-pod-name> -n default"
|
||||
echo "3. 进入 NameServer 容器: kubectl exec -it <nameserver-pod-name> -n default -- sh"
|
||||
echo ""
|
||||
echo "注意: 请确保已正确配置 RocketMQ 的存储和网络策略"
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: rocketmq-broker
|
||||
namespace: default
|
||||
labels:
|
||||
app: rocketmq-broker
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: rocketmq-broker
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: rocketmq-broker
|
||||
spec:
|
||||
containers:
|
||||
- name: rocketmq-broker
|
||||
image: registry.t-aaron.com/apache/rocketmq:5.3.2
|
||||
command:
|
||||
- sh
|
||||
- mqbroker
|
||||
ports:
|
||||
- containerPort: 10909
|
||||
name: broker-admin
|
||||
- containerPort: 10911
|
||||
name: broker
|
||||
- containerPort: 10912
|
||||
name: broker-vip
|
||||
env:
|
||||
- name: JAVA_OPT_EXT
|
||||
value: "-Xms1g -Xmx1g -Xmn512m"
|
||||
- name: NAMESRV_ADDR
|
||||
value: "rocketmq-nameserver:9876"
|
||||
resources:
|
||||
requests:
|
||||
memory: "1Gi"
|
||||
cpu: "300m"
|
||||
limits:
|
||||
memory: "2Gi"
|
||||
cpu: "1000m"
|
||||
livenessProbe:
|
||||
tcpSocket:
|
||||
port: 10911
|
||||
initialDelaySeconds: 60
|
||||
periodSeconds: 10
|
||||
timeoutSeconds: 5
|
||||
failureThreshold: 3
|
||||
readinessProbe:
|
||||
tcpSocket:
|
||||
port: 10911
|
||||
initialDelaySeconds: 30
|
||||
periodSeconds: 5
|
||||
timeoutSeconds: 3
|
||||
failureThreshold: 3
|
||||
restartPolicy: Always
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: rocketmq-broker
|
||||
namespace: default
|
||||
labels:
|
||||
app: rocketmq-broker
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- name: broker-admin
|
||||
port: 10909
|
||||
targetPort: 10909
|
||||
protocol: TCP
|
||||
- name: broker
|
||||
port: 10911
|
||||
targetPort: 10911
|
||||
protocol: TCP
|
||||
- name: broker-vip
|
||||
port: 10912
|
||||
targetPort: 10912
|
||||
protocol: TCP
|
||||
selector:
|
||||
app: rocketmq-broker
|
||||
Binary file not shown.
|
|
@ -0,0 +1,144 @@
|
|||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: rocketmq-config
|
||||
namespace: default
|
||||
labels:
|
||||
app: rocketmq
|
||||
data:
|
||||
broker.conf: |
|
||||
# RocketMQ Broker 配置文件
|
||||
|
||||
# Broker 集群名称
|
||||
brokerClusterName=DefaultCluster
|
||||
|
||||
# Broker 名称
|
||||
brokerName=broker-a
|
||||
|
||||
# Broker ID (0 表示 Master)
|
||||
brokerId=0
|
||||
|
||||
# 删除文件时间点,默认凌晨4点
|
||||
deleteWhen=04
|
||||
|
||||
# 文件保留时间,默认48小时
|
||||
fileReservedTime=48
|
||||
|
||||
# Broker 角色
|
||||
# - ASYNC_MASTER 异步复制Master
|
||||
# - SYNC_MASTER 同步双写Master
|
||||
# - SLAVE
|
||||
brokerRole=ASYNC_MASTER
|
||||
|
||||
# 刷盘方式
|
||||
# - ASYNC_FLUSH 异步刷盘
|
||||
# - SYNC_FLUSH 同步刷盘
|
||||
flushDiskType=ASYNC_FLUSH
|
||||
|
||||
# NameServer 地址
|
||||
namesrvAddr=rocketmq-nameserver:9876
|
||||
|
||||
# Broker 监听端口
|
||||
listenPort=10911
|
||||
|
||||
# Broker 对外服务端口
|
||||
brokerIP1=
|
||||
|
||||
# Broker 对外服务端口2
|
||||
brokerIP2=
|
||||
|
||||
# 存储路径
|
||||
storePathRootDir=/home/rocketmq/store
|
||||
|
||||
# CommitLog 存储路径
|
||||
storePathCommitLog=/home/rocketmq/store/commitlog
|
||||
|
||||
# 消息队列存储路径
|
||||
storePathConsumeQueue=/home/rocketmq/store/consumequeue
|
||||
|
||||
# 消息索引存储路径
|
||||
storePathIndex=/home/rocketmq/store/index
|
||||
|
||||
# checkpoint 文件存储路径
|
||||
storeCheckpoint=/home/rocketmq/store/checkpoint
|
||||
|
||||
# abort 文件存储路径
|
||||
abortFile=/home/rocketmq/store/abort
|
||||
|
||||
# 限制的消息大小
|
||||
maxMessageSize=65536
|
||||
|
||||
# 发送消息线程池数量
|
||||
sendMessageThreadPoolNums=128
|
||||
|
||||
# 拉消息线程池数量
|
||||
pullMessageThreadPoolNums=128
|
||||
|
||||
# 注册Broker到NameServer的超时时间
|
||||
registerBrokerTimeoutMills=3000
|
||||
|
||||
# 发送心跳间隔
|
||||
heartbeatBrokerInterval=30000
|
||||
|
||||
# 持久化Consumer消费进度间隔
|
||||
persistConsumerOffsetInterval=5000
|
||||
|
||||
# 是否允许 Broker 自动创建Topic
|
||||
autoCreateTopicEnable=true
|
||||
|
||||
# 是否允许 Broker 自动创建订阅组
|
||||
autoCreateSubscriptionGroup=true
|
||||
|
||||
# 是否启动时允许重复注册Broker
|
||||
checkThreadPoolQueueSize=1000
|
||||
|
||||
# 客户端回调线程池数量
|
||||
clientCallbackExecutorThreads=8
|
||||
|
||||
# 消费线程池最小线程数
|
||||
consumeThreadMin=20
|
||||
|
||||
# 消费线程池最大线程数
|
||||
consumeThreadMax=20
|
||||
|
||||
# 消费线程池队列大小
|
||||
consumeConcurrentlyMaxSpan=2000
|
||||
|
||||
# 消费超时时间
|
||||
consumeTimeout=15m
|
||||
|
||||
# 消费失败重试次数
|
||||
maxReconsumeTimes=16
|
||||
|
||||
# 消费失败重试间隔
|
||||
retryMaxTimes=16
|
||||
|
||||
# 发送消息超时时间
|
||||
sendMessageTimeout=3000
|
||||
|
||||
# 压缩消息体阈值
|
||||
compressMsgBodyOverHowmuch=4096
|
||||
|
||||
# 是否压缩消息体
|
||||
compressedReadEnable=true
|
||||
|
||||
# 是否启用消息轨迹
|
||||
traceTopicEnable=false
|
||||
|
||||
# ACL 配置
|
||||
aclEnable=false
|
||||
|
||||
# 消息过滤
|
||||
messageFilterClass=
|
||||
|
||||
# 是否启用消息过滤
|
||||
enablePropertyFilter=false
|
||||
|
||||
# 是否启用消息过滤
|
||||
enableConsumeMessageExtProperty=false
|
||||
|
||||
# 是否启用消息过滤
|
||||
enableConsumeMessageExtProperty=false
|
||||
|
||||
# 是否启用消息过滤
|
||||
enableConsumeMessageExtProperty=false
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: rocketmq-nameserver
|
||||
namespace: default
|
||||
labels:
|
||||
app: rocketmq-nameserver
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: rocketmq-nameserver
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: rocketmq-nameserver
|
||||
spec:
|
||||
containers:
|
||||
- name: rocketmq-nameserver
|
||||
image: registry.t-aaron.com/apache/rocketmq:5.3.2
|
||||
command:
|
||||
- sh
|
||||
- mqnamesrv
|
||||
ports:
|
||||
- containerPort: 9876
|
||||
name: nameserver
|
||||
env:
|
||||
- name: JAVA_OPT_EXT
|
||||
value: "-Xms512m -Xmx512m -Xmn128m"
|
||||
resources:
|
||||
requests:
|
||||
memory: "512Mi"
|
||||
cpu: "200m"
|
||||
limits:
|
||||
memory: "1Gi"
|
||||
cpu: "500m"
|
||||
livenessProbe:
|
||||
tcpSocket:
|
||||
port: 9876
|
||||
initialDelaySeconds: 30
|
||||
periodSeconds: 10
|
||||
timeoutSeconds: 5
|
||||
failureThreshold: 3
|
||||
readinessProbe:
|
||||
tcpSocket:
|
||||
port: 9876
|
||||
initialDelaySeconds: 10
|
||||
periodSeconds: 5
|
||||
timeoutSeconds: 3
|
||||
failureThreshold: 3
|
||||
restartPolicy: Always
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: rocketmq-nameserver
|
||||
namespace: default
|
||||
labels:
|
||||
app: rocketmq-nameserver
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- name: nameserver
|
||||
port: 9876
|
||||
targetPort: 9876
|
||||
protocol: TCP
|
||||
selector:
|
||||
app: rocketmq-nameserver
|
||||
|
|
@ -0,0 +1,100 @@
|
|||
# XXL-JOB 安装说明
|
||||
|
||||
## 概述
|
||||
XXL-JOB 是一个分布式任务调度平台,本目录包含了在 Kubernetes 集群中部署 XXL-JOB 的所有配置文件。
|
||||
|
||||
## 文件说明
|
||||
- `xxljob-deployment.yaml` - XXL-JOB Admin 部署配置
|
||||
- `xxljob-service.yaml` - XXL-JOB Admin 服务配置
|
||||
- `xxljob-ingress.yaml` - XXL-JOB Admin 入口配置
|
||||
- `install-xxljob.sh` - 自动安装脚本
|
||||
|
||||
## 安装前准备
|
||||
|
||||
### 1. 数据库准备
|
||||
确保 MySQL 数据库已安装并运行,并创建 `xxl_job` 数据库:
|
||||
|
||||
```sql
|
||||
CREATE DATABASE xxl_job DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
```
|
||||
|
||||
### 2. 数据库初始化
|
||||
执行 XXL-JOB 提供的数据库初始化脚本 `/sql/xxl_job.sql`
|
||||
|
||||
### 3. 镜像准备
|
||||
确保以下镜像已推送到镜像仓库:
|
||||
- `registry.t-aaron.com/xxl-job/xxl-job-admin:latest`
|
||||
|
||||
## 安装步骤
|
||||
|
||||
### 方法一:使用安装脚本(推荐)
|
||||
```bash
|
||||
chmod +x install-xxljob.sh
|
||||
./install-xxljob.sh
|
||||
```
|
||||
|
||||
### 方法二:手动安装
|
||||
```bash
|
||||
# 应用部署配置
|
||||
kubectl apply -f xxljob-deployment.yaml
|
||||
|
||||
# 应用服务配置
|
||||
kubectl apply -f xxljob-service.yaml
|
||||
|
||||
# 应用入口配置
|
||||
kubectl apply -f xxljob-ingress.yaml
|
||||
```
|
||||
|
||||
## 访问信息
|
||||
- **访问地址**: https://xxljob-ops.t-aaron.com
|
||||
- **默认用户名**: admin
|
||||
- **默认密码**: 123456
|
||||
|
||||
## 配置说明
|
||||
|
||||
### 数据库连接
|
||||
默认配置连接到名为 `mysql` 的 MySQL 服务:
|
||||
- 数据库: xxl_job
|
||||
- 用户名: root
|
||||
- 密码: 123456
|
||||
|
||||
如需修改数据库连接信息,请编辑 `xxljob-deployment.yaml` 文件中的 `PARAMS` 环境变量。
|
||||
|
||||
### 访问令牌
|
||||
默认访问令牌为 `default_token`,如需修改请编辑 `xxljob-deployment.yaml` 文件。
|
||||
|
||||
## 验证安装
|
||||
安装完成后,可以通过以下命令检查部署状态:
|
||||
|
||||
```bash
|
||||
# 检查 Pod 状态
|
||||
kubectl get pods -l app=xxl-job-admin
|
||||
|
||||
# 检查服务状态
|
||||
kubectl get svc xxl-job-admin
|
||||
|
||||
# 检查入口状态
|
||||
kubectl get ingress xxl-job-admin-ingress
|
||||
```
|
||||
|
||||
## 故障排除
|
||||
|
||||
### 常见问题
|
||||
1. **Pod 启动失败**: 检查数据库连接配置是否正确
|
||||
2. **无法访问**: 检查 Ingress 配置和域名解析
|
||||
3. **数据库连接失败**: 确认 MySQL 服务是否正常运行
|
||||
|
||||
### 日志查看
|
||||
```bash
|
||||
kubectl logs -l app=xxl-job-admin
|
||||
```
|
||||
|
||||
## 卸载
|
||||
如需卸载 XXL-JOB,执行以下命令:
|
||||
|
||||
```bash
|
||||
kubectl delete -f xxljob-ingress.yaml
|
||||
kubectl delete -f xxljob-service.yaml
|
||||
kubectl delete -f xxljob-deployment.yaml
|
||||
```
|
||||
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
#!/bin/bash
|
||||
|
||||
echo "开始安装 XXL-JOB 到 Kubernetes 集群..."
|
||||
|
||||
# 检查 kubectl 是否可用
|
||||
if ! command -v kubectl &> /dev/null; then
|
||||
echo "错误: kubectl 命令未找到,请先安装 kubectl"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 应用 XXL-JOB 配置
|
||||
echo "应用 XXL-JOB Deployment..."
|
||||
kubectl apply -f xxljob-deployment.yaml
|
||||
|
||||
echo "应用 XXL-JOB Service..."
|
||||
kubectl apply -f xxljob-service.yaml
|
||||
|
||||
echo "应用 XXL-JOB Ingress..."
|
||||
kubectl apply -f xxljob-ingress.yaml
|
||||
|
||||
# 等待 Pod 启动
|
||||
echo "等待 XXL-JOB Pod 启动..."
|
||||
kubectl wait --for=condition=ready pod -l app=xxl-job-admin -n default --timeout=300s
|
||||
|
||||
# 检查状态
|
||||
echo "检查 XXL-JOB 部署状态..."
|
||||
kubectl get pods -l app=xxl-job-admin -n default
|
||||
kubectl get svc xxl-job-admin -n default
|
||||
kubectl get ingress xxl-job-admin-ingress -n default
|
||||
|
||||
echo "XXL-JOB 安装完成!"
|
||||
echo "访问地址: https://xxljob-ops.t-aaron.com"
|
||||
echo "默认用户名/密码: admin/123456"
|
||||
echo ""
|
||||
echo "注意: 请确保MySQL数据库已正确配置,并且xxl_job数据库已创建"
|
||||
echo "数据库初始化脚本: /sql/xxl_job.sql"
|
||||
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: xxl-job-admin
|
||||
namespace: default
|
||||
labels:
|
||||
app: xxl-job-admin
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: xxl-job-admin
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: xxl-job-admin
|
||||
spec:
|
||||
containers:
|
||||
- name: xxl-job-admin
|
||||
image: registry.t-aaron.com/xxl-job/xxl-job-admin:latest
|
||||
ports:
|
||||
- containerPort: 8080
|
||||
name: http
|
||||
env:
|
||||
- name: PARAMS
|
||||
value: "--spring.datasource.url=jdbc:mysql://mysql:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai --spring.datasource.username=root --spring.datasource.password=123456 --xxl.job.accessToken=default_token"
|
||||
resources:
|
||||
requests:
|
||||
memory: "512Mi"
|
||||
cpu: "250m"
|
||||
limits:
|
||||
memory: "1Gi"
|
||||
cpu: "500m"
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /actuator/health
|
||||
port: 8080
|
||||
initialDelaySeconds: 60
|
||||
periodSeconds: 10
|
||||
timeoutSeconds: 5
|
||||
failureThreshold: 3
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /actuator/health
|
||||
port: 8080
|
||||
initialDelaySeconds: 30
|
||||
periodSeconds: 5
|
||||
timeoutSeconds: 3
|
||||
failureThreshold: 3
|
||||
volumeMounts:
|
||||
- name: xxl-job-logs
|
||||
mountPath: /data/applogs
|
||||
volumes:
|
||||
- name: xxl-job-logs
|
||||
emptyDir: {}
|
||||
restartPolicy: Always
|
||||
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: xxl-job-admin-ingress
|
||||
namespace: default
|
||||
annotations:
|
||||
traefik.ingress.kubernetes.io/router.entrypoints: web,websecure
|
||||
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||
spec:
|
||||
tls:
|
||||
- hosts:
|
||||
- xxljob-ops.t-aaron.com
|
||||
secretName: tls
|
||||
rules:
|
||||
- host: xxljob-ops.t-aaron.com
|
||||
http:
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: xxl-job-admin
|
||||
port:
|
||||
number: 8080
|
||||
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: xxl-job-admin
|
||||
namespace: default
|
||||
labels:
|
||||
app: xxl-job-admin
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- name: http
|
||||
port: 8080
|
||||
targetPort: 8080
|
||||
protocol: TCP
|
||||
selector:
|
||||
app: xxl-job-admin
|
||||
|
||||
Loading…
Reference in New Issue