Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker
新浪微博大规模基于Docker的混合云应用实践 -王关胜
-
Upload
weibo-corporation -
Category
Technology
-
view
333 -
download
0
Transcript of 新浪微博大规模基于Docker的混合云应用实践 -王关胜
Weibo DCP
基于Docker的混合云应用实践
@王关胜 微博研发中心-运维架构师
Docker Container Platform
Twitter/FB:@wgs0120
目录 CONTENT1
2
微博业务及混合云背景
4
3
混合云技术可行性
三节保障及阿里云部署5
Weibo DCP基础设施
Weibo DCP设计与实现
微博业务及混合云背景
Part 1
1.微博业务规模
业务量
日志:百T+RPC:万亿+接口:600亿
+
运维
Docker:80%扩缩容:5min变更:30次/w
系统
设备:万+集群:500+
业务线:100+
强大的运维平台
KPI
SLA:99.99%RT:50ms
故障分:<2/季
用户
用户:8亿DAU:1亿+MAU:2亿+
2.面临的挑战l 产品功能迭代快,系统变更及代码上线次数多
l 业务上复杂的依赖关系
l 突发的热点事件
#周一见# #马航370# #刘翔摔倒# #明星丑闻#
l 大型运营活动及三节保障:红包飞
l 每日不定时段的Push(推送)n 分类:应用内Push,应用外,活动Push,运营Push
n 用户互动时间:<1h
n 下发速度:快,中,慢
n 用户模型:全量,高中低频,地区,灰度模型
3 三节业务场景-春晚
• 特点:
• 瞬间峰值高
• 互动时间短
• 挑战:传统应对手段成本高
• 设备成本
• 时间成本
4.1 痛点1:扩缩容流程繁琐Text in here
Step1 设备申请- 设备申请,项目评审- 入CMDB,装机
Step2 机器初始化- 设备录入资源池,初始化
Step3 服务部署- 环境部署- 监控部署- 服务部署(代码 & confs)- 流量引入
Step4 自动报修&下架- 服务自动上下线- 机器置换或下架
业务运维可控
上架装机
Title in here服务部署
新机器
初始化
Title in here
分配给业务管理员
CMDB
Title in
here流量引入
Title in here
自动报修
Title in here
过期下架
4.2 痛点2:服务弹性能力不足• 闲置设备资源在现有的技术框架下未能被充分利用
冗余度
业务A集群
冗余度
业务B集群
冗余度
业务C集群
扩容成本 = 集群数 * 冗余度
业务A集群 业务B集群 业务C集群
冗余度
旧的应对手段 弹性扩容
扩容成本 = max(冗余度)
4.3 痛点3:设备申请周期长• 成本因素,采购周期长,机房机架位不足
5. 构建弹性的混合云
混合云技术可行性
Part 2
1 业界趋势
2 业界案例• 12306 两地三中心 混合云架构
3 微博部署架构
多机房部署
核心服务独立域名,上下行分开
七层独立部署
核心服务独立服务池
Tomcat线程保护 快速失败
服务化及独立部署
核心资源独立部署
外部依赖异步解耦
部署方案
4.1 混合云部署方案一
LVS
Nginx
Web
RPC
MC/Redis
Mysql/HBase
LVS
Nginx
Web
RPC
MC/Redis
Mysql/HBase
RPC
MC/Redis
土城 永丰 阿里云
SLB
Nginx
Web
4.2 混合云部署方案二
LVS
Nginx
Web
RPC
MC/Redis
Mysql/HBase
LVS
Nginx
Web
RPC
MC/Redis
Mysql/HBase
RPC
MC/Redis
土城 永丰 阿里云
Weibo DCP基础设施
Part 3
1.1 Docker 选型l 裸机 or VM
n 私有云采用裸机,公有云采用VM(ECS)l 网络选型
n 线上环境:Host模式n 灰度环境:Ovs Bridge模式 + L2 Switch (改造成本高)
l 参数设置n --bridge,--iptables,控制网桥和NAT,host模式下关闭n 开启2376端口
l 版本搭配
CentOS 6.6/Kernel 2.6.32
DeviceMapper-loop
Docker Daemon 1.3.2
CentOS 7.1/Kernel 3.10.0
DeviceMapper-direct-lvm
Docker Daemon 1.6.2
Mesos0.25 Swarm 1.0.0 Mesos 0.25Dispatch 1.1旧版容器调度方案 新版容器调度方案
1.2 单机部署方案
Graphite
Logs1
容器调度
ScribeCadvisor
ELK 数据分析
HOST(10.75.0.2)
镜像服务
8080
APP1
8081
APP2 Logs2
容器监控 行为日志 业务日志
-v
-link
-host
-host
容器
存储卷
系统
工具
2.1 Docker Registryl 构建私有Registry Hub
n docker-registry:V1 -> V2
n storage driver:Ceph
n docker-registry-frontend:Nginx
内网 阿里云
业务集群 业务集群
分布式存储
Registry RegistryRegistry 镜像缓存Mirror
2.2 镜像分层服务
l 镜像服务n 分层设计,逐层复用
n 基础环境/运行时/容器/业务
n 优化大小,dockerignore
n 禁止使用latest
3.1 Nginx Upsyncl 核心功能
n Fix Nginx Reload时的服务抖动n Fix Web容器的服务发现
l 开源:https://github.com/weibocom/nginx-upsync-module
Nginx
worker
worker
worker
docker-server backend-server
Consul
update-
modulecore-module
pull
pull
pull
register
3.2 Nginx Upsync-Onlinel 线上部署
n 162,159:Nginx + Upsyncn 116,160:Nginx
l 分析结果n 请求量:普通reload会丢10%请求(大并发)n 平均耗时:差异不大,新模块稍有优势
Weibo DCP设计与实现
Part 4
1 微博DCP设计关键点
微博混合云
微博定制业务驱动
弹性伸缩 自动化
2 Weibo DCP系统框架
私有机房 公有云
主机资源
Adapter
Docker Swarm Mesos Dispatch
基础设施
Java
Web RPC PROC Hadoop
PHP 数据分析
Feed
红包飞
用户
无线
通信 平台
广告 有信
主机
调度
编排
业务
专线
VPC
l 方案设计:来源于官方三驾马车(Machine + Swarm +Compose)
3 Weibo DCP功能模块图OS升级自动化
Docker镜像市场主
机
Consul工具管理
Docker版本管理
Docker调度调度
Swarm调度 Mesos调度 Dispatch调度
策略中心 容器类型 调度监控 容量监控
主机管理 ECS管理 SLB管理 初始化
共享池管理 Buffer管理 配额管理 多租户管理
框架
功能框架 权限中心 账户体系 工单系统
包管理(Yum) DNS管理 Puppet管理 成本管理
服务管理编排
配置管理 构建管理 发布管理
扩缩容管理 4/7层管理 退库管理 监控中心
Docker工具体系
3.1 DCP-主机层核心组件OS升级自动化
Docker镜像市场主
机
Consul工具管理
Docker版本管理
Docker调度调度
Swarm调度 Mesos调度 Dispatch调度
策略中心 容器类型 调度监控 容量监控
主机管理 ECS管理 SLB管理 初始化
共享池管理 Buffer管理 配额管理 多租户管理
框架
功能框架 权限中心 账户体系 工单系统
包管理(Yum) DNS管理 Puppet管理 成本管理
服务管理编排
配置管理 构建管理 发布管理
扩缩容管理 4/7层管理 退库管理 监控中心
Docker工具体系
3.2 DCP-调度层核心组件OS升级自动化
Docker镜像市场主
机
Consul工具管理
Docker版本管理
Docker调度调度
Swarm调度 Mesos调度 Dispatch调度
策略中心 容器类型 调度监控 容量监控
主机管理 ECS管理 SLB管理 初始化
共享池管理 Buffer管理 配额管理 多租户管理
框架
功能框架 权限中心 账户体系 工单系统
包管理(Yum) DNS管理 Puppet管理 成本管理
服务管理编排
配置管理 构建管理 发布管理
扩缩容管理 4/7层管理 退库管理 监控中心
Docker工具体系
3.3 DCP-业务层核心组件OS升级自动化
Docker镜像市场主
机
Consul工具管理
Docker版本管理
Docker调度调度
Swarm调度 Mesos调度 Dispatch调度
策略中心 容器类型 调度监控 容量监控
主机管理 ECS管理 SLB管理 初始化
共享池管理 Buffer管理 配额管理 多租户管理
框架
功能框架 权限中心 账户体系 工单系统
包管理(Yum) DNS管理 Puppet管理 成本管理
服务管理编排
配置管理 构建管理 发布管理
扩缩容管理 4/7层管理 退库管理 监控中心
Docker工具体系
4 DCP核心设计思想l 核心思想:借鉴于银行的运作机制l 弹性方案:内网共享池 + 公有云l 服务:IP + Port
私有云:共享池
公有云:阿里云
设备BufferPool
服务池SrvPool
集群Group
层级关系
l DCP:分为多个集群
l 集群:为独立平台,对应业务线
n 集群内:自由调度(跨Pool)
n 集群外:配额调度
l 服务池:同一业务线的同构服务
l 设备:共享池 + buffer池 + ECS
1
5 DCP管理员视角
超级管理员
集群管理员
服务池管理员
l 内网共享池管理
l 阿里云ECS管理
l 计费及账单管理
l 服务器录入/还原
l Buffer池管理
l 配额及申请管理
l 服务池扩缩容
l 代码构建及发布
l 业务监控
l 容量管理
l 超级管理员:负责阿里云ECS管
理以及内网集群间设备交换
l 集群管理员:负责产品线内设备
管理以及从共享池,阿里云筹借
机器
l 服务池管理:负责具体业务的扩
缩容以及代码变更等
管理员分工及权限
6 大规模集群操作自动化
1 2 3
设备申请 初始化 服务上线
l 设备申请n 内: 共享池n 外: 阿里云
l 初始化n 包标准化n 配置管理
l 服务上线n 容器动态调度n 服务弹性扩缩容
7.1 大规模集群第一步:设备l 私有云:共享池(离线集群,低负载集群,错峰)
l 公有云:阿里云(动态创建)
业务管理员视图
集群内跨池调度
缩容服务池A
集群外Buffer足
集群外Buffer不足
直接使用
向共享池发起申请
共享池进行审批
通过后划拨设备
通知申请者入buffer池
查看配额 申请配额
1
2 通过后增加配额
向共享池发起申请
。。。
1
2
配额足
配额不足
7.2 主机设备生命周期
未录入状态
共享池状态
Buffer池状态
运行中状态
下线状态
未初始化 已初始化 容器启动 容器上线
运行中状态 宕机状态下线状态
Buffer池状态
Buffer池状态
报修状态
正常主机状态变迁
异常
7.3 共享池使用方式案例
业务A
业务B
业务C
业务D
业务E
共享池
业务C
业务C 因峰值流量申请3台服务器
接入混合云体系
共享池
归还申请的服务器
业务C
共享池
共享策略
l 操作系统u 安装/升级自动化u 操作API化
l 基础软件及配置u 版本化,可配置u 安装操作模板化
l 方案选型u RPM + Puppet MasterLess
l 关联关系
8.1 大规模集群第二步:初始化
模板 软件模块1:n
主机 模板n:1
• 应用简单,迁移成本高,可维护性强• 案例:CoreOS,RancherOS,Atomic,DCOS
标准的容器操作系统
• 应用复杂,迁移成本低,可维护性一般• 案例:包管理(rpm)+配置管理(Puppet)
支持软件反安装的方案
• 应用简单,迁移成本低,可维护性极差• 案例:init.sh
自编写初始化脚本
业界实践
8.2 主机初始化-流程
混合云软件安装模块
本地文件1.修改
Gitlab
通道机/Dispatch
Host1
5.命令
下发
2.提交
4.下
发任
务
主机初始化流程
配置修改
应用变更
线上实例
Host27.Puppet apply/report 7.Puppet apply/report
模板库
Consul集群8.录入及打标签
9.1 大规模集群第三步:扩容l 扩容
n 输入:服务池名称、服务类型,容器类型、数量、镜像地址等n 输出:扩容报告
l 告警机制n 用户在使用完80%的资源时,短信和邮件提供n 用户在使用超过90%的资源时,需要审批机制
l 记账中心n 资源拥有者、使用方、型号、使用时间、日期、信用等
l 容器服务类型:按照dPxx(dockerPxx)命名
dP018核12G
dP0212核12G
dP0312核16G
dP0416核16G
9.2 弹性扩容-流程
管理员
混合云平台
公有云
发起请求
Buffer池
1.资源评估
调度中心5.发起容器调度
服务6.部署服务
Consul集群7.服务注册
配额模块
2.配额评估资源不足
共享池
初始化模块
监控中心
4/7层模块
ConfigSrv
一键扩容
……
流量接入模块
服务检查
9.3 弹性扩容-Swarm调度
9.4 弹性扩容-Swarm调度策略Ø Swarm创建容器过程,调度分为两个阶段l 1 根据条件过滤出符合要求的节点
n Constraints(约束过滤器)n Affinity(亲和性过滤器,)n Dependency(依赖过滤器)n Health(会根据节点状态进行过滤,会去除故障节点)n Ports(会根据端口的使用情况过滤)
l 2 在过滤出的节点中根据策略选择一个最优节点n Binpack:在同等条件下,选择资源使用最多的节点n Spread:在同等条件下,选择资源使用最少的节点n Random:随机选择一个
Ø 调度颗粒度n Memory:docker run –m 1g …n CPU:docker run –c 1 …
9.5 弹性扩容-服务发现LB
Nginx
Nginx Upsync
Consul Cluter
Health Check
ConsulSrvA:ip:port
Consul Agent
Host1SrvB:ip:port
Consul Agent
Host2服务check 服务check
register register
Discover
前端类:
1
2 2
1
3
4 4
三节保障及阿里云部署
Part 5
1 三节保障-监控
集群App log
Jvm loglogstash ELK
StatsD Mfiter
Graphite
资源依赖 Http依赖
服务依赖 RPC
依赖层
4/7层
Sina Watch
Sina Scripts Sina Atp
用户
Spark Hbase WatchMan
部署线
日志查询
报警平台
Dashboard
Trace
l 参考:http://www.slideshare.net/wgs0120/wot2015
2 三节保障-阿里云部署前提
网通1
微博 阿里云
网通
网通2
电信1 电信专线日常1G春节10G
VPN/VPC网络
专线日常1G春节10G
VPC网络
3 三节弹性调度解决方案l 部署模式
n 优先调度内网共享池资源
n 存储节点、主要计算节点仍部署在公司内网,以确保数据安全
n 红包飞,春晚等峰值流量应对计算节点部署在阿里云
l 对阿里云的要求
n 日常提供1000节点计算能力,可以5~10分众完成在阿里云的部署
n 春晚提供3000节点计算能力,微博信息流、红包飞均可支持
4 阿里云弹性方案
W W W W W W W W
C C
D D D
前端机
缓存
存储
微博内网
W
C C
前端机
缓存
阿里云
春晚峰值应对申请一倍服务器
W W W W W W W W
C C
D D D
前端机
缓存
存储
W
C
前端机
缓存
W W W W W W W W W
C
5.微博混合云DCP迁入进展l 混合云进展
u 项目上线:15年10月u 容器数:3000+
l 双十一考验u 单日10次扩缩容u 单次操作时间:<5分钟
微博平台58%
红包飞11%
手机微博23%
其他8%
主要业务方微博平台 红包飞 手机微博 其他