optimize openstack when using lxc and ceph › files › pengdonglin137 › optimize_ope… ·...
TRANSCRIPT
Optimize OpenStack When using LXC and Ceph
Li WLi WangKylin Cloudy
KylinCloud简介y基于OpenStack研发
为用户提供IaaS、PaaS层次的云服务解决方案,可构建公有云和私有云服务
提供虚拟化管理 项目管理 系统资源管理 资源状态提供虚拟化管理、项目管理、系统资源管理、资源状态监控、告警管理、计费管理、用户管理等功能
KylinCloudBased on OpenStack
2
应用平台天河二号超算平台
家国家十二五863重大科技项目,广州科技一号工程
峰值计算性能10亿亿次以上,连续四次位居国际Top500榜首
建有广州超算中心,目前系统20000个节点
双路12核E5-2692,64GB内存
定制的内部高速互联(224Gbps)
总存储容量12.4PB
3
应用部署部署节点
当前部署约2000个节点当前部署约2000个节点
基于TH-NI高速网(224Gbps)
基于Ceph构建全局分布式存储
支撑应用
电子政务类应用
广东省省级教育数据中心广东省省级教育数据中心
广州市萝岗区电子政务
渲染类应用
华强文化科技集团
凡拓数码科技
创意云
4
创意云
KylinCloud社区贡献y积极参与OpenStack社区并贡献社区,累计贡献代码超过30000+行超过30000+行最新Liberty版核心组件代码commits数排名国内第四
一名Rally的core reviewer
组件贡献比例
5
组件贡献比例
数据来源:http://stackalytics.com/
Ceph社区贡献
积极参与Ceph社区并贡献社区,向Ceph社区提交100 it100+commits
RBD
Rbd diff / C R d f RBD Cl / RbdRbd diff merge/ Copy on Read for RBD Clones/ Rbd offline recovery tool
Cache Tiering
Writeback throttling/ Temperature based cache management
CephfsCephfs
Punch hole support/ quota support/ Inline data support
在Ceph v0.77版本中代码贡献排名第三在 p 版本中代码贡献排名第
在Ceph v0.91版本中代码贡献排名第二
6
OpenStack基于KVM 启虚拟机的传统流程
Request①
Nova-API
Request①
Glance Nova- Scheduler②
Nova-compute获取image
调用libvirt启动VM
⑤
下载 image
生成启动VM的xml文件③ ④
⑤
Local disk下载 image到本地
VM
7
OpenStack基于KVM从ceph rbd启虚拟机
Request①
Nova-API
Request①
③
Glance Cinderimage?
Location Nova Scheduler
②
③
image Volume
Location Nova-Scheduler④
⑤
Nova-computepool pool
调用libvirt
⑤
Ceph VM启动VM⑥
8
OpenStack基于LXC启虚拟机的流程
Request①
Gl
Nova-API
Glance
获取image
Nova- Scheduler②
Nova-compute调用libvirt生成启动VM的xml文件④
⑥
下载 image
libvirt启动VM
生成启动VM的xml文件③
④
⑤挂载镜像到rootfs
Local disk到本地
VM
9
KVMKVM
不需要下载镜像到本地不需要下载镜像到本地
分布式存储,支持更好的性能
便于虚拟机快照和迁移便于虚拟机快照和迁移
10
LXCLXC
当前KVM+ bd的启动方式对当前KVM+ rbd的启动方式对
于LXC+ rbd不适用。于LXC+ rbd不适用。
11
方案选择
OpenStack+KVM+qemu-rbdOpenStack+LXC+qemu-rbd
LXC+CephfsCephfs当前仍在积极的开发中Cephfs当前仍在积极的开发中
LXC+kernel rbd+localfs成通过rbd map块设备,再mkfs格式化成
文件系统
12
待解决的问题rbd是在内核级实现的
rbd内核模块的开发比用户空间的librbd要滞后要滞后
当前rbd内核模块的灵活性和可移植性均不是很好
在ARM 64 平台上启容器时 使用 bd在ARM 64 平台上启容器时,使用rbd内核模块容易导致系统内核挂起和磁盘利用率达100%的问题
13
基于NBD框架,结合librbd,实现bd irbd in userspace
Openstack+rbd-use+localfsOpenstack+rbd-use+localfs
14
rbd-use:rbd in userspacep思路
nbd框架提供一个块设备 并将操作请求转发到用nbd框架提供一个块设备,并将操作请求转发到用户空间
由rados的librbd接口处理最终的操作请求由rados的librbd接口处理最终的操作请求
在用户空间实现一个rbd-use服务模块,负责转换nbd发送到用户空间的操作请求到librbd接口来处理
Requestread/write/trim/flush rbd-use librbdread/write/trim/flush
kernel
userspacerbd use
nbd0
NBD
15
NBDNBD
rbd-use:rbd in userspacepreader_entry
实现方法:② 建立两个队列
请求队列:负责处理NBD发送的请求
read
write
read
write
① ②
的请求响应队列:负责响应librbd处理完成的结果由两个线程分别维护上述列队
flush flush④③
由两个线程分别维护上述列队trim discard
librbdNBD
writer_entry
16
rbd-use:rbd in userspacep用法: 效果
rbd-nbdmap/unmap/list-
rbd-use与rbd-kernel的性能接近map/unmap/list
mapped
bd bd
的性能接近
使用方法简单rbd --nbd
其它的功能仍由rbd良好的稳定性
良好的可移植性完成
良好的可移植性
代码简单易于维护
17
OpenStack基于LXC从Ceph rbd启虚拟机
流程
是否LXC 虚拟机?
Y
_get_guest_xml
新建并指定虚拟机的rootfs目录,生成XML文件
挂载镜像到rootfs目录_lxc_disk_handler
libvirt启动LXC 虚拟机_create_domain_and_network
18
OpenStack基于LXC从Ceph rbd启虚拟机
_lxc_disk_handler(virt/libvirt/driver.py)
获取Ceph rbd中volume的地址信息
通过rbd-use将远程的volume映射为本地的块设备的块设备
将块设备挂载到LXC container的rootfs
19
谢谢!
20