基于 cloudfoundry 的私有云平台

54
基基 CloudFoundry 基基基基基基 @ 王王王 王王王王王 weibo.com/wwy1640 2013-7-19

Upload: tanisha-gilliam

Post on 02-Jan-2016

173 views

Category:

Documents


1 download

DESCRIPTION

基于 CloudFoundry 的私有云平台. @ 王炜煜,百度运维部 weibo.com/wwy1640 2013-7-19. 内容. 背景与目标 实践与改造 ( Part 1 、 2 ) 流程与标准 改变运维 未来计划. 1. 背景与目标. 运维与 PaaS. Applications. OP(SRE) ,运维. Data. Runtime. PaaS ( and IaaS ). Middleware. O/S. Virtualization. Servers. Storage. Networking. 目标. 自动化 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 基于 CloudFoundry 的私有云平台

基于 CloudFoundry的私有云平台

@ 王炜煜,百度运维部

weibo.com/wwy1640

2013-7-19

Page 2: 基于 CloudFoundry 的私有云平台

内容

背景与目标

实践与改造( Part 1 、 2 )

流程与标准

改变运维

未来计划

Page 3: 基于 CloudFoundry 的私有云平台

1. 背景与目标

Page 4: 基于 CloudFoundry 的私有云平台

运维与 PaaS

StorageStorage

ServersServers

NetworkingNetworking

O/SO/S

MiddlewareMiddleware

VirtualizationVirtualization

DataData

ApplicationsApplications

RuntimeRuntime

OP(SRE) ,运维OP(SRE) ,运维

PaaS (and IaaS)PaaS (and IaaS)

Page 5: 基于 CloudFoundry 的私有云平台

目标自动化

业务的生命周期管理,如变更、监控、故障处理等资源利用率、弹性

标准化流程实例标准系统环境、 runtime、 framework

一体化集成第三方服务,如 DB、 Cache、 log、 FS等与其他系统平台联动

Page 6: 基于 CloudFoundry 的私有云平台

Why CloudFoundry ?

自动化自动化

标准化标准化 一体化一体化

机器管理(下游部门)机器管理(下游部门)

Page 7: 基于 CloudFoundry 的私有云平台

Why CF ?

自动化

一体化标准化

Page 8: 基于 CloudFoundry 的私有云平台

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

Page 9: 基于 CloudFoundry 的私有云平台

Java Apps

• 产品种类 >100

• APP >200

• 实例 >2000

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

• 日均总 pv > 10 亿

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

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

Page 10: 基于 CloudFoundry 的私有云平台

开始实施,准备工作

•基于 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: 基于 CloudFoundry 的私有云平台

集群容量评估

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

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

多 NATS-Server ,可扩展

延时( ms )

DEA 台数 ( 10 ~ 340 台)

单 DEA 实例数( 5 ~ 30 个)

临界线330 台 DEA

Page 12: 基于 CloudFoundry 的私有云平台

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

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

NATS-Server1NATS-Server1 NATS-Server2NATS-Server2

NATS-Client(caching message)

NATS-Client(caching message)

NATS-Server1/2, Random list

NATS-Server1/2, Random list

Page 13: 基于 CloudFoundry 的私有云平台

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

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

Baidu GateWayFront End

Router

A 记录

Baidu GateWayFront End

Router

app1app1 app1app1

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: 基于 CloudFoundry 的私有云平台

核心组件,分布

Router_1Router_1

NATS_1NATS_1

RouterRouter

NATSNATSCCHM

Stager

CCHM

Stager

DEADEA

PG_DBRedis

PG_DBRedis

Page 15: 基于 CloudFoundry 的私有云平台

整体结构( cf1.0 )

DEADEA

LoggingLoggingName ServiceName

ServiceMonitorin

gMonitorin

g

jvmjvm

StagerStager

FilePersisten

ce

FilePersisten

ce

HMHM

RouterRouter

CCCC

Baidu GateWay / Front EndBaidu GateWay / Front End

jvmjvm jvmjvm

API BridgeAPI Bridge

UAAUAA

jvmjvm

jvmjvm jvmjvm jvmjvm jvmjvm

Router ( Cluster 02 )

NATS

NATS

DB

Page 16: 基于 CloudFoundry 的私有云平台

新增功能

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

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

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

Page 17: 基于 CloudFoundry 的私有云平台

DEA serverDEA server

支持 RPC 、单实例多端口

Instance01:portInstance01:port

Instance02:portInstance02:port

API BridgeAPI Bridge

NS server

NS server

TXT 记录 ip:port ip:port

TXT 记录 ip:port ip:port

RPC 调用方

NS clientNS client

Domain ip:port ip:port

Domain ip:port ip:port

ip_local_port_range

10000 ~ 60000

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

61000 ~ 65000

Page 18: 基于 CloudFoundry 的私有云平台

新增功能

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

Page 19: 基于 CloudFoundry 的私有云平台

DEADEA

支持 JMX

Instance01: Jconsole 端口Instance01: Jconsole 端口

Instance02: 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 MetricsMonitoring 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: 基于 CloudFoundry 的私有云平台

新增功能

•加强健康检查七层检测

文件句柄数检测

Page 21: 基于 CloudFoundry 的私有云平台

DEA ServerDEA Server

DEA agent.rbDEA agent.rb

Health MangerHealth Manger

instanceinstance

http 可用性

instanceinstance

CPU

MEM

DISK

……

report

加强健康检查

句柄

Page 22: 基于 CloudFoundry 的私有云平台

DEA(v1.0) ,逻辑改进•端口管理

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

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

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

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

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

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

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

Page 23: 基于 CloudFoundry 的私有云平台

DEA(v1.0) ,逻辑改进

•实例资源信息管理问题描述

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

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

解决方案⁺ 调整相关命令的顺序

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

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

Page 24: 基于 CloudFoundry 的私有云平台

新增功能(与外围系统联动)• 文件持久化

使用 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: 基于 CloudFoundry 的私有云平台

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

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

•支持 RPC 、单实例多端口

•支持动态 JMX 、 Jconsole

• 加强健康检查

• 端口管理

• 实例资源信息管理

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

Page 26: 基于 CloudFoundry 的私有云平台

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

Page 27: 基于 CloudFoundry 的私有云平台

C/C++ Apps ,几大核心问题• Container 的运行环境与资源隔离

Kernel/GNU

资源隔离

快照, Core Dump

• 单实例多进程健康检查

进程运行顺序

实例内,进程间通信

多端口

多实例的同构性

Page 28: 基于 CloudFoundry 的私有云平台

C/C++ Apps ,几大核心问题•大实例

实例个数多( 10万)

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

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

启动时间长( 30 分钟)

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

漂移时,防止资源不足

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

输出文件,需要外部抓取

输入文件,需要外部推送

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

Page 29: 基于 CloudFoundry 的私有云平台

实例的 OS-Level 环境准备•Container 的运行环境

Kernel 与宿主机一致

订制 Container 的文件环境

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

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

Page 30: 基于 CloudFoundry 的私有云平台

Container与宿主机的关系

Warden

Networking , Bridge / NAT / Firewall / FlowControl 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: 基于 CloudFoundry 的私有云平台

包管理•Buildpack API

detect , 检查

complie ,环境准备⁺ 目录结构

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

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

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

release ,发布信息

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

.profile.d ,环境变量

Page 32: 基于 CloudFoundry 的私有云平台

健康检查,改造点•自定义监控脚本

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

DEA 定期检查 stat_file 文件

实例实例stat_filestat_file

monitor.shmonitor.sh

process-1process-1

process-2process-2

DEADEA

HMHM

Page 33: 基于 CloudFoundry 的私有云平台

APP 的改造• 针对 RPC ,支持 NS Client

动态配置文件,代替路由

端口管理,冻结时间

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

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

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

进程控制

• 文件持久化远程日志

使用云存储

Page 34: 基于 CloudFoundry 的私有云平台

整体结构( CF2.0 )

DEADEA

LoggingLoggingName ServiceName

ServiceMonitorin

gMonitorin

g

FilePersisten

ce

FilePersisten

ce

HMHM

gorouter ( RPC ,不适用)gorouter ( RPC ,不适用)

CCCC

Baidu GateWay / Front EndBaidu GateWay / Front End

API BridgeAPI Bridge

UAAUAA

( Cluster 02 )

NATS

NATS

ContainerContainer

process-1process-1

process-2process-2

WardenWarden

NS ClientNS Client

ContainerContainer

process-1process-1

process-2process-2

ContainerContainer

process-1process-1

process-2process-2DB

Page 35: 基于 CloudFoundry 的私有云平台

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

• 基于 CentOS 的相关改造

• Container 环境的订制

• Buildpack 的订制

•支持 RPC 、单实例多端口

• 加强健康检查

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

Page 36: 基于 CloudFoundry 的私有云平台

3. 流程与标准

Page 37: 基于 CloudFoundry 的私有云平台

工作流程,简述

Page 38: 基于 CloudFoundry 的私有云平台

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

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

Runtime 与容器版本

无状态、 RPC 、 URI路由

动静态文件分离

文件持久化

•容量信息采集PV 、 QPS

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

实例数量

Page 39: 基于 CloudFoundry 的私有云平台

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: 基于 CloudFoundry 的私有云平台

组织关系,层级•产品线( Org )

•模块( Space )

•分组( APP )

•版本( APP-* )

产品线 -2产品线 -2

产品线 -1 ( Org )产品线 -1 ( Org )

模块 -2模块 -2

模块 -1 ( Space )模块 -1 ( Space )

分组 -1 ( A )分组 -1 ( A )

分组 -2 ( B )分组 -2 ( B )

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

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

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

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

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

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

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

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

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

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

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

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

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

Page 41: 基于 CloudFoundry 的私有云平台

对 CC 进一步封装

产品线 (Org) OrgName

模块 (Space) OrgName_SpaceName

模块分组 OrgName_SpaceName_GroupTag

模块版本 OrgName_SpaceName_GroupTag_VersionTag

实例( id 唯一) OrgName_SpaceName_GroupTag_VersionTag_Index

Page 42: 基于 CloudFoundry 的私有云平台

GroupTag 、 VersionTag

• GroupTag

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

• VersionTag

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

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

• 实例完整名称,例子

• Org_Space_GroupA_1-1-1-1-438249600_1

• Org_Space_GroupB_1-1-1-1-438249600_1

Page 43: 基于 CloudFoundry 的私有云平台

审批与发布•发审批单

APP 信息(程序版本、容量信息、相关说明,等等)

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

操作者、操作时间

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

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

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

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

发布成功后,添加监控

发单发单

审批审批

发布 APP发布 APP

监控添加监控添加

Page 44: 基于 CloudFoundry 的私有云平台

预发布、发布、回滚

app_v1instance01app_v1

instance01app_v1.paas.baidu.comapp_v1.paas.baidu.com app_v1instance02app_v1

instance02

app_v2instance01app_v2

instance01app_v2

instance02app_v2

instance02

app_v3instance01app_v3

instance01app_v3

instance02app_v3

instance02app_v3.paas.baidu.comapp_v3.paas.baidu.com

app.baidu.comapp.baidu.com

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

前进,发布

后退,回滚

预发布,线下内网观察预发布,线下内网观察

Page 45: 基于 CloudFoundry 的私有云平台

基本的灰度发布

app_v1instance01app_v1

instance01app_v1.paas.baidu.comapp_v1.paas.baidu.com app_v1instance02app_v1

instance02

app_v2instance01app_v2

instance01app_v2

instance02app_v2

instance02

app_v3instance01app_v3

instance01app_v3

instance02app_v3

instance02

app.baidu.comapp.baidu.com

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

app.baidu.comapp.baidu.com

app_v2instance03app_v2

instance03

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

Page 46: 基于 CloudFoundry 的私有云平台

“布道之道”,平台的推广•军功章,有谁的一半?

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

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

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

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

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

Page 47: 基于 CloudFoundry 的私有云平台

一些方法•给用户( APP 开发人员),尊贵的帝王般的享受

对重点的 APP ,有针对性的重点服务

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

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

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

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

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

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

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

Page 48: 基于 CloudFoundry 的私有云平台

4. 改变运维

Page 49: 基于 CloudFoundry 的私有云平台

改变运维

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

StorageStorage

ServersServers

NetworkingNetworking

O/SO/S

MiddlewareMiddleware

VirtualizationVirtualization

DataData

ApplicationsApplications

RuntimeRuntime

OP(SRE) ,运维OP(SRE) ,运维

PaaS (and IaaS)PaaS (and IaaS)

Page 50: 基于 CloudFoundry 的私有云平台

如何改变,举例•故障自动恢复

在传统监控之上,增加了健康检查机制

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

传统的报警大量减少,人力减少⁺ 只有自动恢复失败时,才报警

监控

完整实例名 _1ip:port

… …

健康检查

API

… …

真实的实例 _1ip:port

漂移后的实例 _1

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

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

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

Page 51: 基于 CloudFoundry 的私有云平台

如何改变,举例

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

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

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

弹性扩展,极其简单

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

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

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

Page 52: 基于 CloudFoundry 的私有云平台

5. 未来计划

Page 53: 基于 CloudFoundry 的私有云平台

未来计划• 回馈社区

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

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

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

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

• 智能调度相关

• 信息安全

• 更深入的持续集成

• UI

Page 54: 基于 CloudFoundry 的私有云平台

We are hiring !

@ 王炜煜weibo.com/wwy1640

谢谢