高可用OpenStack(Queen版)集群-14.Openstack集成Ceph准备

参考文档:html

  1. Install-guide:https://docs.openstack.org/install-guide/
  2. OpenStack High Availability Guide:https://docs.openstack.org/ha-guide/index.html
  3. 理解Pacemaker:http://www.cnblogs.com/sammyliu/p/5025362.html

十八.Openstack集成Ceph准备

Openstack环境中,数据存储可分为临时性存储与永久性存储。python

临时性存储:主要由本地文件系统提供,并主要用于nova虚拟机的本地系统与临时数据盘,以及存储glance上传的系统镜像;算法

永久性存储:主要由cinder提供的块存储与swift提供的对象存储构成,以cinder提供的块存储应用最为普遍,块存储一般以云盘的形式挂载到虚拟机中使用。swift

Openstack中须要进行数据存储的三大项目主要是nova项目(虚拟机镜像文件),glance项目(共用模版镜像)与cinder项目(块存储)。vim

下图为cinder,glance与nova访问ceph集群的逻辑图:后端

  1. ceph与openstack集成主要用到ceph的rbd服务,ceph底层为rados存储集群,ceph经过librados库实现对底层rados的访问;
  2. openstack各项目客户端调用librbd,再由librbd调用librados访问底层rados;
  3. 实际使用中,nova须要使用libvirtdriver驱动以经过libvirt与qemu调用librbd;cinder与glance可直接调用librbd;
  4. 写入ceph集群的数据被条带切分红多个object,object经过hash函数映射到pg(构成pg容器池pool),而后pg经过几圈crush算法近似均匀地映射到物理存储设备osd(osd是基于文件系统的物理存储设备,如xfs,ext4等)。

1. 建立pool

# Ceph默认使用pool的形式存储数据,pool是对若干pg进行组织管理的逻辑划分,pg里的对象被映射到不一样的osd,所以pool分布到整个集群里。 # 能够将不一样的数据存入1个pool,但如此操做不便于客户端数据区分管理,所以通常是为每一个客户端分别建立pool。 # 为cinder,nova,glance分别建立pool,命名为:volumes,vms,images # 建立pool,须要覆盖默认的pg num,官方文档对pg num的数量有以下建议:http://docs.ceph.com/docs/master/rados/operations/placement-groups/ # 同时综合考量所有pool的pg num总和的上限:pg num * 副本数量 < mon_max_pg_per_osd(默认200) * num_in_osds(osd总进程数); # pool建立在monitor节点操做,以controller01节点为例; # 这里volumes池是永久性存储,vms是实例临时后端存储,images是镜像存储
[root@controller01 ~]# su - cephde
[cephde@controller01 ~]$ sudo ceph osd pool create volumes 256 [cephde@controller01 ~]$ sudo ceph osd pool create vms 256 [cephde@controller01 ~]$ sudo ceph osd pool create images 256

# 查看状态
[cephde@controller01 ~]$ sudo ceph pg stat [cephde@controller01 ~]$ sudo ceph osd lspools

2. 安装Ceph客户端

# glance-api服务所在节点须要安装python-rbd; # 这里glance-api服务运行在3个控制节点,以controller01节点为例
[root@controller01 ~]# yum install python-rbd -y

# cinder-volume与nova-compute服务所在节点须要安装ceph-common; # 这里cinder-volume与nova-compute服务运行在3个计算(存储)节点,以compute01节点为例
[root@compute01 ~]# yum install ceph-common -y

3. 受权设置

1)建立用户

# ceph默认启用cephx authentication(见ceph.conf),须要为nova/cinder与glance客户端建立新的用户并受权; # 可在管理节点上分别为运行cinder-volume与glance-api服务的节点建立client.glance与client.cinder用户并设置权限; # 针对pool设置权限,pool名对应建立的pool
[root@controller01 ~]# ceph auth get-or-create 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' 
[root@controller01 ~]# ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images'

2)推送client.glance秘钥

# 将建立client.glance用户生成的秘钥推送到运行glance-api服务的节点
[root@controller01 ~]# ceph auth get-or-create client.glance | tee /etc/ceph/ceph.client.glance.keyring
[root@controller01 ~]# ceph auth get-or-create client.glance | ssh root@controller02 tee /etc/ceph/ceph.client.glance.keyring
[root@controller01 ~]# ceph auth get-or-create client.glance | ssh root@controller03 tee /etc/ceph/ceph.client.glance.keyring

# 同时修改秘钥文件的属主与用户组
[root@controller01 ~]# chown glance:glance /etc/ceph/ceph.client.glance.keyring
[root@controller01 ~]# ssh root@controller02 chown glance:glance /etc/ceph/ceph.client.glance.keyring
[root@controller01 ~]# ssh root@controller03 chown glance:glance /etc/ceph/ceph.client.glance.keyring

3)推送client.cinder秘钥(nova-volume)

# 将建立client.cinder用户生成的秘钥推送到运行cinder-volume服务的节点
[root@controller01 ~]# ceph auth get-or-create client.cinder | ssh root@compute01 tee /etc/ceph/ceph.client.cinder.keyring
[root@controller01 ~]# ceph auth get-or-create client.cinder | ssh root@compute02 tee /etc/ceph/ceph.client.cinder.keyring
[root@controller01 ~]# ceph auth get-or-create client.cinder | ssh root@compute03 tee /etc/ceph/ceph.client.cinder.keyring

# 同时修改秘钥文件的属主与用户组
[root@controller01 ~]# ssh root@compute01 chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring
[root@controller01 ~]# ssh root@compute02 chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring
[root@controller01 ~]# ssh root@compute03 chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring

4)推送client.cinder秘钥(nova-compute)

这里nova-compute服务与nova-volume服务运行在相同节点,没必要重复操做。api

5)libvirt秘钥 

nova-compute所在节点须要将client.cinder用户的秘钥文件存储到libvirt中;当基于ceph后端的cinder卷被attach到虚拟机实例时,libvirt须要用到该秘钥以访问ceph集群; # 在管理节点向计算(存储)节点推送client.cinder秘钥文件,生成的文件是临时性的,将秘钥添加到libvirt后可删除
[root@controller01 ~]# ceph auth get-key client.cinder | ssh root@compute01 tee /etc/ceph/client.cinder.key
[root@controller01 ~]# ceph auth get-key client.cinder | ssh root@compute02 tee /etc/ceph/client.cinder.key
[root@controller01 ~]# ceph auth get-key client.cinder | ssh root@compute03 tee /etc/ceph/client.cinder.key

# 在计算(存储)节点将秘钥加入libvirt,以compute01节点为例; # 首先生成1个uuid,所有计算(存储)节点可共用此uuid(其余节点不用操做此步); # uuid后续配置nova.conf文件时也会用到,请保持一致
[root@compute01 ~]# uuidgen

# 添加秘钥
[root@compute01 ~]# cd /etc/ceph
[root@compute01 ceph]# touch secret.xml
[root@compute01 ceph]# vim secret.xml
<secret ephemeral='no' private='no'>
  <uuid>10744136-583f-4a9c-ae30-9bfb3515526b</uuid>
  <usage type='ceph'>
    <name>client.cinder secret</name>
  </usage>
</secret> [root@compute01 ceph]# virsh secret-define --file secret.xml
[root@compute01 ceph]# virsh secret-set-value --secret 10744136-583f-4a9c-ae30-9bfb3515526b --base64 $(cat /etc/ceph/client.cinder.key)

相关文章
相关标签/搜索