Top Banner
基于CloudFoundry的私有云平台 @王炜煜,百度运维部 weibo.com/wwy1640 2013-7-19
54

Baidu Cloud Foundry

Nov 29, 2014

Download

Documents

James Watters

Found this public presentation of the massive work Baidu is doing with Cloud Foundry.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Baidu Cloud Foundry

基于CloudFoundry的私有云平台

@王炜煜,百度运维部 weibo.com/wwy1640 2013-7-19

Page 2: Baidu Cloud Foundry

内容 �

背景与目标

实践与改造(Part 1、2)

流程与标准

改变运维

未来计划

Page 3: Baidu Cloud Foundry

1. 背景与目标

Page 4: Baidu Cloud Foundry

运维与PaaS �

Storage

Servers

Networking

O/S

Middleware

Virtualization

Data

Applications

Runtime

OP(SRE),运维

PaaS (and IaaS)

Page 5: Baidu Cloud Foundry

目标 �

自动化 业务的生命周期管理,如变更、监控、故障处理等

资源利用率、弹性

标准化 流程

实例标准

系统环境、runtime、framework

一体化 集成第三方服务,如DB、Cache、log、FS等

与其他系统平台联动

Page 6: Baidu Cloud Foundry

Why CloudFoundry ?

自动化

标准化 一体化

机器管理(下游部門)

自动化

一体化 标准化

Page 7: Baidu Cloud Foundry

Why CF ? �

自动化

一体化

标准化

Page 8: Baidu Cloud Foundry

2. 实践与改造(Part1) Java,base on cf 1.0

Page 9: Baidu Cloud Foundry

Java Apps �

•  产品种类 >100

•  APP >200

•  实例>2000

•  平均单实例10G(内存)

•  日均总pv > 10亿

•  APP的开发及测试人员 > 700人

•  Tomcat5/6/7、jdk1.5/1.6、Standalone

Page 10: Baidu Cloud Foundry

开始实施,准备工作 �

• 基于CentOS的相关改造 ü 独立部署各个CF组件

⁺  拆解BOSH、chef,基于物理机实施

ü OS环境初始化

⁺  apt-get 改为 yum

ü Ubuntu-cmd to CentOS

⁺  DEA(v1.0),agent.rb、secure.rb

yum install -y make gcc gcc-c++ kernel-devel.x86_64 openssl-devel.x86_64 libxml2.x86_64 libxml2-devel.x86_64 libxslt.x86_64 libxslt-devel.x86_64 git.x86_64 sqlite.x86_64 ruby-sqlite3.x86_64 sqlite-devel.x86_64 unzip.x86_64 zip.x86_64 ruby-devel.x86_64 ruby-mysql.x86_64 mysql-devel.x86_64 curl-devel.x86_64 postgresql-libs.x86_64 postgresql-devel.x86_64 zlib-devel.x86_64 readline-devel.x86_64 ImageMagick.x86_64 ImageMagick-devel.x86_64 php-magickwand.x86_64

Page 11: Baidu Cloud Foundry

集群容量评估 �

•  实例数量,NATS容量评估 ü  单台DEA承载的实例数(<100),对NATS-Server压力影响不大

ü  单NATS-Server,保守估计可承受330台DEA,单台实例数5~30个

ü  多NATS-Server,可扩展

延时 (ms)

DEA台数 (10 ~ 340台)

单DEA实例数 (5 ~ 30个)

临界线 330台DEA

Page 12: Baidu Cloud Foundry

集群内,组件冗余、LB设计 �

•  NATS ü 使用cluster版,多NATS,心跳同步 ü Client 端缓存信息,如果网络中断,则不断reconnect ü 多NATS负载均衡(Client > 0.5.beta.6)

NATS-Server1 NATS-Server2

NATS-Client (caching message)

NATS-Server1/2, Random list

Page 13: Baidu Cloud Foundry

多集群冗余设计 �•  多个独立的集群,逻辑互不影响

ü  第一层切换,修改DNS A记录,对多个域名(CNAME到此A记录),统一切到不同的集群 ü  第二层切换,修改“接入层”(其应用层的功能,可简单理解为nginx的反向代理) ü  保证好APP(无状态)的容量,或快速扩容的预案,以防止流量切过来以后,出现过载

Baidu GateWay Front End

Router

A记录

Baidu GateWay Front End

Router

app1 app1

CNAME(正式域名) CNAME(正式域名) www.baidu.com CNAME www.a.shifen.com. www.baidu.cn CNAME www.a.shifen.com. www.a.shifen.com. A 119.75.218.77 www.a.shifen.com. A 119.75.217.56

Page 14: Baidu Cloud Foundry

核心组件,分布 �

Router_1

NATS_1

Router

NATS CC HM

Stager

DEA

PG_DB Redis

Page 15: Baidu Cloud Foundry

整体结构(cf1.0) �

DEA

Logging Name Service Monitoring

jvm

Stager

File Persistence

HM

Router

CC

Baidu GateWay / Front End

jvm jvm

API Bridge

UAA

jvm

jvm jvm jvm jvm

Router(Cluster 02)

N A T S

DB

Page 16: Baidu Cloud Foundry

新增功能 �

• 支持RPC、单实例多端口 ü  单实例开启多个端口,并提供API实时查询IP、端口号

ü  与“名称服务”联动,同步动态ip端口与名称的对应关系

ü  RPC调用方,根据名称直连实例

Page 17: Baidu Cloud Foundry

DEA server

支持RPC、单实例多端口 �

Instance01:port

Instance02:port

API Bridge

NS server

TXT记录 ip:port ip:port

RPC调用方

NS client

Domain ip:port ip:port

ip_local_port_range

10000 ~ 60000

Port池(分配后,有冻结期)

61000 ~ 65000

Page 18: Baidu Cloud Foundry

新增功能 �

• 支持JMX ü  API实时查询ip与Jconsole端口号,实现JMX数据实时采集

Page 19: Baidu Cloud Foundry

DEA

支持 JMX �

Instance01: Jconsole 端口

Instance02: Jconsole 端口

{ "instances": [ { "index": 0, "state": "RUNNING", "since": 438249600, "jconsole_ip": "10.1.1.1", "jconsole_port": 61111 }, { "index": 1, "state": "RUNNING", "since": 438249600, "jconsole_ip": "10.1.1.1", "jconsole_port": 62222 }

Monitoring Metrics

CpuUseRateDaemonThreadCount MemPool_OldGen_UseRate

NonHeapMemoryUsage_used TotalCompilationTime

TotalPeakThreadCount TotalStartedThreadCount

UnloadedClassCount GC_Major_Frequency GC_Major_Time

… …

Stager: java \ -Dcom.sun.management.jmxremote.port={VCAP_JCONSOLE_PORT} -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false

Page 20: Baidu Cloud Foundry

新增功能 �

• 加强健康检查 ü  七层检测

ü  文件句柄数检测

Page 21: Baidu Cloud Foundry

DEA Server DEA agent.rb

Health Manger

instance

http可用性

instance

CPU MEM DISK ……

report

加强健康检查 �

句柄

Page 22: Baidu Cloud Foundry

DEA(v1.0),逻辑改进 �

• 端口管理

ü 问题描述 ⁺  单DEA多实例,并行的端口分配与启动,没有临界区,有端口竞争的问题

ü 解决方案 ⁺  借鉴了DEA(v2.0)的逻辑(注:即 DEA_NG,与CF1.0不兼容)

⁺  设定 ip_local_port_range 为 10000~61000,作为动态端口的范围

⁺  将61001~65000,作为DEA的调度分配端口

⁺  对分配的端口,增加“[释放时间、端口号]”的数据结构

⁺  通过延时释放端口,解决了端口竞争的问题

ü 备注 ⁺  CF2.0中,已解决此问题,方法同上

Page 23: Baidu Cloud Foundry

DEA(v1.0),逻辑改进 �

• 实例资源信息管理

ü 问题描述

⁺  du命令算实例磁盘空间,时间较⻓长,随后执行其他计算命令,信息已不一致

⁺  CPU计算的方法,没有考虑主机核数

ü 解决方案

⁺  调整相关命令的顺序

⁺  CPU利用率计算时,除以核数

ü 备注

⁺  CF2.0中,已解决此问题

Page 24: Baidu Cloud Foundry

新增功能(与外围系统联动) �

•  文件持久化 ü  使用MFS(Moose File System)

ü  DEA 部署MFS-Client,并 mount /mfs/path,供实例使用

ü  MFS服务端提供HTTP接口,获取数据

•  基于URI的路由,区分APP ü  foo.baidu.com/app1 à app1.foo.baidu.com

ü  foo.baidu.com/app2 à app2.foo.baidu.com

•  监控联动 ü  APP的生命周期,与外部监控系统的API交互,实现监控项的自动增删改

•  开发者工具包 ü  自动化发布(封装vmc)

ü  文件查看

Page 25: Baidu Cloud Foundry

主要改造点汇总(cf v1.0) �•  基于CentOS的相关改造

•  使用NATS-Cluster、NATS-Client重试与缓存

•  支持RPC、单实例多端口

•  支持动态JMX、Jconsole

•  加强健康检查

•  端口管理

•  实例资源信息管理

•  外围组件:文件持久化、监控联动、URI路由、开发者工具包

Page 26: Baidu Cloud Foundry

2. 实践与改造(Part2) C/C++,base on cf 2.0

Page 27: Baidu Cloud Foundry

C/C++ Apps,几大核心问题 �

•  Container 的运行环境与资源隔离 ü  Kernel/GNU

ü  资源隔离

ü  快照,Core Dump

•  单实例多进程 ü  健康检查

ü  进程运行顺序

ü  实例内,进程间通信

ü  多端口

ü  多实例的同构性

Page 28: Baidu Cloud Foundry

C/C++ Apps,几大核心问题 �

•  大实例 ü  实例个数多(10万)

ü  数据量大(单实例,2TB)

ü  内存占用高(单实例,100G)

ü  启动时间⻓长(30分钟)

ü  流量大(单实例,日总PV2亿)

ü  漂移时,防止资源不足

•  APP通信 ü  网络层通信,权限、流量控制

ü  输出文件,需要外部抓取

ü  输入文件,需要外部推送

ü  RPC,非HTTP协议,不包含PATH信息,无法路由

Page 29: Baidu Cloud Foundry

实例的 OS-Level 环境准备 �

•  Container的运行环境 ü Kernel 与宿主机一致

ü 订制Container的文件环境

warden/warden/root/linux/rootfs/setup.sh

if grep -q -i centos /etc/issue then exec $(dirname $0)/centos.sh $@ fi

Page 30: Baidu Cloud Foundry

Container与宿主机的关系 �

Warden

Networking,Bridge / NAT / Firewall / FlowControl

DEA

init─┬─xxx ├─xxx─xxx ├─xxx

mount r usr/ lib/ etc/ mount rw xxx/

network interface(sub net)

Cgroup – CPU / MEM

Name space init─┬─xxx ├─xxx─xxx ├─xxx

mount r usr/ lib/ etc/ mount rw xxx/

network interface(sub net)

Cgroup – CPU / MEM

Name space

Page 31: Baidu Cloud Foundry

包管理 �

•  Buildpack API ü  detect , 检查

ü  complie,环境准备

⁺  目录结构

⁺  程序文件,及相关配套程序

⁺  启动脚本,保证进程的启动顺序,等等

⁺  监控脚本,可以周期性执行,检测整个实例的健康程度

ü  release,发布信息

ü  Procfile,参数传递(如端口号)

ü  .profile.d,环境变量

Page 32: Baidu Cloud Foundry

健康检查,改造点 �

•  自定义监控脚本 ü  自定义监控脚本,随实例一起发布,周期性改写stat_file文件内容

ü  DEA定期检查stat_file文件

实例

stat_file

monitor.sh

process-1

process-2

DEA

HM

Page 33: Baidu Cloud Foundry

APP的改造 �

•  针对RPC,支持NS Client ü  动态配置文件,代替路由

ü  端口管理,冻结时间

•  输入输出文件 ü  输入文件,主动抓取

ü  输出文件,推到中转处(如云存储),或基于NS服务

•  多进程的管理,启动脚本 ü  多进程,启动顺序控制

ü  进程控制

•  文件持久化 ü  远程日志

ü  使用云存储

Page 34: Baidu Cloud Foundry

整体结构(CF2.0) �

DEA

Logging Name Service Monitoring File

Persistence

HM

gorouter(RPC,不适用)

CC

Baidu GateWay / Front End

API Bridge

UAA

(Cluster 02)

N A T S

Container

process-1

process-2

Warden

NS Client

Container

process-1

process-2

Container

process-1

process-2 DB

Page 35: Baidu Cloud Foundry

主要改造点汇总(cf v2.0) �

•  基于CentOS的相关改造

•  Container环境的订制

•  Buildpack的订制

•  支持RPC、单实例多端口

•  加强健康检查

•  外围组件:文件持久化、监控联动、URI路由、开发者工具包

Page 36: Baidu Cloud Foundry

3. 流程与标准

Page 37: Baidu Cloud Foundry

工作流程,简述 �

评审 • 标准 • 容量 •  SLA

接入 • 组织关系 • 名称信息 • 运维信息

流程审批 • 权限申请 • 名称申请 • 发布操作

发布更新 • 预发布 • 灰度 • 回滚

故障处理 • 可用性 • 安全 • 问题管理

Page 38: Baidu Cloud Foundry

标准与容量,举例 �• 标准信息采集

ü  App相关名称、相关接口人(R&D、QA、运维、相关经理,等)

ü  Runtime与容器版本

ü  无状态、RPC、URI路由

ü  动静态文件分离

ü  文件持久化

• 容量信息采集 ü  PV、QPS

ü  单实例 CPU、内存、磁盘、带宽、重启时间

ü  实例数量

Page 39: Baidu Cloud Foundry

SLA,举例 �•  服务对象

ü  Java 应用(以下简称“APP”) ü  符合标准的APP

•  服务时间 ü  24×365全年无休

•  沟通方式 ü  Mail、Tel、接口人信息

•  稳定性相关指标 ü  核心组件,可用性>99.99%(每月),MTTR<20分钟,MTBF>5天 ü  控制服务,可用性>99.95%(全年) ü  APP自身SLA,不因平台本身,造成负面影响

ü  注:APP自身问题,不在此SLA范围内,如: 程序bug、容量预估错误、外部系统故障(如DB、Cache)等

Page 40: Baidu Cloud Foundry

组织关系,层级 �

• 产品线(Org)

• 模块(Space)

• 分组(APP)

• 版本(APP-*)

产品线-2

产品线-1 (Org)

模块-2

模块-1 (Space)

分组-1(A)

分组-2(B)

实例,版本-1 (APP-1-1)

实例,版本-2 (APP-1-2)

实例,版本-1 (APP-2-1)

实例,版本-2 (APP-2-2)

实例,版本-1 (A-1)

实例,版本-2 (A-2)

实例,版本-1 (B-1)

实例,版本-2 (B-2)

虚线内, 相当于一个APP, 且有多个实例

Page 41: Baidu Cloud Foundry

对CC进一步封装 �

产品线(Org) OrgName

模块(Space) OrgName_SpaceName

模块分组 OrgName_SpaceName_GroupTag

模块版本 OrgName_SpaceName_GroupTag_VersionTag

实例(id唯一) OrgName_SpaceName_GroupTag_VersionTag_Index

Page 42: Baidu Cloud Foundry

GroupTag、VersionTag �

• GroupTag •  可以区分:配置文件、机房、机架等维度的不同

•  VersionTag •  可以区分:程序、数据、配置文件等

•  包含:四位版本号、时间戳

• 实例完整名称,例子

•  Org_Space_GroupA_1-1-1-1-438249600_1

•  Org_Space_GroupB_1-1-1-1-438249600_1

Page 43: Baidu Cloud Foundry

审批与发布 �

• 发审批单 ü  APP信息(程序版本、容量信息、相关说明,等等)

ü  审批人(相关经理、需知晓的人)

ü  操作者、操作时间

ü  监控信息(监控策略、接口人等)

•  开始发布操作,并添加监控 ü  发布前,对应审批流必须通过

ü  操作人、程序版本、MD5、时间等信息,必须与审批流一致

ü  都一致,且流程通过,则可以开始发布

ü  发布成功后,添加监控

发单

审批

发布APP

监控添加

Page 44: Baidu Cloud Foundry

预发布、发布、回滚 �

app_v1 instance01 app_v1.paas.baidu.com

app_v1 instance02

app_v2 instance01

app_v2 instance02

app_v3 instance01

app_v3 instance02 app_v3.paas.baidu.com

app.baidu.com

泛域名、 map/unmap、 app的多版本并存

前进,发布

后退,回滚

预发布,线下内网观察

Page 45: Baidu Cloud Foundry

基本的灰度发布 �

app_v1 instance01 app_v1.paas.baidu.com

app_v1 instance02

app_v2 instance01

app_v2 instance02

app_v3 instance01

app_v3 instance02

app.baidu.com

1、将一个正式域名,同时指向多个app 2、调整多个app的实例数比例,即调整了流量的比例

app.baidu.com

app_v2 instance03

通过调整app实例的数量,灰度流量的分配比例

Page 46: Baidu Cloud Foundry

“布道之道”,平台的推广 �

• 军功章,有谁的一半? ü  APP的支持

⁺  新服务,需遵守PaaS的相关标准、思想

⁺  老服务,需R&D改造,QA需回归测试

ü  外围的支持 ⁺  DB、Cache、存储、接入、安全、监控,等等

•  明确收益,建立共赢的生态圈 ü  交付更快、资源更省、事情变得简单

ü  一站式的一体化服务,携手推广

Page 47: Baidu Cloud Foundry

一些方法 �

•  给用户(APP开发人员),尊贵的帝王般的享受 ü  对重点的APP,有针对性的重点服务

ü  对重要的管理者,有一套更完整、及时的沟通方式,如报表等

ü  原则是“资本主义”,而不是社会主义

• 事件“营销” ü  如“struts2 0day”

⁺  积极配合R&D、QA做问题排查、修复与实施

⁺  积极通报进展,做好事件管理

⁺  后期,针对此事,积极推进、参与讨论与决策,如与安全、架构组合作

⁺  原则是“共赢”,而不是推卸责任

Page 48: Baidu Cloud Foundry

4. 改变运维

Page 49: Baidu Cloud Foundry

改变运维 �

“NoOps” PaaS(and IaaS) 的完整功能 >= 传统运维工作

Storage

Servers

Networking

O/S

Middleware

Virtualization

Data

Applications

Runtime

OP(SRE),运维

PaaS (and IaaS)

Page 50: Baidu Cloud Foundry

如何改变,举例 �

• 故障自动恢复 ü  在传统监控之上,增加了健康检查机制

ü  实例的自动重启与“漂移”

ü  传统的报警大量减少,人力减少

⁺  只有自动恢复失败时,才报警

监控

完整实例名_1 ip:port

… …

健康检查

API … …

真实的实例_1 ip:port

漂移后的实例_1

•  “漂移”是正常现象,无需报警

•  “漂移”失败,才需报警

•  监控细化到实例,每次根据名字,探测返回的ip:port

Page 51: Baidu Cloud Foundry

如何改变,举例 �

• 更加敏捷 ü  让开发者“忘记服务器”,转而面向资源

ü  有完整的配置管理,与自动化部署功能

ü  发布、预发布、回滚,极其简单,且不需要额外复杂的部署工具

ü  弹性扩展,极其简单

ü  使用Buildpack,实现“云端编译”,并直接运行

• 一体化一站式的体验 ü  从发单、发布,到增删改监控,工作流程全自动

ü  整合第三方服务,统一管理入口

Page 52: Baidu Cloud Foundry

5. 未来计划

Page 53: Baidu Cloud Foundry

未来计划 �

• 回馈社区 •  针对私有云的功能,尽量封装原生组件(基于CF2.0),将新的组件开源

•  如影响到原生组件的改动,尽量争取merge进主干

•  编写丰富的文档,以及心得,并积极参与交流

• 开发方向 •  针对大型应用(大实例)的相关功能

•  智能调度相关

•  信息安全

•  更深入的持续集成

•  UI

Page 54: Baidu Cloud Foundry

We are hiring !

@王炜煜 weibo.com/wwy1640

谢谢