QCon北京2015 sina jpool-微博平台自动化运维实践

34

Transcript of QCon北京2015 sina jpool-微博平台自动化运维实践

Page 1: QCon北京2015 sina jpool-微博平台自动化运维实践
Page 2: QCon北京2015 sina jpool-微博平台自动化运维实践

Sina � JPool � 

微博平台自动化运维实践 � 

@王关胜 �  � 运维架构师 � 

Page 3: QCon北京2015 sina jpool-微博平台自动化运维实践

目录 �  � CONTENT � 

1 � 

2 � 

微博平台业务背景 � 

Docker在平台的应用 � 4 � 

Sina � Jpool综合运维平台 � 3 � 

Sina � Dispatch的架构设计 � 

Page 4: QCon北京2015 sina jpool-微博平台自动化运维实践

1.微博平台业务背景 � 

业务量 �  � 

日志:百T+ � RPC:万亿+ � 

接口:600亿+ � 

运维 �  � 

Docker:53% � 扩容:5min � 

变更:15次/w �  � 

系统 �  � 

设备:3000+ � 集群:200+ � 

业务模块:50+ �  �  � 

强大的运维工具平台 � 

KPI �  � 

SLA:99.99% � RT:150ms � 

故障分:<2/季 �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  � 

用户 �  � 

用户:8亿 � DAU:8千万 � 

MAU:1.75亿 � 

Page 5: QCon北京2015 sina jpool-微博平台自动化运维实践

2.纵观自动化运维发展概况 � 

自动化运维发展概况 � 

阶段1 � 阶段2 � 

阶段3 � 阶段4 � !

原始阶段 � 

� 工具系统 � 

综合运维平台 � 

云计算&智能运维 � 

变更脚本化 � 

运维标准化 � 工具Web化 � 

运维精细化 � 工具平台化 � 数据API化 � 

运维服务化 � 智能化运维 � DevOPS � *aaS � 

Page 6: QCon北京2015 sina jpool-微博平台自动化运维实践

目录 �  � CONTENT � 

1 � 2 � 

微博平台业务背景 � 

Docker在平台的应用 � 4 � 

Sina � Jpool综合运维平台 � 3 � 

Sina � Dispatch的架构设计 � 

1 � 

Page 7: QCon北京2015 sina jpool-微博平台自动化运维实践

1.Sina � Dispatch介绍 � 

l 什么是Sina � Dispatch? � u  通用化的Shell调度与任务调度 � u  2012年新浪内部自研 � u  基于C++及Cwinux通信架构库开发 � u  主要组件:dispatch,agent,MySQL � u  消息协议:PB(ProtoBuf) � 

� l Dispatch主要特性 � 

u  丰富的API:控制操作接口化 � u  高可用:Master-Slave部署方式 � u  高性能:支持万台服务器的并发调度 � u  安全性强:MD5值校验,特殊字符过滤 � 

Page 8: QCon北京2015 sina jpool-微博平台自动化运维实践

2.Dispatch � 调度设计 � 

l Shell调度 � u  变量:内置Shell变量 � + � 自定义变量 � u  安全:MD5值签名,密码保护 � u  策略:可设置超时时间 � u  其他:同时并发执行,输出实时回显 � 

l 任务调度 � u  变量:内置任务变量 � + � 自定义变量 � u  安全:MD5值签名,签名错误拒绝执行 � u  策略:并发数控制,最大比例控制,超时控制 � u  输出:stdout � , � stderr实时回显 � u  脚本:支持Shell,Python,PHP等脚本语言 � u  状态:执行中,超时,失败,完成 � u  操作:启动,暂停,取消,重做,完成,回滚 � 

�  � 

Page 9: QCon北京2015 sina jpool-微博平台自动化运维实践

3.Dispatch � 架构 � 

dispatch � 主线程 � 

admin线程 � 

任务处理线程 � 

agent � 

服务器集群 � 

与agent连接的通信协议层及通信线程 � 

agent �  agent � 

通知master变化 � 

获取

shel

l指令

定义

� 

获取

新任

务 � 

更新

任务

执行

态 � 

发送

任务

� 

接收

消息

�  � 

接收

消息

�  � 

发送

shel

l �  � 

指令

�  � 

配置数据库 � 

主线程 � 

指令流: � 

agent上报 � 

Shell调度 � 

任务调度 � 

Page 10: QCon北京2015 sina jpool-微博平台自动化运维实践

4.Agent � 架构 � 

master � 

dispatch � 

通信层 � 

指令流: � 

agent上报 � 

Shell调度 � 

任务调度 � 

slave �  slave � 

agent � 

Shell处理 � 

操作队列 � 

Vfork � 

� 执行shell � 

app � pool1 � Task队列 � 

Vfork � 

执行任务 � 

Vfork � 

任务处理 � 

app � pool2 � Task队列 � 

执行任务 � 接

收 � 

任务

� 

结果

� 

结果

� 

shel

l � 

任务

� 

接收

� 

shel

l � 

轮询

� 

结果

� 

push

� 

shel

l � 

Exec

� 

shel

l � 

Exec

� 

任务

� 

Exec

� 

任务

� 

主动

连接

� 

任务

调度

� 

Shel

l调度

� 

Page 11: QCon北京2015 sina jpool-微博平台自动化运维实践

目录 �  � CONTENT � 

1 � 

2 � 

微博平台业务背景 � 

Docker在平台的应用 � 4 � 

Sina � Jpool综合运维平台 � 3 � 

Sina � Dispatch的架构设计 � 

3 � 

1 � 

Page 12: QCon北京2015 sina jpool-微博平台自动化运维实践

1.One � host的生命周期 � 

Text in here

Step1 � 机器初始化 �  �  �  � - � 设备录入资源池(资源管理) �  �  �  � - � 一键初始化(配置管理) � Step2 � 服务部署 �  �  �  � - � 环境部署 �  �  �  � - � 监控部署 �  �  �  �  � - � 服务部署(代码 � & � confs) � Step3 � 运维变更 �  �  �  � - � 系统变更,代码发布 �  �  �  � - � 服务迁移(动态扩容) � Step4 � 自动报修&下架 �  �  �  � - � 服务自动上下线 �  �  �  � - � 机器置换或下架 � 

业务运维可控

上架装机 � 

Title in here 服务部署 � 

新机器 � 

初始化 � 

Title in here

分配给业务 � 改管理员 � 

CMDB � 

Title in

here 运维变更 � 

Title in here

自动报修 � 

Title in here

过期下架 � 

Page 13: QCon北京2015 sina jpool-微博平台自动化运维实践

2.1 � Sina � JPool简介 � 

Dispatch Puppet  Master

agent � 

服务器集群 � 

puppet �  agent �  puppet � 

Web �  APP �  CLI �  API � 

l 什么是Sina � Jpool? � u  通用化集群管控平台 � u  核心模块 � 

Ø  用户&权限 � 

Ø  资源管理 � 

²  设备管理 � 

²  APP管理 � 

Ø  配置管理 � 

Ø  部署管理 � 

Ø  任务管理 � 

Ø  Nginx变更管理 � 

Ø  降级/封杀管理 � 

Ø  日志查询平台 � 

Page 14: QCon北京2015 sina jpool-微博平台自动化运维实践

公司级CMDB � 配置数据库 � 

资源管理 � 

关联系统API � 

设备管理 �  APP集群管理 � 

配置管理 � 

服务部署 � 

任务管理 � 

Shell管理 � 

Nginx � 管理 � 

降级 � 封杀 � 

监控管理 � 

dispatch �  puppet � master � 

� 用 � 户 � & � 权 � 限& � 审计 �  � 

流程&灰度发布 � 

工单管理 � 

问题管理 � 

运维变更窗口 � 

2.2 � JPool技术框架 � 

Page 15: QCon北京2015 sina jpool-微博平台自动化运维实践

l 平台核心需求:DB化 � u  设备信息-唯一性 � 

Ø  配置管理 � Ø  系统监控 � Ø  。。。 � 

u  应用信息-多对多 � Ø  应用&发布部署 � Ø  降级&封杀 � Ø  Nginx变更 � Ø  。。。 � 

u  关联关系 �  � 

3.1 � JPool-资源管理 � 

设备池 �  设备列表 � 1:n � 

应用 �  应用池 � 1:n � 

设备 � 

应用设备 � 1:n � 

应用 � 1:n � 

• 设计复杂,实现简单,可用性强 � • 案例:Sina � Jpool,BaiDu � Noah � 

基于严谨的带层级的关联关系 � 

• 设计简单,实现复杂,灵活多变,可扩展性强 � • 案例:小米,Jpool2 � 

基于tag形式的关系 � 

• 复杂的关联结构模型 � • 案例:Amazon � 

混合型 � 

业界实践 � 

Page 16: QCon北京2015 sina jpool-微博平台自动化运维实践

3.2 � JPool-资源管理关系图 � 

应用管理 � 设备管理 � 

产品 � 

APP � APP � 

APP � 

APP_Pool � APP_Pool � 

APP_Pool � 

N � 个设备 � 

设备池子 � 

Node � Node � 

Node � 

导入 � 基于网络拓扑,设备类型 � 

JPool � 应用服务拓扑 � 

配置管理 � 

Node � 

Node � 

Node � 

Node � 

Shell操作 � 

操作 � 

脚本文件 � 

任务(子任务) � 

任务模板 � 

任务 � 

历史任务 � 

并发& � 回显 �  比例并行 � 

执行状态 � 任务操作 � 实时回显 � 

任务脚本 � 

Page 17: QCon北京2015 sina jpool-微博平台自动化运维实践

4.1 � Jpool-配置管理需求 � 

l  hostname � l  hosts � l  sudo � l  repo � l  scripts � l  sysctl � l  nrpe � l  sys_init � l  all � agent �  � 

基础配置 � 

l  route � l  resolver � l  dnsmasq �  � 

机房相关 � 

l  crontab � l  rsync � l  scribe � l  service_confs � l  name_pool � l  logtailer �  � 

业务相关 � 

Page 18: QCon北京2015 sina jpool-微博平台自动化运维实践

4.2 � 基于Puppet的实践 � 

--install �  �  �  �  �  �  �  � |--puppet.conf: �  � 配置文件 �  �  �  �  �  �  �  � |--fileserver.conf: �  � file � server的配置文件 �  �  �  �  �  �  �  � |--auth.conf: �  � 权限的配置文件 �  �  �  �  �  �  �  � |--files: �  �  � puppet的文件目录 �  �  �  �  �  �  �  � | �  �  �  �  �  � |--module1 �  �  �  �  �  �  �  � | �  �  �  �  �  � | �  �  �  �  � |--池子1 �  �  �  �  �  �  �  � | �  �  �  �  �  � | �  �  �  �  � | �  �  �  � |--各个资源文件的各个版本 �  �  �  �  �  �  �  � | �  �  �  �  �  � | �  �  �  �  � |--池子2 �  �  �  �  �  �  �  � | �  �  �  �  �  � |--module2 �  �  �  �  �  �  �  � |--manifests: �  � 节点定义目录 �  �  �  �  �  �  �  � | �  �  �  � |--variable �  �  �  � 池子的变量目录 �  �  �  �  �  �  �  � | �  �  �  � | �  �  �  � |--池子1~n �  �  �  �  �  �  �  � | �  �  �  � | �  �  �  � | �  �  �  �  � |--pool_env �  � 池子参数目录 �  �  �  �  �  �  �  � | �  �  �  � | �  �  �  � | �  �  �  �  �  �  �  �  � |--池子的参数文件,存在多个版本。 �  �  �  �  �  �  �  � | �  �  �  � | �  �  �  � | �  �  �  �  � |--pool_module_env �  �  �  �  �  �  �  � | �  �  �  � | �  �  �  � | �  �  �  �  �  �  �  �  �  �  � |--池子加载的各个modlue的参数文件,存在多个版本。 �  �  �  �  �  �  �  � | �  �  �  � |--nodes � 节点目录 �  �  �  �  �  �  �  �  � | �  �  �  � | �  �  �  � |--池子1~n �  �  �  �  �  �  �  � | �  �  �  � | �  �  �  � | �  �  �  �  � |--池子下的服务器 �  �  �  �  �  �  �  � |--modules: �  �  �  �  � 模块定义目录 �  �  �  �  �  �  �  � | �  �  � |--module的参数化class,一个module存在多个版本的文件 �  �  �  �  �  �  �  � |--test: �  �  �  �  �  �  �  �  � 测试目录 � 

l  源码目录规划: �  线上实践 � 

Page 19: QCon北京2015 sina jpool-微博平台自动化运维实践

4.3 � Puppet � DB化 � 

可视化操作界面 � l 配置修改范围 � u  变量 � 

Ø  公共变量 � Ø  module变量 � Ø  池子变量 � 

u  module � u  节点与池 �  � 

l 版本化管理 � u  版本 � 

Ø  变量 � Ø  module � 

u  快照:池 �  �  � 

Page 20: QCon北京2015 sina jpool-微博平台自动化运维实践

4.4 � Puppet配置DB化架构 � 

Puppet � 模块UI �  JPool �  配置管理库

1.Puppet配置修改 �  2.配置入库 � 

3.应用配置 � 

SVN服务器 � 

Puppet � Master1 � 

Nginx � 

Puppet � client �  Puppet � client �  Puppet � client � 

Puppet � Master2 � 

4.提交SVN � 

5.修改状态 � 

7.配

置同

步 � 

Backup(配置同步) � 

Page 21: QCon北京2015 sina jpool-微博平台自动化运维实践

5.1 � JPool-任务管理 � 

l 任务设计 � u  通用的脚本自动执行平台 � u  安全,可靠,可视 � u  任务变量:内置变量 � + � 自定义变量 � 

Ø  任务脚本变量 � = � app变量+ �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  � app_pool变量+ �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  � 任务变量+ � 

u  任务类型&任务模板 � 

l 线上某服务代码发布 �  � 

Java服务代码发布 � 

Tag � 输 � 入 � 

任务创建 � 

变量Init � 

判断应用 � server � 

判断Tag � 类型 � 

增量下载Tag � 

切走流量 � 停服务 � 

拷贝 � 代码 � 

切回流量 � 

代码上线逻辑 � 处理 � 

输出 � 

日志检测服务检测 �  启动服务 � 

实时任务状态 �  完成 � 

Page 22: QCon北京2015 sina jpool-微博平台自动化运维实践

5.2 � Jpool-任务状态监控 � 

� tag � 

部署路径 � 

任务状态 � 

超时时间 � 

步长&比例 � 

APP_Pool列表 �  状态分布 � 

任务实时回显 � 

Page 23: QCon北京2015 sina jpool-微博平台自动化运维实践

6.1 � Jpool-Nginx变更管理 � 

l  变更需求 � u  参数调整 � u  member修改 � u  规则修改 �  � 

l  配置拆分 � : � include � 

Nginx.conf � 

upstream � pool1 � 

pool2 � 

vhost � server1 � 

server2 � 

Nginx变更窗口示例 � 

Page 24: QCon北京2015 sina jpool-微博平台自动化运维实践

6.2 � Nginx变更流程 � 

Nginx � 模块UI � 

本地文件 � 

配置管理库

1.Nginx修改 � 

2.拉取池信息 � 

SVN服务器 � 

dispatch � 

Nginx � 

5.任

务下

发 � 

Nginx �  Nginx � 

3.提交 � 

Nginx配置变更 � l  主要特性 � u  配置文件diff � u  下发版本校验 � u  审批工作流 � u  记录查询 � u  API化 � 

l  下发控制 � u  一键发布 � u  灰度发布 �  配置修改 � 

应用变更 � 

Page 25: QCon北京2015 sina jpool-微博平台自动化运维实践

7. � Jpool-降级封杀管理 � 

l  降级封杀:5000+开关 � u  原则:覆盖全,开关避免手输 � 

u  方案: � 

Ø  业务代码框架层实现 � 

Ø  动态修改运行时变量值 � 

Ø  前端监听端口,支持check/on/off � 

Ø  集成JPool � 

降级封杀窗口 � 

Page 26: QCon北京2015 sina jpool-微博平台自动化运维实践

8. � 自动化变更 � 

服务降级/封禁  

流量切换  

JPool � 

限流  

Docker机动池  

数据修复  

日常  

其他  

变更策略 � 变更手段 � 

扩容/缩容  

依赖系统 � 

分工&职责&流程  

工单系统&量化KPI  

checklist  &  Double  check  

区分四种环境  

灰度发布  

代码部署  

Puppet/Nginx变更  

Page 27: QCon北京2015 sina jpool-微博平台自动化运维实践

目录 �  � CONTENT � 

1 � 

2 � 

微博平台业务背景 � 

Docker在平台的应用 � 

1 � 

Sina � Jpool综合运维平台 � 3 � 

Sina � Dispatch的架构设计 � 

1 � 

4 � 

Page 28: QCon北京2015 sina jpool-微博平台自动化运维实践

1. � 双实例Cgroup隔离方案 � 

l Cgroup优化 � u 硬件配置 � 

Ø  2CPU-12核 � Ø  Mem:12G � 

u 隔离方案 � Ø  CPU分组 � Ø  内存分组 �  �  � 

l UMA � vs � NUMA �  � 

Page 29: QCon北京2015 sina jpool-微博平台自动化运维实践

2.Docker单机部署方案 � 

statsd � 

Logs1

Nginx � 

打镜像 � 

scribe � cadvisor � 

ELK �  日志中心 � 

HOST(10.75.0.2) � 

Jenkins � 

8080 � 

APP1 � 

8081 � 

APP2 �  Logs2

流量调度 � 

容器监控 �  行为日志 �  业务日志 � 

-v � 

-v � -link � 

-host � 

-host � 

容器 � 

存储卷 � 

系统 � 

工具 � 

Page 30: QCon北京2015 sina jpool-微博平台自动化运维实践

3.Docker集群部署 � 

l 部署原则 � u  发布代码一样发布镜像 � u  部署时间成本:分钟级 � u  快速流量转移 � 

l 部署明细:5分钟 � u  设备录入及迁移 � u  前端镜像发布 � u  Nginx变更 �  � 

新设备 � 

迁移设备 � 

CM系统 �  Jpool资源池 � 

简易服务发现 � 

upstream � 生成&提交 � 

dispatch � 

新扩容 �  服务同步 � 

ip:port � 

镜像

发布

� 

Page 31: QCon北京2015 sina jpool-微博平台自动化运维实践

4.JPool2-Paas平台 � 

Networking � tools � 

RPC � 

APP � 

Nginx � 

MqProcess � 

MC �  Redis �  MySQL � 

Service(ip:port) � 

RPC �  Nginx � 

Wserf �  Consul � 

Dispatch � 

JPool � 

� Graphite � & � ELK � 

Cadvisor&Logstash � 监控 � 

编排 � 

负载调度 � 

服务发现 � 

JPool2 � 

Jenkins � 

CI �  CD � 

� Gitlab �  � 

Registry � Hub � 

DEV � 

TEST � 

基础设施 � 

Page 32: QCon北京2015 sina jpool-微博平台自动化运维实践

5.平台Docker化进展 � 

l 部署进度 � u  前端Docker化比率:53% � u  实例数:1000+ � 

l 春晚大考 � u  10次动态扩容 � u  节点迁移数:200+ � u  单次操作时间:<5分钟 � 

业务部署范围 � 

Page 33: QCon北京2015 sina jpool-微博平台自动化运维实践

谢谢! � 

Page 34: QCon北京2015 sina jpool-微博平台自动化运维实践

@InfoQ   infoqchina