此此此此此此。。。。。。。。。。。 此此此此此此此。。。。。。。。。。。。。。 Cgourp-lxc 在 17173 在在在 此此此此 此 此 统 2013.8.15
此处为大标题。。。。。。。。。。。此处为说明文字。。。。。。。。。。。。。。
Cgourp-lxc 在 17173的应用
技术中心 系统部 2013.8.15
提纲• 背景:应用池现状• 需求:我们要的是什么• Cgroup/LXC 介绍• 选择:为什么是 LXC
• 场景: LXC 应用在 17173 符合的场景• LXC 学习的情况• 存在的问题和以后的发展
背景:应用池的现状在物理服务器运行的主要是 php/java 应用• 纯业务逻辑、本地无重要数据、无状态• 一台物理服务器上至少部署了 6 个以上的应用• 服务器性能、状态参差不齐• 服务器的数量会越来越多• 业务的重要等级严重差异• 业务突发情况无法预估• 磁盘 / 网络 IO 小,主要负载集中在 CPU 和内存上
背景:应用池调度、运算主体结构IAAS 的雏形,具备部分调度功能
需求:我们要的是什么从原始的意义上,我们要的很多,最现实的问题是:• 一台服务器能够部署更多的应用• 更好协调和控制应用之间的资源竞争• 动态的调整由于业务峰值差异造成的应用资源需求• 尽量不去增加运维、监控、开发的工作量和成本
Cgroup/LXC 介绍LXC 是什么?• Containers 可以作为 OS 层面的虚拟化的一个替代方案,你可以在一个宿主机上运行多个隔离的系统。在单一的操作系
统下运行 container 更加高效,因此, container 将会替代 VM ,成为未来云计算基础架构中的主导技术。• container namespace cgroup virtualisation , LXC 是针对 Linux Containers 的用户空间控制包。这是一个轻量级的系统虚拟
化机制,有时被描述为“ chroot on steroids” (类固醇上的 chroot ,意思是功能类似 chroot ,但比 chroot 提供了更多的隔离功能)
• LXC 基于 chroot 实现了完整了系统虚拟化,并在 Linux 现有的进程管理架构上添加了资源管理和隔离的机制。• Container 是安全容器与资源容器的组合安全容器: chroot, UID/PID/IPC/Network Namespace
资源容器: Control Cgroup (Cgroup)
Cgroup/LXC 介绍Cgroup 有么用?(抄 taobao 的,他们了解的更深入)• 基于进程组的资源管理基础框架 + 子控制器使用 Cgroup 的分组机制,对一组进程就某种系统资源实现资源管理。• cpuset 子控制器为进程组分配一组允许使用的 CPU 和内存结点• memcg 子控制器限制进程组允许使用的物理内存只限制匿名页和 Page Cache ,不包括内核自己使用的内存内存紧张时使用与全局回收同样的算法在组内回收• Blkio 子控制器限制进程组的磁盘 IO带宽实际控制的是磁盘为各进程组服务的时间片数量,和进程调度器 cfs 针对 cpu 的分时服务原理相同
方案比较动态迁移 CPU增减 内存增减
XEN(半虚拟化) 支持Guest OS CPU通过
热插拔机制支持balloondriver通过
支持
KVM( )全虚拟化 支持Guest OS CPU通过
热插拔机制支持balloondriver通过
支持
LXC 不支持cpuset CFS通过 和
组调度扩展支持Cgroup通过 支持
速度 消耗 异构模拟 OS可运行不同 安全隔离性XEN(半虚拟化) 比本地环境慢 最高 支持 支持 强KVM( )全虚拟化 比本地环境慢 高 支持 支持 强LXC 同本地环境 对比楼上的几乎为零 不支持 不支持 差
LXC优缺点• 优点虚拟化开销小,一台物理机跑很多“小”虚拟机,资源隔离,竞争小通过 Cgroup 增减 CPU/ 内存非常方便,调整速度很快和本地环境相同的速度
• 缺点不能热迁移 -> 我们需要热迁移吗?不能模拟不同体系结构、装不同 os -> 不需要?为什么你不需要?安全隔离差 -> 已经有了应用程序的隔离了,其他都系统部在操作,为什么要隔离?ForkBomb 、优先级反转、 Cgroup 实现缺陷 -> rhel6.4已经好些了,测试环境不怕- Memcg 不能控制 buffer 和内核内存Proc 下的多数文件不认识 Container -> top/sar/free/iostat 都用不了;没办法,要么改内核,要么等 RHEL7
LXC 使用场景• 总结这么多,它真的符合应用池使用;• RHEL5.x , RHEL6.x 的内核版本较低,对 LXC支持不是最好• debian 、 ubuntu 、 opensuse 对 LXC支持已经很完善了,由于历史原因我们不
方便迁移• 第一步:我们在功能测试环境测试• 第二步:我们在压力环境上测试• 第三步:拿出生产环境 30% 的实例,进行 LXC测试• 总结、积累运维经验• 第四步:等待 RHEL7 在生产环境上使用
LXC 学习的情况• 学会安装、初步测试成功• 一个人的力量有限,求帮助、求同伙
Thanks!