协同治理 中间件稳定性保障实践 主讲人:李进网易数帆资深中间件运维架构师 CONTENT 3 中间件故障发现探索与实践 4 中间件故障定位探索与实践 5 中间件故障恢复探索与实践 1 传统中间件运维挑战与PaaS时代的应对策略 2 中间件自身稳定性探索与实践 数字化基础软件自主创新分享周 NETEASEDIGITALSAIL 传统中间件运维挑战与PaaS时代的应对策略 数字化基础软件自主创新分享周 传统中间件运维挑战与PaaS时代的应对策略 数字化基础软件自主创新分享周 传统中间件运维挑战与PaaS时代的应对策略 物理机时代 云主机时代 容器时代 资源强绑定物理设备 •资源申请及部署流程冗长,参数变更和规格变更不够灵活快捷 •缺少资源弹性,一般按最大需求申请资源,造成大量资源浪费 •受物理设备故障率影响,缺少故障迁移能力 •中间件在同一机房,难以物理隔离,安全依赖运维制度约束 稳定性强依赖运维人员经验 •中间件生命周期管理、参数调优、故障处理高度专业化 •个性化的运维脚本和运维文档无法保障质量,也难以积累和推广 •随着中间件规模增大和使用周期拉长,风险和成本逐渐无法评估 效率: 成本:安全: 稳定: 数字化基础软件自主创新分享周 传统中间件运维挑战与PaaS时代的应对策略 物理机时代 云主机时代 容器时代 以OpenStack为代表的IaaS平台解决了一部分问题 •中间件不再绑定物理设备,通过热迁移等技术可以降低物理设备故障的影响 •可以按需申请和调整资源,减少了资源浪费 •部分厂商基于IaaS平台开发了中间件管控服务,解决了部分统一管理甚至统一运维的需求 •提供了部分资源隔离和访问隔离的功能 IaaS平台中间件依然存在痛点 •云主机Hypervisor性能损耗较大,同规格中间件难以达到物理设备的性能 •纯IaaS平台依然没有解决中间件运维高度专业化,强依赖运维人员经验的问题 •IaaS厂商提供的中间件部分简化了中间件运维,但高度绑定自家技术栈 效率: 成本:安全:稳定: 数字化基础软件自主创新分享周 传统中间件运维挑战与PaaS时代的应对策略 物理机时代 云主机时代 容器时代 基于K8S+operator的PaaS解决方案 •K8S提供了资源抽象、弹性伸缩、故障转移能力 •Operator提供了统一的中间件生命周期管理界面和运维操作“原语” •容器虚拟化方案性能上天然优于虚拟机方案 •容器化中间件不绑定私有技术栈,用户可以再不同的IaaS平台上使用 K8S资源抽象也并非全能 •各种中间件本身高可用能力参差不齐,而且原有的高可用设计未必适合云原生环境 •中间件的监控接口、日志等高度个性化,不适配K8S-Prometheus体系 •中间件的运维操作并不一定能抽象成CR对象,也未必都可以使用声明式接口执行 效率: 成本:安全: 稳定:? 数字化基础软件自主创新分享周 故障恢复 故障定位 工作方向2:增加故障发现的覆盖率和标准化程度 工作方向1:增强中间件自身稳定性 工作方向3:提高故障定位的效率和准确性 传统中间件运维挑战与PaaS时代的应对策略 中间件平台 redis kafka zookeeper es ...... 故障发现 容器环境下中间件稳定性保障思路 工作方向4:提高恢复的速度和可靠性 数字化基础软件自主创新分享周 NETEASEDIGITALSAIL 中间件自身稳定性探索与实践 数字化基础软件自主创新分享周 轻舟中间自身稳定性探索和实践 中间件服务稳定性增强实践–中间高可用能力建设 本地高可用 异地数据高可用 异地热备 异地多活 •提供单K8S集群物理节点故障容错能力 •大部分中间件本身已经具备的能力 •通过operator注入反亲和调度参数,强化物理节点级别的容灾能力 •通过localstorage+lvm+raid提高服务数据高可用能力 •提供跨K8S集群进行数据备份和恢复的能力 •部分中间件本身具备该能力,需要借助自研或第三方工具实现 •通过向服务镜像中植入数据备份和导入工具,并通过operator或assistor服务启动 •提供跨K8S集群进行数据同步的能力 •少量中间件本身具备该能力,需要借助自研或第三方工具实现 •中间件operator在管理中间件对象的同时也维护一个同步服 务,在中间件CR中定义同步相关参数 •通过DNS域名切换等手段切换主备集群 •提供跨K8S集群进行多读多写的能力 •极少量中间件本身具备该能力,需要借助自研或第三方工具实现 •在数据同步的基础上修改服务本身或同步工具的源码,加入双向同步/数据一致性检查/防循环等能力 数字化基础软件自主创新分享周 轻舟中间件自身稳定性探索和实践 中间件高可用探索–中间件跨K8S集群部署 实现中间件本身的多集群多活能力代价较大,另一种思路,就是借助K8S集群联邦能力和中间件自身的本地高可用能力,让中间件在多个K8S集群间部署,从而曲线达到类似跨集群多活的功能 数字化基础软件自主创新分享周 基于K8S集群联邦跨K8S部署资源,关键概念: •资源模板(ResourceTemplate) •分发策略(PropagaionPolicy) •资源绑定(ResourceBinding) •覆盖策略(OverridePolicy) 中间件适配集群联邦,关键服务 •FederatedPaasOperator:负责中间件全局视图(FederatedPaas)、中间件跨k8s集群创建、更新流程。 •FederatedPaasSchduler:负责中间件跨集群调度。 •FederatedPaasAgent:负责中间件联邦状态收集(FederatedIPStatus)、与服务发现 NETEASEDIGITALSAIL 中间件故障发现探索与实践 数字化基础软件自主创新分享周 中间件故障发现探索与实践 中间件运行态监控标准化实践–统一监控平台 轻舟管控平台 Alert-Manager 监控报警模板 Grafana 监控管理服务 Prometheus 计算集群-1 计算集群-N Prometheus Prometheus exporter ... exporter 中间件 中间件 •中间件监控数据采用Prometheus-Exporter方式对外暴露 •计算集群Prometheus数据统一汇聚到管控平台 •管控平台监控采集模板统一管理,使用CRD形式下发到计算集群并转化为Prometheus配置 •管控平台预置Grafana模板,提供兜底监控视图 •管控平台预置报警规则,提供兜底报警能力 数字化基础软件自主创新分享周 中间件故障发现探索与实践 中间件日志监控标准化实践–云原生非侵入式日志监控 轻舟管控平台 Elasticsearch 日志管理服务 Logstash Kafka 日志采集CR 计算集群-1 计算集群-N ripple ripple filebeat ... filebeat 中间件 中间件 •namespace级别 •label和pod匹配,对应一类pod的日志配置 •type表明日志的挂载方式:stdout,hostPath,emptyDir,rootfs ,pv… 日志采集CR •日志目录为容器内路径 •自定义日志fields元信息,也可以用于表明发送不同的kafkatopic,esindex等 •定义将pod的某些label,annotation,env作为日志元信息打标 •定义日志的定时清理,支持保留天数和保留个数 数字化基础软件自主创新分享周 中间件故障发现探索与实践 中间件日志监控标准化实践–统一巡检平台 轻舟管控平台 Alert-Manager 巡检服务 监控报警模板 Grafana 巡检模板 监控管理服务Prometheus巡检引擎 计算集群-1 Prometheusexporter 中间件 ... 计算集群-N Prometheusexporter 中间件 数字化基础软件自主创新分享周 中间件故障发现探索与实践 中间件故障发现探索–ChaosMesh混沌测试 ChaosMesh是一个开源的云原生混沌工程平台,提供丰富的故障模拟类型,具有强大的故障场景编排能力,借助ChaosMesh平台,在开发测试中模拟现实环境可能�现的各类异常,帮助丰富监控和巡检案例。 数字化基础软件自主创新分享周 中间件故障发现探索与实践 中间件故障发现探索–接入APM全链路监控 APM即应用性能管理服务(ApplicationPerformanceManagement),该系统通过向应用系统植入agent采集应用调用栈和网络请求数据,用于服务的拓扑关系展示,应用服务的响应时间追踪、吞吐量和状态的监控,慢响应和错误明细的查询。由于APMagent实现了很多中间件协议识别能力,在测试环境,可以借助APM发现容器化中间件系统瓶颈。 数字化基础软件自主创新分享周 NETEASEDIGITALSAIL 中间件故障定位探索与实践 数字化基础软件自主创新分享周 中间件故障定位探索和实践 中间件故障定位能力探索–背景 人工定位 平台辅助定位 智能化定位 •故障排查效率严重依赖运维人员 经验 • • 排查经验零散且无法传承积累 故障排查脚本缺乏统一标准,无 法统一把控质量和准确性 •人工执行命令效率低,错误率高 •大数据分析故障和监控指标之间的关联,预判故障 •AI自动分析引发报警的故障点,智能识别故障原因 •根据预警及分析结果自动执行操作,消除故障 •向运维人员发送报表汇报结果 •把运维人员故障定位的经验固化为服务代码 •定期巡检or通过报警触发自动定位,在运维人员接入前给�经验参考和处理建议 •运维人员根据建议执行处理步骤 vsvs 数字化基础软件自主创新分享周 中间件故障定位探索与实践 中间件故障定位实践–基于规则引擎的根因分析 报警触发指定规则引擎运行,按照 规则扫描监控及中间件运行态数据 总结整理开发运维人员常 用排查思路,整理成统一 格式的经验规则 故障定位服务 故障定位服务 报警服务 运维经验规则 规则引擎 故障分析报告 Prometheus 日志ES 运维网关接口 使用开源规则引擎编排 排查规则 数字化基础软件自主创新分享周 中间件故障定位探索与实践 中间件故障定位探索–基于决策树引擎的智能分析 •使用CART决策树,自动学习并生故障和指标集合之间的关联关系,替代人工总结的规则引擎 •使用ChaosMeshpipline或ChaosMonkey顺序或随机注入故障,模拟线上故障场景 数字化基础软件自主创新分享周 NETEASEDIGITALSAIL 中间件故障恢复探索与实践 数字化基础软件自主创新分享周 涉及到中间件状态变更类的运维操作,如kafka分区迁移、amq主备切换等,通过统一运维网关下发到指定计算集群指定中间件实例执行 中间件故障恢复探索与实践 中间件故障恢复实践–统一运维网关 中间件生命周期操作/配置变更操作等通过K8S声明式API提交给operator执行 轻舟管控平台 前端控制台 paas-manager operator-assistor 运维操作和中间件生命周 期操作,都需要验证权限 并记录审计日志 kubecube auth/audit 计算集群-1 计算集群-N operator operator 中间件 ... 中间件 assistor assistor 数字化基础软件自主创新分享周 中间件故障恢复探索与实践 中间件故障恢复探索–自动化故障恢复 稳定性管控系统 报警服务 稳定性管理 监控数据 故障定位引擎 故障分析报告 故障回调引擎 故障恢复预案 故障处理报告 对于定位准确度高且处理 方式固定的故障,在稳定性管控服务托管恢复脚 本,由定位引擎