采用CEPH实现Openstack统一存储
Ceph作为Linux PB级分布式文件系统,因其灵活智能可配置,在软件定义存储的大潮中,越来越受到IaaS方案提供商的注意。我们知道OpenStack中围绕虚拟机主要的存储需求来自于nova中的 disk,glance中的image,cinder中的虚拟硬盘,本文中,我们将全部采用ceph作为这些存储的后端,摆脱现有部署中各搞一套的现状。本文主要是对Ceph使用的总结,因个人环境不同,可能存在各种环境与包依赖等问题。集成逻辑图如下。
CEPH底层为RADOS块设备,提供访问RADOS的是librados 库,librad的调用就是基于librados,Nova只要是通过libvirt->qemu来调用librbd,所以我们知道暂时只有 libvirtDriver支持,Cinder与Glance直接调用librbd。
CEPH存储集群中的层次结构也可见上图,主要是先文件条带化为obj, obj通过hash函数映射到PG(上图中Pool就是PG的容器),PG通过CRUSH算法均匀映射到OSD,OSD基于文件系统,比如xfs,ext4等等。
本文中将只使用三个osd(官方推荐是至少两个, 一个无法应对故障), 三个监视器(主要负责接受数据上报, 提供cluster map, 至少要三个, 一个不好容灾,奇数个可确保PAXOS算法能确定一批监视器里哪个版本的集群运行图是最新的) , 只放了一个mds, 这样的搭配基本是测试环境下最小的配置了,ceph很强调它的扩展性, 所以越多越好, 越能体现其优势 本文使用的系统环境: redhat6.5 四台机器 规划如下: 1. mds 192.168.122.149 装一个mds 一个mon, 一个osd 2. osd 192.168.122.169 装一个mon, 一个osd 3. mon 192.168.122.41 装 一个mon, 一个osd
4. client 192.168.122.104 上安装openstack all-in-one,管理节点 三台机器组成ceph 存储集群,hostname分别为mds,osd,mon,下文将都是使用这些短的hostname代表节点,其中在这三台机器上都部署monitor和 对象存储osd,在mds上部署metadata服务器mds,另外一台机器作为openstack all-in-one环境节点 hostname:client
采用ceph-deploy来部署安装ceph, 这个类似与我们部署openstack用的chef。非常方便。
第一步: 在管理节点上修改/etc/hosts,ceph-deploy 后面的节点参数必须使用hostname,为了能够解析hostname,需要配置/etc/hosts,为下面粘贴部分的后四行。
1. [root@client ceph ]# cat /etc/hosts
2. 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
3. ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 4. 192.168.122.149 mds 5. 192.168.122.169 osd 6. 192.168.122.41 mon 7. 192.168.122.104 client
第二步:配置管理节点无密码访问其他节点,这个是方便我们使用ceph-deploy部署安装ceph
1. [root@client install]# ssh-keygen 2. [root@client install]# ssh-copy-id mds 3. [root@client install]# ssh-copy-id ods 4. [root@client install]# ssh-copy-id mon
第三步:在client上添加yum源文件ceph.repo 使用最新版本 firefly, 本地环境是redhat 6.5,所以baseurl中用rhel6, 本机为64位系统,后面的目录也使用的x86_64, 如下
1. [root@client~]# cat /etc/yum.repos.d/ceph.repo 2. [Ceph]
3. name=Cephpackages for $basearch
4. gpgkey=https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc
5. enabled=1
6. baseurl=http://ceph.com/rpm-firefly/rhel6/x86_64 7. priority=1 8. gpgcheck=1 9. type=rpm-md 10. [ceph-source]
11. name=Cephsource packages
12. gpgkey=https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc
13. enabled=1
14. baseurl=http://ceph.com/rpm-firefly/rhel6/SRPMS 15. priority=1 16. gpgcheck=1 17. type=rpm-md
18. [Ceph-noarch]
19. name=Cephnoarch packages
20. gpgkey=https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc
21. enabled=1
22. baseurl=http://ceph.com/rpm-firefly/rhel6/noarch 23. priority=1 24. gpgcheck=1 25. type=rpm-md
第四步: 安装ceph
1. [root@client~]# yum -y install ceph-deploy
本文使用ceph-deploy来做部署,这时最好建个目录,存放一些生成文件,避免在其他目录中与已有文件交杂在一起 1. [root@client ~]# mkdir ceph 2. [root@client ~]# cd ceph 建立一个集群包含mds osd mon
1. [root@client ceph]# ceph-deploy new mds mon osd # 必须使用hostname
安装ceph在三个节点上。
1. [root@client ceph]# ceph-deploy install mds mon osd 安装monitor
1. [root@client ceph]# ceph-deploy mon create mds mon osd
收集keyring文件,Note: 做这个时候,这个如果mds mon osd上防火墙开着,会收集不到,建议关掉,不然就要通过iptables设置相关rule,报的错是:
[ceph_deploy.gatherkeys][WARNIN]Unable to find /var/lib/ceph/bootstrap-mds/ceph.keyring
1. [root@client ceph]# ceph-deploy gatherkeys mds #用其中一个节点即可 2. [root@client ceph]# ls
3. ceph.bootstrap-mds.keyring ceph.bootstrap-osd.keyring ceph.client.admin.keyring ceph.conf ceph.log ceph.mon.keyring 4. 建立osd,默认是基于xfs文件系统,并激活。
1. [root@client ceph]# ceph-deploy osd prepare mds:/opt/ceph mds:/opt/cephmon:/opt/ceph
2. [root@client ceph]# ceph-deploy osd activate mds:/opt/ceph mds:/opt/cephmon:/opt/ceph 创建metadata服务器
1. [root@client ceph]# ceph-deploy mds create mds 这里插一段[如果只做ceph与openstack集成,请无视它]
* 如果到此位止,我们仅想把这个文件系统mount到client端,我们需要安装ceph-fuse
1. [root@client ceph]# yum -y install ceph-fuse 2. [root@client ceph]#
3. [root@client ceph]# ceph-fuse -m 192.168.122.169:6789 /mnt/ceph 4. ceph-fuse[24569]:starting ceph client 5. ceph-fuse[24569]:starting fuse 6. [root@client ceph]# df
7. Filesystem 1K-blocks Used Available Use%Mounted on
8. /dev/mapper/vg_client-lv_root 18069936 2791420 14360604 17% / 9. tmpfs 812188 4 812184 1%/dev/shm 10. /dev/vda1 495844 34541 435703 8% /boot
11. /etc/swift/data/drives/images/swift.img 1038336 32976 1005360 4% /etc/swift/data/drives/sdb1
12. ceph-fuse 54304768 25591808 28712960 48%/mnt/ceph #这一行