上面左边是我的个人微信,如需进一步沟通,请加微信。 右边是我的公众号“Openstack私有云”,如有兴趣,请关注。
继上篇《Ceph 之 块设备、文件系统、对象存储的使用》,可以独立于openstack单独部署一套ceph集群,给openstack使用,这样openstack本身部署的时候不要启用ceph,在使用块设备的相关组建上配置使用外部ceph集群,可以有更灵活的架构选择,比如虚拟机nova块设备使用一个快速固态硬盘存储池,cinder-backup卷备份使用慢速硬盘存储池,这样对隔离故障域也很有好处。本次实验使用如下环境:
ceph集群环境:
系统centos7.4
ceph版本 ceph version 10.2.10
测试服务器为kvm虚拟机(openstack虚拟机)
ceph集群服务器分配如下:
节点 | 服务 | cluster network |
---|---|---|
ceph-1(admin-node) | osd.{1,2,},mon.ceph-1 | eth0:192.168.1.161/24 |
ceph-2 | osd.{3,4},mon.ceph-2 | eth0:192.168.1.162/24 |
ceph-3 | osd.{5,6},mon.ceph-3 | eth0:192.168.1.163/24 |
ceph每个节点在原来系统盘的基础上增加2块osd盘/dev/vdb 、/dev/vdc,集群共有6个osd
进程,3个monitor
进程。管理节点用作执行ceph-deploy
命令,使用ceph-1节点充当。
Openstack集群环境:
系统centos7.3
Openstack版本 Ocata 4.0.2.1
Openstack集群服务器分配如下:
节点 | 服务 | IP |
control01 | control+compute+network | 192.168.1.121 |
control02 | control+compute+network | 192.168.1.122 |
control03 | control+compute+network | 192.168.1.123 |
节点control01-control03作为ceph集群的使用者(client),同一个局域网。
操作思路:
首先找到Opesntack官网中关于使用Kolla部署外部ceph的操作方法:
https://docs.openstack.org/kolla-ansible/latest/reference/external-ceph-guide.html#requirements
主要的思路是:
1、在ceph集群中创建相应的pool:
a、创建rbd块设备的pool池“vms”作为nova虚拟机使用的存储池;
b、创建rbd块设备的pool池“images” 作为glance镜像的存储池;
c、创建rbd块设备的pool池“volumes” 作为cinder的存储池;
d、创建rbd块设备的pool池“backups” 作为cinder卷备份的存储池;
2、修改kolla全局配置文件globals.yml,关闭openstack自身的ceph存储,打开nova、glance、cinder、cinder-backup等组件使用ceph的开关;
3、配置外部ceph,使用kolla的合并配置特性,对相应的组件的ceph存储pool池进行配置;
4、使用kolla-ansible deploy 重新部署;
操作步骤:
1、在ceph集群中创建相应的pool:
ceph osd pool create images 128 ceph osd pool create volumes 128 ceph osd pool create backups 128 ceph osd pool create vms 128
2、在ceph集群中创建nova、glance、cinder、cinder-backup等组件使用ceph的用户并生产keyring文件,在ceph-1服务器中执行:
cd /etc/ceph/ ceph auth get-or-create client.cinder mon 'allow r' osd 'allow object_prefix rbd_children, allow rwx pool=volumes, allow rwx pool=vms, allow rx pool=images' -o ceph.client.cinder.keyring ceph auth get-or-create client.glance mon 'allow r' osd 'allow object_prefix rbd_children, allow rwx pool=images' -o ceph.client.glance.keyring ceph auth get-or-create client.cinder-backup mon 'allow r' osd 'allow object_prefix rbd_children, allow rwx pool=backups, allow rwx pool=volumes' -o ceph.client.cinder-backup.keyring ceph auth get-or-create client.nova mon 'allow r' osd 'allow object_prefix rbd_children, allow rwx pool=vms, allow rwx pool=volumes, allow rx pool=images' -o ceph.client.nova.keyring //小提示:如果有参考系统,比如其他正常运行的平台,可以使用ceph auth get进行查询,可以比较确切的指导具体的参数。另外,如果上面的参数需要修改,只需要修改相关参数之后重新执行即可。 2018年6月29日注: 测试发现创建的用户权限少了 class-read ,更新用户权限如下: ceph auth caps client.cinder mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes, allow rwx pool=vms, allow rx pool=images' ceph auth caps client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images' ceph auth caps client.cinder-backup mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=backups, allow rwx pool=volumes' ceph auth caps client.nova mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=vms, allow rwx pool=volumes, allow rx pool=images'
拷贝ceph-1上/etc/ceph 目录下的文件ceph.conf 和 ceph.client.glance.keyring 文件到/etc/kolla/config/glance/目录下,kolla在部署的时候会将这个目录下ceph.*拷贝到对应容器的/etc/ceph/目录下。
scp /etc/ceph/{ceph.conf,ceph.client.glance.keyring} control01://etc/kolla/config/glance/
拷贝ceph-1上/etc/ceph 目录下的文件ceph.conf 和 ceph.client.cinder.keyring 文件到/etc/kolla/config/cinder/cinder-volume/以及/etc/kolla/config/cinder/cinder-backup/目录下,kolla在部署的时候会将这个目录下ceph.*拷贝到对应容器的/etc/ceph/目录下。
scp /etc/ceph/{ceph.conf,ceph.client.cinder.keyring} control01://etc/kolla/config/cinder/cinder-volume/ scp /etc/ceph/{ceph.conf,ceph.client.cinder.keyring} control01://etc/kolla/config/cinder/cinder-backup/
拷贝ceph-1上/etc/ceph 目录下的文件 ceph.client.cinder-backup.keyring 文件到/etc/kolla/config/cinder/cinder-backup目录下,kolla在部署的时候会将这个目录下ceph.*拷贝到对应容器的/etc/ceph/目录下。
scp /etc/ceph/ceph.client.cinder-backup.keyring control01://etc/kolla/config/cinder/cinder-backup/
拷贝ceph-1上/etc/ceph 目录下的文件ceph.conf 和 ceph.client.nova.keyring文件以及ceph.client.cinder.keyring 到/etc/kolla/config/nova/目录下,kolla在部署的时候会将这个目录下ceph.*拷贝到对应容器的/etc/ceph/目录下。
scp /etc/ceph/{ceph.conf,ceph.client.nova.keyring,ceph.client.cinder.keyring} control01://etc/kolla/config/nova/ //注意,官网上没有要求拷贝ceph.client.cinder.keyring 这个文件,但是在部署的过程中要求这个文件。
3、修改kolla全局配置文件/etc/kolla/globals.yml,关闭openstack自身的ceph存储,打开nova、glance、cinder、cinder-backup等组件使用ceph的开关;
enable_ceph: "no" //关闭openstack自身的ceph存储 glance_backend_ceph: "yes" cinder_backend_ceph: "yes" nova_backend_ceph: "yes"
4、配置外部ceph,使用kolla的合并配置特性,对相应的组件的ceph存储pool池进行配置;
a、glance的配置,增加文件/etc/kolla/config/glance/glance-api.conf,内容如下:
[glance_store] stores = rbd default_store = rbd rbd_store_pool = images rbd_store_user = glance //这是第2步创建的用户glance rbd_store_ceph_conf = /etc/ceph/ceph.conf
b、cinder的配置,增加文件/etc/kolla/config/cinder/cinder-volume.conf,内容如下:
[DEFAULT] enabled_backends=rbd-1 [rbd-1] rbd_ceph_conf=/etc/ceph/ceph.conf rbd_user=cinder //这是第2步创建的cinder用户 backend_host=rbd:volumes rbd_pool=volumes volume_backend_name=rbd-1 volume_driver=cinder.volume.drivers.rbd.RBDDriver rbd_secret_uuid=02d41563-5fe7-442a-ada5-3bf508e5e8b1 //注意:cinder_rbd_secret_uuid 可以在 /etc/kolla/passwords.yml 文件中找到。
c、cinder-backup的配置,增加文件/etc/kolla/config/cinder/cinder-backup.conf,内容如下:
[DEFAULT] backup_ceph_conf=/etc/ceph/ceph.conf backup_ceph_user=cinder-backup //这是第2步创建的cinder-backup用户 backup_ceph_chunk_size = 134217728 backup_ceph_pool=backups backup_driver = cinder.backup.drivers.ceph backup_ceph_stripe_unit = 0 backup_ceph_stripe_count = 0 restore_discard_excess_bytes = true
d、nova的配置,增加文件/etc/kolla/config/nova/nova-compute.conf,内容如下:
[libvirt] images_rbd_pool=vms images_type=rbd images_rbd_ceph_conf=/etc/ceph/ceph.conf rbd_user=nova //这是第2步创建的nova用户 disk_cachemodes = network=writeback //官网上没有这个参数 hw_disk_discard = unmap //官网上没有这个参数 rbd_secret_uuid = d0d02b02-e256-4693-b476-264e84ecfefd //官网上没有这个参数,可以在 /etc/kolla/passwords.yml 文件中找到。
e、如果ceph集群部署的时候主机解析不是使用IP而是用主机名,需要修改openstack集群节点/etc/hosts文件,增加对ceph集群主机名的解析,例如:
control01、control02、control03节点上: # cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.1.121 control01 192.168.1.122 control02 192.168.1.123 control03 192.168.1.161 ceph-1 192.168.1.162 ceph-2 192.168.1.163 ceph-3
4、使用kolla-ansible deploy 重新部署;
kolla-ansibel deploy -i// 其中 用实际环境中的inventory文件替代,比如multiple或者all-in-one
5. 验证
上传raw格式的glance镜像:
openstack image create --disk-format raw --file=cirros-0.3.4-x86_64-disk.raw cirros
在web界面上生成实例:
在web界面上生成cinder卷
在外部ceph集群中检查vms pool和volumes pool中是否正常生成image文件:
[root@ceph-1 ceph]# rbd ls vms 63adb2bb-5c2d-41b4-93e2-a567f440b8d0_disk //和上面实例cirros-1的ID一致 [root@ceph-1 ceph]# rbd ls volumes volume-448720d5-b6af-45f1-9da2-04edaf76ffcd //和上面卷vol-1的ID一致
可以看到正常生成。测试验证成功。
总结及建议:
建议在设计之初就确定使用外部ceph存储,中途调整存储还是存在很大风险,并且还涉及到相关的镜像、虚拟机、卷的迁移。
根据官网进行操作会碰到一些坑,并且官网对于这一块描述的不是很详细,必须动手实验填坑。
如果碰到问题,可以分解定位问题,比如开始的时候发现glance在上传镜像的时候报500错误,后面通过直接在外部ceph集群中运行rbd create -n client.glance 命令,通过指定client.glance用户看看是否能够正常生成rbd块设备,后面就发现是ceph用户的权限出现了问题。
对于openstack使用外部ceph对象存储这一块官网上没有介绍,直接使用内部ceph是可以很方便启用这个功能的。
上面验证完成之后,完全可以应用在生产环境上面,比如创建一个SSD固态硬盘存储池作为vms pool 给虚拟机的系统盘使用,创建一个普通SAS硬盘存储池作为volumes pool 给虚拟机的卷使用,images pool 给镜像使用,创建一个低成本慢速大容量SATA盘存储池作为backups pool 给cinder-backup备份卷使用。
对于在一台ceph集群物理服务器上同时有SSD固态硬盘、SAS盘、SATA盘,需要根据不同类型的盘划分pool的方法,可以在创建OSD的时候进行ruleset的归类,当创建pool的时候,指定ruleset参数就能够使用不同类型盘的目的了。
2018年7月7日注:
物理服务器上同时有SSD固态硬盘、SAS盘、SATA盘,根据不同类型的盘划分pool的方法,ceph的luminous以后的版本有更简便的方法,参考 :
http://www.zphj1987.com/2017/06/28/ceph-luminous-new-osd-class/
另外,经过查找社区官网版本release说明:https://docs.openstack.org/releasenotes/kolla/queens.html ,kolla使用的ceph版本,到Q版之后才支持luminous版本。
2018年7月11日注:
上面使用外部存储的方法在一些规模稍大的openstack集群中可以使用,但是如果对于只是需要解决存储分级的小规模集群场景来说,可能还是统一使用kolla会方便一些。我的想法是先使用kolla进行统一部署ceph,在部署完成之后,然后通过手动调整ceph crush存储规则,新建rule,将相应的osd划入对应的rule,最后将相应的pool调整到相应的rule。这种方法还需要考虑调整后,是否需要修改kolla的配置以满足kolla的幂等性,就是说需要kolla部署后调整,下次再运行kolla部署,是否会影响ceph对应的配置。