当前位置:   article > 正文

k8s上rabbitmq优化参考建议——筑梦之路

k8s上rabbitmq优化参考建议——筑梦之路

helm安装rabbitmq

  1. # 添加 Helm 存储库:
  2. helm repo add bitnami https://charts.bitnami.com/bitnami && helm repo update
  3. # 安装 RabbitMQ:
  4. helm install my-rabbitmq bitnami/rabbitmq
  5. # 验证安装:
  6. kubectl get pods
  7. # 端口转发以访问管理接口:
  8. kubectl port-forward svc/my-rabbitmq 15672:15672
  9. # 获取密码 用户名默认user
  10. kubectl get secret --namespace default my-rabbitmq -o jsonpath="{.data.rabbitmq-password}" | base64 --decode

优化RabbitMQ配置

1. 内存和磁盘警报

RabbitMQ 可以在内存或磁盘空间不足时触发警报,这有助于防止崩溃。您可以在文件中配置这些警报rabbitmq.conf

  1. cat <<EOF > rabbitmq.conf
  2. disk_free_limit.absolute = 2GB
  3. vm_memory_high_watermark.absolute = 2GB
  4. EOF

2. 队列和消息 TTL

设置队列和消息的生存时间 (TTL) 可以通过删除旧的、未使用的消息来帮助释放资源

  1. apiVersion: batch/v1
  2. kind: Job
  3. metadata:
  4. name: rabbitmq-ttl-config
  5. spec:
  6. template:
  7. spec:
  8. containers:
  9. - name: rabbitmq-ttl-config
  10. image: bitnami/rabbitmq:latest
  11. command: ["rabbitmqctl", "set_policy", "ttl", ".*", '{"message-ttl":60000}', "--apply-to", "queues"]
  12. restartPolicy: OnFailure

3. 惰性Lazy队列

惰性队列可以通过将消息存储在磁盘上而不是 RAM 中来帮助更有效地管理内存使用

rabbitmqctl set_policy Lazy "^lazy-queue" '{"queue-mode":"lazy"}'

4. 连接和频道限制

限制连接和通道的数量有助于防止资源耗尽

  1. rabbitmq.conf
  2. listeners.tcp.default = 5672
  3. listeners.tcp.backlog = 128
  4. limits.connections = 2048
  5. limits.channels = 2048

5. 配置 RabbitMQ 集群

 将 RabbitMQ 节点集群化可以提高性能和弹性

  1. apiVersion: apps/v1
  2. kind: StatefulSet
  3. metadata:
  4. name: rabbitmq
  5. spec:
  6. serviceName: "rabbitmq"
  7. replicas: 3
  8. selector:
  9. matchLabels:
  10. app: rabbitmq
  11. template:
  12. metadata:
  13. labels:
  14. app: rabbitmq
  15. spec:
  16. containers:
  17. - name: rabbitmq
  18. image: bitnami/rabbitmq:latest
  19. env:
  20. - name: RABBITMQ_USE_LONGNAME
  21. value: "true"
  22. - name: RABBITMQ_NODENAME
  23. value: "rabbit@$(HOSTNAME).rabbitmq.default.svc.cluster.local"
  24. - name: RABBITMQ_ERLANG_COOKIE
  25. value: "my-secret-cookie"

Kubernetes 中的资源管理

高效的资源管理对于优化 Kubernetes 上的 RabbitMQ 性能至关重要

1. 资源请求和限制

设置资源请求和限制可确保 RabbitMQ pod 拥有必要的资源,同时防止它们消耗过多

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: rabbitmq
  5. spec:
  6. containers:
  7. - name: rabbitmq
  8. image: bitnami/rabbitmq:latest
  9. resources:
  10. requests:
  11. memory: "1Gi"
  12. cpu: "500m"
  13. limits:
  14. memory: "2Gi"
  15. cpu: "1"

2. 持久存储

使用持久性存储可确保数据持久性,为 RabbitMQ 配置持久卷声明 (PVC)

  1. apiVersion: v1
  2. kind: PersistentVolumeClaim
  3. metadata:
  4. name: rabbitmq-pvc
  5. spec:
  6. accessModes:
  7. - ReadWriteOnce
  8. resources:
  9. requests:
  10. storage: 10Gi

3. 节点亲和性和容忍度

使用节点亲和性和容忍度来控制 RabbitMQ pod 的调度位置,确保最佳性能

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: rabbitmq
  5. spec:
  6. template:
  7. spec:
  8. affinity:
  9. nodeAffinity:
  10. requiredDuringSchedulingIgnoredDuringExecution:
  11. nodeSelectorTerms:
  12. - matchExpressions:
  13. - key: kubernetes.io/e2e-az-name
  14. operator: In
  15. values:
  16. - e2e-az1
  17. containers:
  18. - name: rabbitmq
  19. image: bitnami/rabbitmq:latest

Kubernetes 上监控 RabbitMQ

监控对于维护和优化 RabbitMQ 性能至关重要

1. Prometheus 和 Grafana

  1. 使用 Helm 安装 Prometheus 和 Grafana:
  2. helm install prometheus stable/prometheus· helm install grafana stable/grafana
  3. 配置 RabbitMQ 以导出指标:
  4. rabbitmq-plugins enable rabbitmq_prometheus
  5. 设置 Prometheus 来抓取 RabbitMQ 指标
  6. scrape_configs:
  7. - job_name: 'rabbitmq'
  8. static_configs:
  9. - targets: ['<RABBITMQ_SERVICE>:9419']

2. 告警

设置警报以通知您性能问题或其他关键事件

  1. apiVersion: monitoring.coreos.com/v1
  2. kind: PrometheusRule
  3. metadata:
  4. name: rabbitmq-alerts
  5. spec:
  6. groups:
  7. - name: rabbitmq.rules
  8. rules:
  9. - alert: HighMemoryUsage
  10. expr: rabbitmq_memory_used_bytes / rabbitmq_memory_limit_bytes > 0.9
  11. for: 5m
  12. labels:
  13. severity: critical
  14. annotations:
  15. summary: "High memory usage on RabbitMQ"
  16. description: "RabbitMQ memory usage is above 90% for more than 5 minutes."

Kubernetes 上扩展 RabbitMQ

有效扩展 RabbitMQ 可确保它能够处理不断增加的负载

1. 水平 Pod 自动扩缩器 (HPA)

Kubernetes HPA 可以根据 CPU 或内存使用情况自动扩展 RabbitMQ pod

  1. apiVersion: autoscaling/v1
  2. kind: HorizontalPodAutoscaler
  3. metadata:
  4. name: rabbitmq-hpa
  5. spec:
  6. scaleTargetRef:
  7. apiVersion: apps/v1
  8. kind: Deployment
  9. name: rabbitmq
  10. minReplicas: 1
  11. maxReplicas: 10
  12. targetCPUUtilizationPercentage: 80

2. RabbitMQ 集群

 将 RabbitMQ 节点集群化有助于分散负载并提高弹性。确保您的集群配置支持动态添加和删除节点。

安全最佳实践

1. 启用 TLS 以实现 RabbitMQ 节点之间的安全通信。

  1. rabbitmq.conf
  2. listeners.ssl.default = 5671
  3. ssl_options.cacertfile = /path/to/ca_certificate.pem
  4. ssl_options.certfile = /path/to/server_certificate.pem
  5. ssl_options.keyfile = /path/to/server_key.pem
  6. ssl_options.verify = verify_peer
  7. ssl_options.fail_if_no_peer_cert = true

2.用户管理

 实施强大的用户身份验证和授权机制

  1. rabbitmqctl add_user myuser mypassword
  2. rabbitmqctl set_user_tags myuser administrator
  3. rabbitmqctl set_permissions -p / myuser ".*" ".*" ".*"

3. 网络策略

使用 Kubernetes 网络策略来控制往返于 RabbitMQ 的流量

  1. apiVersion: networking.k8s.io/v1
  2. kind: NetworkPolicy
  3. metadata:
  4. name: allow-rabbitmq
  5. spec:
  6. podSelector:
  7. matchLabels:
  8. app: rabbitmq
  9. ingress:
  10. - from:
  11. - podSelector:
  12. matchLabels:
  13. app: my-app
  14. ports:
  15. - protocol: TCP
  16. port: 5672

常见问题故障排除

1. CPU 或内存使用率过高

监控 RabbitMQ 指标以识别高资源使用率并调整资源限制或优化配置

2. 网络延迟

确保 RabbitMQ 节点和客户端之间的低延迟网络连接。检查网络瓶颈

3. 磁盘空间

定期监控磁盘空间使用情况并配置适当的磁盘警报

  1. rabbitmq.conf
  2. disk_free_limit.relative = 1.5

高级优化技术

1. 使用分片

分片队列可以帮助在节点之间更均匀地分配负载

2. 自定义插件

开发和部署自定义 RabbitMQ 插件以扩展其功能和性能

3. 微调垃圾回收

优化 RabbitMQ 的 Erlang 垃圾收集器设置

  1. rabbitmq.conf
  2. vm_memory_high_watermark.relative = 0.6

参考资料:

https://medium.com/@nile.bits/optimizing-rabbitmq-performance-on-kubernetes-8c0a7ebc011b

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/671737
推荐阅读
相关标签
  

闽ICP备14008679号