狠狠撸

狠狠撸Share a Scribd company logo
QCon北京2015 sina jpool-微博平台自动化运维实践
Sina ?JPool ?
微博平台自动化运维实践 ?
@王关胜 ? ?运维架构师 ?
目录 ? ?CONTENT ?
1 ?
2 ?
微博平台业务背景 ?
Docker在平台的应用 ?4 ?
Sina ?Jpool综合运维平台 ?3 ?
Sina ?Dispatch的架构设计 ?
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亿 ?
2.纵观自动化运维发展概况 ?
自动化运维发展概况 ?
阶段1 ?
阶段2 ?
阶段3 ?
阶段4 ?!
原始阶段 ?
 ?工具系统 ?
综合运维平台 ?
云计算&智能运维 ?
变更脚本化 ?
运维标准化 ?
工具Web化 ?
运维精细化 ?
工具平台化 ?
数据API化 ?
运维服务化 ?
智能化运维 ?
DevOPS ?
*aaS ?
目录 ? ?CONTENT ?
1 ?
2 ?
微博平台业务背景 ?
Docker在平台的应用 ?4 ?
Sina ?Jpool综合运维平台 ?3 ?
Sina ?Dispatch的架构设计 ?
1 ?
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值校验,特殊字符过滤 ?
2.Dispatch ?调度设计 ?
l??Shell调度 ?
u?? 变量:内置Shell变量 ?+ ?自定义变量 ?
u?? 安全:MD5值签名,密码保护 ?
u?? 策略:可设置超时时间 ?
u?? 其他:同时并发执行,输出实时回显 ?
l??任务调度 ?
u?? 变量:内置任务变量 ?+ ?自定义变量 ?
u?? 安全:MD5值签名,签名错误拒绝执行 ?
u?? 策略:并发数控制,最大比例控制,超时控制 ?
u?? 输出:stdout ?, ?stderr实时回显 ?
u?? 脚本:支持Shell,Python,PHP等脚本语言 ?
u?? 状态:执行中,超时,失败,完成 ?
u?? 操作:启动,暂停,取消,重做,完成,回滚 ?
 ?
3.Dispatch ?架构 ?
dispatch ?
主线程 ?
admin线程 ?
任务处理线程 ?
agent ?
服务器集群 ?
与agent连接的通信协议层及通信线程 ?
agent ? agent ?
通知master变化 ?
获取shell指令定义 ?
获取新任务 ?
更新任务执行态 ?
发送任务 ?
接收消息 ? ?
接收消息 ? ?
发送
shell ? ?
指令 ? ?
配置数据库 ?
主线程 ?
指令流: ?
agent上报 ?
Shell调度 ?
任务调度 ?
4.Agent ?架构 ?
master ?
dispatch ?
通信层 ?
指令流: ?
agent上报 ?
Shell调度 ?
任务调度 ?
slave ? slave ?
agent ?
Shell处理 ?
操作队列 ?
Vfork ?
 ?执行shell ?
app ?pool1 ?Task队列 ?
Vfork ?
执行任务 ?
Vfork ?
任务处理 ?
app ?pool2 ?Task队列 ?
执行任务 ?
接收 ?
任务 ?
结果 ?
结果 ?
shell ?
任务 ?
接收 ?
shell ?
轮询 ?
结果 ?
push ?
shell ?
Exec ?
shell ?
Exec ?
任务 ?
Exec ?
任务 ?
主动连接 ?
任务调度 ?
Shell调度 ?
目录 ? ?CONTENT ?
1 ?
2 ?
微博平台业务背景 ?
Docker在平台的应用 ?4 ?
Sina ?Jpool综合运维平台 ?3 ?
Sina ?Dispatch的架构设计 ?
3 ?
1 ?
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
过期下架 ?
2.1 ?Sina ?JPool介绍 ?
Dispatch Puppet	
 ?Master
agent ?
服务器集群 ?
puppet ? agent ? puppet ?
Web ? APP ? CLI ? API ?
l??什么是Sina ?Jpool? ?
u?? 通用化集群管控平台 ?
u?? 核心模块 ?
??? 用户&权限 ?
??? 资源管理 ?
??? 设备管理 ?
??? APP管理 ?
??? 配置管理 ?
??? 部署管理 ?
??? 任务管理 ?
??? Nginx变更管理 ?
??? 降级/封杀管理 ?
??? 日志查询平台 ?
公司级CMDB ?
配置数据库 ?
资源管理 ?
关联系统API ?
设备管理 ? APP集群管理 ?
配置管理 ?
服务
部署 ?
任务
管理 ?
Shell
管理 ?
Nginx ?
管理 ?
降级 ?
封杀 ?
监控
管理 ?
dispatch ? puppet ?master ?
 ?用 ?
户 ?
& ?
权 ?
限
& ?
审
计 ?
 ?
流
程
&
灰
度
发
布 ?
工
单
管
理 ?
问
题
管
理 ?
运维变更窗口 ?
2.2 ?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 ?
混合型 ?
业界实践 ?
3.2 ?JPool-资源管理关系图 ?
应用管理 ?设备管理 ?
产物 ?
APP ?
APP ?
APP ?
APP_Pool ?
APP_Pool ?
APP_Pool ?
N ?个
设备 ?
设备
池子 ?
Node ?
Node ?
Node ?
导入 ?
基于网络拓扑,
设备类型 ?
JPool ?
应用服务拓扑 ?
配置管理 ?
Node ?
Node ?
Node ?
Node ?
Shell操作 ?
操作 ?
脚本
文件 ?
任务(子任务) ?
任务模板 ?
任务 ?
历史任务 ?
并发& ?
回显 ? 比例并行 ?
执行状态 ?
任务操作 ?
实时回显 ?
任务脚本 ?
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 ?
 ?
业务相关 ?
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?? 源码目录规划: ? 线上实践 ?
4.3 ?Puppet ?DB化 ?
可视化操作界面 ?l??配置修改范围 ?
u?? 变量 ?
??? 公共变量 ?
??? module变量 ?
??? 池子变量 ?
u?? module ?
u?? 节点与池 ?
 ?
l??版本化管理 ?
u?? 版本 ?
??? 变量 ?
??? module ?
u?? 快照:池 ?
 ?
 ?
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(配置同步) ?
5.1 ?JPool-任务管理 ?
l??任务设计 ?
u?? 通用的脚本自动执行平台 ?
u?? 安全,可靠,可视 ?
u?? 任务变量:内置变量 ?+ ?自定义变量 ?
??? 任务脚本变量 ?= ?app变量+ ?
 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?app_pool变量+ ?
 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?任务变量+ ?
u?? 任务类型&任务模板 ?
l??线上某服务代码发布 ?
 ?
Java服务代码发布 ?
Tag ?
输 ?
入 ?
任务
创建 ?
变量
Init ?
判断应用 ?
server ?
判断Tag ?
类型 ?
增量下载
Tag ?
切走流量 ?
停服务 ?
拷贝 ?
代码 ?
切回流
量 ?
代
码
上
线
逻
辑 ?
处
理 ?
输
出 ?
日志检测
服务检测 ?
启动服务 ?
实时任务状态 ? 完成 ?
5.2 ?Jpool-任务状态监控 ?
 ?
tag ?
部署路径 ?
任务状态 ?
超时时间 ?
步长&比例 ?
APP_Pool列表 ? 状态分布 ?
任务实时回显 ?
6.1 ?Jpool-Nginx变更管理 ?
l?? 变更需求 ?
u?? 参数调整 ?
u?? member修改 ?
u?? 规则修改 ?
 ?
l?? 配置拆分 ?: ?include ?
Nginx.conf ?
upstream ?
pool1 ?
pool2 ?
vhost ?
server1 ?
server2 ?
Nginx变更窗口示例 ?
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?? 灰度发布 ? 配置修改 ?
应用变更 ?
7. ?Jpool-降级封杀管理 ?
l?? 降级封杀:5000+开关 ?
u?? 原则:覆盖全,开关避免手输 ?
u?? 方案: ?
??? 业务代码框架层实现 ?
??? 动态修改运行时变量值 ?
??? 前端监听端口,支持check/on/off ?
??? 集成JPool ?
降级封杀窗口 ?
8. ?自动化变更 ?
服务降级/封禁	
 ?
流量切换	
 ?
JPool ?
限流	
 ?
Docker机动池	
 ?
数据修复	
 ?
日常	
 ?
其他	
 ?
变更策略 ?
变更手段 ?
扩容/缩容	
 ?
依赖系统 ?
分工&职责&流程	
 ?
工单系统&量化KPI	
 ?
checklist	
 ?&	
 ?Double	
 ?check	
 ?
区分四种环境	
 ?
灰度发布	
 ?
代码部署	
 ?
Puppet/Nginx变更	
 ?
目录 ? ?CONTENT ?
1 ?
2 ?
微博平台业务背景 ?
Docker在平台的应用 ?
1 ?
Sina ?Jpool综合运维平台 ?3 ?
Sina ?Dispatch的架构设计 ?
1 ?
4 ?
1. ?双实例Cgroup隔离方案 ?
l??Cgroup优化 ?
u??硬件配置 ?
??? 2CPU-12核 ?
??? Mem:12G ?
u??隔离方案 ?
??? CPU分组 ?
??? 内存分组 ?
 ? ?
l??UMA ?vs ?NUMA ?
 ?
2.Docker单机部署方案 ?
statsd ?
Logs1
Nginx ?
打镜像 ?
scribe ?cadvisor ?
ELK ?
日志
中心 ?
HOST(10.75.0.2) ?
Jenkins ?
8080 ?
APP1 ?
8081 ?
APP2 ?
Logs2
流量调度 ?
容器监控 ? 行为日志 ? 业务日志 ?
-v ?
-v ?
-link ?
-host ?
-host ?
容器 ?
存储卷 ?
系统 ?
工具 ?
3.Docker集群部署 ?
l??部署原则 ?
u?? 发布代码一样发布镜像 ?
u?? 部署时间成本:分钟级 ?
u?? 快速流量转移 ?
l??部署明细:5分钟 ?
u?? 设备录入及迁移 ?
u?? 前端镜像发布 ?
u?? Nginx变更 ?
 ?
新设备 ?
迁移设备 ?
CM
系统 ?
Jpool资源池 ?
简易服务发现 ?
upstream ?
生成&提交 ?
dispatch ?
新扩容 ? 服务同步 ?
ip:port ?
镜像发布 ?
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 ?
基础设施 ?
5.平台Docker化进展 ?
l??部署进度 ?
u?? 前端Docker化比率:53% ?
u?? 实例数:1000+ ?
l??春晚大考 ?
u?? 10次动态扩容 ?
u?? 节点迁移数:200+ ?
u?? 单次操作时间:<5分钟 ?
业务部署范围 ?
谢谢! ?
@InfoQ	
 ? infoqchina	
 ?

More Related Content

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

  • 2. Sina ?JPool ? 微博平台自动化运维实践 ? @王关胜 ? ?运维架构师 ?
  • 3. 目录 ? ?CONTENT ? 1 ? 2 ? 微博平台业务背景 ? Docker在平台的应用 ?4 ? Sina ?Jpool综合运维平台 ?3 ? Sina ?Dispatch的架构设计 ?
  • 4. 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亿 ?
  • 5. 2.纵观自动化运维发展概况 ? 自动化运维发展概况 ? 阶段1 ? 阶段2 ? 阶段3 ? 阶段4 ?! 原始阶段 ? ?工具系统 ? 综合运维平台 ? 云计算&智能运维 ? 变更脚本化 ? 运维标准化 ? 工具Web化 ? 运维精细化 ? 工具平台化 ? 数据API化 ? 运维服务化 ? 智能化运维 ? DevOPS ? *aaS ?
  • 6. 目录 ? ?CONTENT ? 1 ? 2 ? 微博平台业务背景 ? Docker在平台的应用 ?4 ? Sina ?Jpool综合运维平台 ?3 ? Sina ?Dispatch的架构设计 ? 1 ?
  • 7. 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值校验,特殊字符过滤 ?
  • 8. 2.Dispatch ?调度设计 ? l??Shell调度 ? u?? 变量:内置Shell变量 ?+ ?自定义变量 ? u?? 安全:MD5值签名,密码保护 ? u?? 策略:可设置超时时间 ? u?? 其他:同时并发执行,输出实时回显 ? l??任务调度 ? u?? 变量:内置任务变量 ?+ ?自定义变量 ? u?? 安全:MD5值签名,签名错误拒绝执行 ? u?? 策略:并发数控制,最大比例控制,超时控制 ? u?? 输出:stdout ?, ?stderr实时回显 ? u?? 脚本:支持Shell,Python,PHP等脚本语言 ? u?? 状态:执行中,超时,失败,完成 ? u?? 操作:启动,暂停,取消,重做,完成,回滚 ? ?
  • 9. 3.Dispatch ?架构 ? dispatch ? 主线程 ? admin线程 ? 任务处理线程 ? agent ? 服务器集群 ? 与agent连接的通信协议层及通信线程 ? agent ? agent ? 通知master变化 ? 获取shell指令定义 ? 获取新任务 ? 更新任务执行态 ? 发送任务 ? 接收消息 ? ? 接收消息 ? ? 发送 shell ? ? 指令 ? ? 配置数据库 ? 主线程 ? 指令流: ? agent上报 ? Shell调度 ? 任务调度 ?
  • 10. 4.Agent ?架构 ? master ? dispatch ? 通信层 ? 指令流: ? agent上报 ? Shell调度 ? 任务调度 ? slave ? slave ? agent ? Shell处理 ? 操作队列 ? Vfork ? ?执行shell ? app ?pool1 ?Task队列 ? Vfork ? 执行任务 ? Vfork ? 任务处理 ? app ?pool2 ?Task队列 ? 执行任务 ? 接收 ? 任务 ? 结果 ? 结果 ? shell ? 任务 ? 接收 ? shell ? 轮询 ? 结果 ? push ? shell ? Exec ? shell ? Exec ? 任务 ? Exec ? 任务 ? 主动连接 ? 任务调度 ? Shell调度 ?
  • 11. 目录 ? ?CONTENT ? 1 ? 2 ? 微博平台业务背景 ? Docker在平台的应用 ?4 ? Sina ?Jpool综合运维平台 ?3 ? Sina ?Dispatch的架构设计 ? 3 ? 1 ?
  • 12. 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 过期下架 ?
  • 13. 2.1 ?Sina ?JPool介绍 ? Dispatch Puppet ?Master agent ? 服务器集群 ? puppet ? agent ? puppet ? Web ? APP ? CLI ? API ? l??什么是Sina ?Jpool? ? u?? 通用化集群管控平台 ? u?? 核心模块 ? ??? 用户&权限 ? ??? 资源管理 ? ??? 设备管理 ? ??? APP管理 ? ??? 配置管理 ? ??? 部署管理 ? ??? 任务管理 ? ??? Nginx变更管理 ? ??? 降级/封杀管理 ? ??? 日志查询平台 ?
  • 14. 公司级CMDB ? 配置数据库 ? 资源管理 ? 关联系统API ? 设备管理 ? APP集群管理 ? 配置管理 ? 服务 部署 ? 任务 管理 ? Shell 管理 ? Nginx ? 管理 ? 降级 ? 封杀 ? 监控 管理 ? dispatch ? puppet ?master ? ?用 ? 户 ? & ? 权 ? 限 & ? 审 计 ? ? 流 程 & 灰 度 发 布 ? 工 单 管 理 ? 问 题 管 理 ? 运维变更窗口 ? 2.2 ?JPool技术框架 ?
  • 15. l??平台核心需求:DB化 ? u?? 设备信息-唯一性 ? ??? 配置管理 ? ??? 系统监控 ? ??? 。。。 ? u?? 应用信息-多对多 ? ??? 应用&发布部署 ? ??? 降级&封杀 ? ??? Nginx变更 ? ??? 。。。 ? u?? 关联关系 ? ? 3.1 ?JPool-资源管理 ? 设备池 ? 设备列表 ? 1:n ? 应用 ? 应用池 ? 1:n ? 设备 ? 应用设备 ?1:n ? 应用 ? 1:n ? ??设计复杂,实现简单,可用性强 ? ??案例:Sina ?Jpool,BaiDu ?Noah ? 基于严谨的带层级的关联关系 ? ??设计简单,实现复杂,灵活多变,可扩展性强 ? ??案例:小米,Jpool2 ? 基于tag形式的关系 ? ??复杂的关联结构模型 ? ??案例:Amazon ? 混合型 ? 业界实践 ?
  • 16. 3.2 ?JPool-资源管理关系图 ? 应用管理 ?设备管理 ? 产物 ? APP ? APP ? APP ? APP_Pool ? APP_Pool ? APP_Pool ? N ?个 设备 ? 设备 池子 ? Node ? Node ? Node ? 导入 ? 基于网络拓扑, 设备类型 ? JPool ? 应用服务拓扑 ? 配置管理 ? Node ? Node ? Node ? Node ? Shell操作 ? 操作 ? 脚本 文件 ? 任务(子任务) ? 任务模板 ? 任务 ? 历史任务 ? 并发& ? 回显 ? 比例并行 ? 执行状态 ? 任务操作 ? 实时回显 ? 任务脚本 ?
  • 17. 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 ? ? 业务相关 ?
  • 18. 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?? 源码目录规划: ? 线上实践 ?
  • 19. 4.3 ?Puppet ?DB化 ? 可视化操作界面 ?l??配置修改范围 ? u?? 变量 ? ??? 公共变量 ? ??? module变量 ? ??? 池子变量 ? u?? module ? u?? 节点与池 ? ? l??版本化管理 ? u?? 版本 ? ??? 变量 ? ??? module ? u?? 快照:池 ? ? ?
  • 20. 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(配置同步) ?
  • 21. 5.1 ?JPool-任务管理 ? l??任务设计 ? u?? 通用的脚本自动执行平台 ? u?? 安全,可靠,可视 ? u?? 任务变量:内置变量 ?+ ?自定义变量 ? ??? 任务脚本变量 ?= ?app变量+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?app_pool变量+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?任务变量+ ? u?? 任务类型&任务模板 ? l??线上某服务代码发布 ? ? Java服务代码发布 ? Tag ? 输 ? 入 ? 任务 创建 ? 变量 Init ? 判断应用 ? server ? 判断Tag ? 类型 ? 增量下载 Tag ? 切走流量 ? 停服务 ? 拷贝 ? 代码 ? 切回流 量 ? 代 码 上 线 逻 辑 ? 处 理 ? 输 出 ? 日志检测 服务检测 ? 启动服务 ? 实时任务状态 ? 完成 ?
  • 22. 5.2 ?Jpool-任务状态监控 ? ? tag ? 部署路径 ? 任务状态 ? 超时时间 ? 步长&比例 ? APP_Pool列表 ? 状态分布 ? 任务实时回显 ?
  • 23. 6.1 ?Jpool-Nginx变更管理 ? l?? 变更需求 ? u?? 参数调整 ? u?? member修改 ? u?? 规则修改 ? ? l?? 配置拆分 ?: ?include ? Nginx.conf ? upstream ? pool1 ? pool2 ? vhost ? server1 ? server2 ? Nginx变更窗口示例 ?
  • 24. 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?? 灰度发布 ? 配置修改 ? 应用变更 ?
  • 25. 7. ?Jpool-降级封杀管理 ? l?? 降级封杀:5000+开关 ? u?? 原则:覆盖全,开关避免手输 ? u?? 方案: ? ??? 业务代码框架层实现 ? ??? 动态修改运行时变量值 ? ??? 前端监听端口,支持check/on/off ? ??? 集成JPool ? 降级封杀窗口 ?
  • 26. 8. ?自动化变更 ? 服务降级/封禁 ? 流量切换 ? JPool ? 限流 ? Docker机动池 ? 数据修复 ? 日常 ? 其他 ? 变更策略 ? 变更手段 ? 扩容/缩容 ? 依赖系统 ? 分工&职责&流程 ? 工单系统&量化KPI ? checklist ?& ?Double ?check ? 区分四种环境 ? 灰度发布 ? 代码部署 ? Puppet/Nginx变更 ?
  • 27. 目录 ? ?CONTENT ? 1 ? 2 ? 微博平台业务背景 ? Docker在平台的应用 ? 1 ? Sina ?Jpool综合运维平台 ?3 ? Sina ?Dispatch的架构设计 ? 1 ? 4 ?
  • 28. 1. ?双实例Cgroup隔离方案 ? l??Cgroup优化 ? u??硬件配置 ? ??? 2CPU-12核 ? ??? Mem:12G ? u??隔离方案 ? ??? CPU分组 ? ??? 内存分组 ? ? ? l??UMA ?vs ?NUMA ? ?
  • 29. 2.Docker单机部署方案 ? statsd ? Logs1 Nginx ? 打镜像 ? scribe ?cadvisor ? ELK ? 日志 中心 ? HOST(10.75.0.2) ? Jenkins ? 8080 ? APP1 ? 8081 ? APP2 ? Logs2 流量调度 ? 容器监控 ? 行为日志 ? 业务日志 ? -v ? -v ? -link ? -host ? -host ? 容器 ? 存储卷 ? 系统 ? 工具 ?
  • 30. 3.Docker集群部署 ? l??部署原则 ? u?? 发布代码一样发布镜像 ? u?? 部署时间成本:分钟级 ? u?? 快速流量转移 ? l??部署明细:5分钟 ? u?? 设备录入及迁移 ? u?? 前端镜像发布 ? u?? Nginx变更 ? ? 新设备 ? 迁移设备 ? CM 系统 ? Jpool资源池 ? 简易服务发现 ? upstream ? 生成&提交 ? dispatch ? 新扩容 ? 服务同步 ? ip:port ? 镜像发布 ?
  • 31. 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 ? 基础设施 ?
  • 32. 5.平台Docker化进展 ? l??部署进度 ? u?? 前端Docker化比率:53% ? u?? 实例数:1000+ ? l??春晚大考 ? u?? 10次动态扩容 ? u?? 节点迁移数:200+ ? u?? 单次操作时间:<5分钟 ? 业务部署范围 ?