RabbitMQ中间件
2019-12-19 10:49:19 58 举报
AI智能生成
1.Rabbitmq中间件管理策略 2.RabbitMQ高可用部署 3、RabbitMQ故障演练
作者其他创作
大纲/内容
集群部署
CI/CD
版本控制
依赖
erlang-21.2.5-1.el6.x86_64
灰度
1、version >3.6 支持灰度
2、通过shovel连接不同的集群
2、通过shovel连接不同的集群
新版本迭代策略
release发布周期大于6个月
节点上下线流程
虚拟机
上线节点
推模块
部署rpm包等待手动部署
一键部署MAKE脚本
salt agent
主要用于DOA全局邮件检测,每20min触发一次需要重启才能生效 /etc/init.d/salt-minion restart
zabbix agent
主要是用于zabbix相关监控,需要推模块/Data/apps/zabbix/bin/custom/doa/
需要重启才能生效/etc/init.d/zabbix_agentd restart
需要重启才能生效/etc/init.d/zabbix_agentd restart
下线节点
【手动】剔除节点,更新DOA Apollo配置,下掉监控,下线机器
自检探针
/Data/logs/doa权限是否正常
日志切割是否部署
监控项是否添加
hosts是否统一
cookie是否统一
keepalive 虚ip、主备设置,权重
节点启动后是否有异常
日志切割是否部署
监控项是否添加
hosts是否统一
cookie是否统一
keepalive 虚ip、主备设置,权重
节点启动后是否有异常
容器化
无状态
平滑重启
风险
CI/CD 需要人工干预
高可用策略
集群高可用
故障转移
Keepalive
漂移策略
自动漂移
节点心跳检测
手动漂移
触发事件
CI/CD
故障隔离
健康监测
自动下线故障节点
负载均衡
两主一备 客户端连接虚IP
异地多活
双写
消息时效
过载防护
惰性队列
客户端高可用
RabbitMQ_Manager
php消费进程管理
mysql非活跃连接
>7.5hReload
心跳监测
消费者机器异常自动隔离
监控指标记录
异常防护
消费者
PDO异常
Restart
进失败队列
Exception/Error
进fail队列
生产者
连接异常,
Retry 3次
消息补偿
消息幂等
消费成功了不再重复消费
连接心跳 周期60s
消费者处理一条消息必须在两个周期内完成
灾备
元数据备份
定时任务每天同步元数据
消息持久化
镜像队列
数据转移
冷备shovel
一键转移工具DanyTools
风险
预警探测系统
DOA-高可用预警
集群健康探测
发布/订阅异常,connection数>5万,channel数>2万,read数>25万,unack数>1000
单个节点健康探测
网络分区探测
发布速率>1000/s 探测
消息积压> 25万
队列没有消费者
客户端高可用预警
连接配置探测
Apollo & Config
依赖框架的消费者是否正常工作探测
Elephant & Duck
依赖框架的生产者正常工作探测
Elephant & Duck
RabbitMQ_Manager
单个机器进程数>150
单个进程消耗内存>50M
单个机器消费者占用总内存>2G
当前机器不在Eureka
Zabbix-机器异常预警
Keepalived探测
进程探测
VIP探测
内存小于80%探测
剩余磁盘小于10G探测
网络连接探测
agent无响应
LEO-集群运行时日志采集预警
每1分钟生产者异常超过3次
每分钟消费者异常超过3次
每3分钟消息进补偿且补发异常
每分钟Keepalive 探测异常超过1次
每3分钟业务订阅队列没消费者
每3分钟业务订阅消息积压队列
Sentry-业务使用场景预警
RabbitMQ_Manager拉起消费者异常
连接RabbitMQ异常
业务逻辑触发发布获消费异常
风险
信息画像
机器信息
机器负载
剩余内存
剩余磁盘
网卡流量
健康信息
集群心跳
发布速率
消费速率
消息积压
Ready数
Unack数
Connection数
Channel数
故障演练
演练项
CUP满载
/Data/apps/chaosblade/blade create cpu fullload
磁盘I/O
/Data/apps/chaosblade/blade c disk burn --write --read --size 10 --count 1024 --timeout 300
磁盘空间不足
/Data/apps/chaosblade/blade c disk fill --size 10000
内存不足
/Data/apps/chaosblade/blade create mem load --mem-percent 60 --timeout 10
节点进程,关机
kill -9 or reboot
网络丢包率
/Data/apps/chaosblade/blade create network loss --interface eth0 --percent 10 --exclude-port 5860
50%左右触发网络分区
恢复预案 导数据
发布速率过大
连接数过多
创建大量队列
消息积压
5个进程并发 发布消息 每个进程发送1000万
故障恢复
两个节点异常恢复的时候一定要重启一下集群,防止所有信息都存储到一个节点上了
/Data/apps/rabbitmq_server-3.7.11/sbin/rabbitmqctl close_all_connections --global 'Please close'
客户端核心代码
CI/CD
代码发布
Elephant & DUck
取样独立部署
非独立部署
全量独立部署
单元测试
代码覆盖100%
坏味道,BUG数 0
交叉测试
MySQL异常测试
MongoDB异常测试
Redis异常测试
核心功能
发布、订阅
重试 & 客户端负载均衡
工作单元后置发布消息
批量发布消息
延迟队列
消息幂等
消息补偿
消息追踪
TraceLog
系统管理
Dany-web
消息补偿
失败重发
拉取消息
DantTools
添加Vhost
同步数据
RabbitmqManager
管理队列,vhost,用户,权限,策略等
设计文档
设计类图
集群部署拓扑图
消息幂等设计图
消息补偿流程图
故障恢复处理操作文档
使用文档
如何申请Vhost
如何申请权限
如何使用Dany
失败重跑,消费补发
如何添加监控
性能优化
业务代码优化
消费时间>60s
消耗内存>50M
拉取消息数prefetch数优化
集群配置优化
1、利用cpu 多核 delegate_count 用于集群内部通信的委托进程的数量。当为多核CPU时可以考虑设置该值 Default: 16
2、调整 prefetch_count 目前是1 这个需要考虑网络带宽 和 消费速率
3、增加交换器数(exchange) 每增加一个交换器 就新开一个进程 增加cpu利用率 线下先试试效果
4、初步调研结果 可以提高cpu核数 带来cpu 性能的提升
2、调整 prefetch_count 目前是1 这个需要考虑网络带宽 和 消费速率
3、增加交换器数(exchange) 每增加一个交换器 就新开一个进程 增加cpu利用率 线下先试试效果
4、初步调研结果 可以提高cpu核数 带来cpu 性能的提升
历史关键故障
CI/CD
下线机器需要RabbitMQ负责人确认
走ops工单
切割日志异常
自检脚本
交叉依赖
MySQL,Redis异常无法自愈
主动捕捉异常触发消费者重启
Rabbitmq_Manager
sidecar异常
新增eureka探测,发现异常自动隔离
一个生产者发布速率过大导致整体性能下降
拆分集群
过载防护
监控预警
VIP漂移
php消费者未触发重连
引入心跳
收藏
收藏
0 条评论
下一页