如何使用OpenStack Cinder对接多种后端存储系统?

公司准备部署一套OpenStack环境,使用Cinder组件为虚拟机提供块存储服务,目前公司已有一个ceph集群,集群包含ssd和sata存储,通过不同的pool区分,另外还有三台服务器,每个服务器配置一块300G的硬盘以及2块2TB的硬盘,公司决定充分利用这些存储设备,你会如何设计Cinder的部署架构,需要做哪些配置?

参与10

3同行回答

GaryyGaryy系统工程师某保险
通过 libvirt 你可以把 Ceph 块设备用于 OpenStack ,它配置了 QEMU 到 librbd 的接口。 Ceph 把块设备映像条带化为对象并分布到集群中,这意味着大容量的 Ceph 块设备映像其性能会比独立服务器更好8mmzstvkqbsOpenStack 里有三个地方可以和 Ceph 块设备结合:Images: OpenStac...显示全部

通过 libvirt 你可以把 Ceph 块设备用于 OpenStack ,它配置了 QEMU 到 librbd 的接口。 Ceph 把块设备映像条带化为对象并分布到集群中,这意味着大容量的 Ceph 块设备映像其性能会比独立服务器更好
8mmzstvkqbs

8mmzstvkqbs

OpenStack 里有三个地方可以和 Ceph 块设备结合:
Images: OpenStack 的 Glance 管理着 VM 的 image 。Image 相对恒定, OpenStack 把它们当作二进制文件、并以此格式下载。
Volumes: Volume 是块设备, OpenStack 用它们引导虚拟机、或挂载到运行中的虚拟机上。 OpenStack 用 Cinder 服务管理 Volumes 。
Guest Disks: Guest disks 是装有客户操作系统的磁盘。默认情况下,启动一台虚拟机时,它的系统盘表现为 hypervisor 文件系统的一个文件(通常位于 /var/lib/nova/instances/<uuid>/)。在 Openstack Havana 版本前,在 Ceph 中启动虚拟机的唯一方式是使用 Cinder 的 boot-from-volume 功能. 不过,现在能够在 Ceph 中直接启动虚拟机而不用依赖于 Cinder,这一点是十分有益的,因为可以通过热迁移更方便地进行维护操作。另外,如果你的 hypervisor 挂掉了,也可以很方便地触发 nova evacuate ,并且几乎可以无缝迁移虚拟机到其他地方。
下面将详细指导你配置 Glance 、 Cinder 和 Nova
注意:Ceph 不支持 QCOW2 格式的虚拟机磁盘,所以,如果想要在 Ceph 中启动虚拟机( 临时后端或者从卷启动),Glance 镜像必须是 RAW 格式。

1)在ceph上创建存储池
默认情况下, Ceph 块设备使用 rbd 存储池。你可以用任何可用存储池。建议为 Cinder 和 Glance 单独创建池。确保 Ceph 集群在运行,然后创建存储池
ceph osd pool create volumes 128
ceph osd pool create images 128
ceph osd pool create backups 128
ceph osd pool create vms 128
归置组的数量按照实际情况进行设置

2)配置OpenStack Ceph客户端
运行着 glance-api 、 cinder-volume 、 nova-compute 或 cinder-backup 的主机被当作 Ceph 客户端,它们都需要 ceph.conf 文件。
ssh {your-openstack-server} sudo tee /etc/ceph/ceph.conf </etc/ceph/ceph.conf

安装 CEPH 客户端软件包¶
在运行 glance-api 的节点上你需要 librbd 的 Python 绑定:
sudo apt-get install python-rbd
sudo yum install python-rbd

在 nova-compute 、 cinder-backup 和 cinder-volume 节点上,要安装 Python 绑定和客户端命令行工具:
sudo apt-get install ceph-common
sudo yum install ceph

配置 CEPH 客户端认证¶
如果你启用了 cephx 认证,需要分别为 Nova/Cinder 和 Glance 创建新用户。命令如下:
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'
ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images'
ceph auth get-or-create client.cinder-backup mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=backups’

把 client.cinder 、 client.glance 和 client.cinder-backup 的密钥环复制到适当的节点,并更改所有权:
ceph auth get-or-create client.glance | ssh {your-glance-api-server} sudo tee /etc/ceph/ceph.client.glance.keyring
ssh {your-glance-api-server} sudo chown glance:glance /etc/ceph/ceph.client.glance.keyring
ceph auth get-or-create client.cinder | ssh {your-volume-server} sudo tee /etc/ceph/ceph.client.cinder.keyring
ssh {your-cinder-volume-server} sudo chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring
ceph auth get-or-create client.cinder-backup | ssh {your-cinder-backup-server} sudo tee /etc/ceph/ceph.client.cinder-backup.keyring
ssh {your-cinder-backup-server} sudo chown cinder:cinder /etc/ceph/ceph.client.cinder-backup.keyring

运行 nova-compute 的节点,其进程需要密钥环文件:
ceph auth get-or-create client.cinder | ssh {your-nova-compute-server} sudo tee /etc/ceph/ceph.client.cinder.keyring

还得把 client.cinder 用户的密钥存进 libvirt 。 libvirt 进程从 Cinder 挂载块设备时要用它访问集群。
在运行 nova-compute 的节点上创建一个密钥的临时副本:
ceph auth get-key client.cinder | ssh {your-compute-node} tee client.cinder.key

然后,在计算节点上把密钥加进 libvirt 、然后删除临时副本:
uuidgen
457eb676-33da-42ec-9a8c-9293d545c337

cat > secret.xml <<EOF
<secret ephemeral='no' private='no'>
<uuid>457eb676-33da-42ec-9a8c-9293d545c337</uuid>
<usage type='ceph'>

    <name>client.cinder secret</name>

</usage>
</secret>
EOF
sudo virsh secret-define --file secret.xml
Secret 457eb676-33da-42ec-9a8c-9293d545c337 created
sudo virsh secret-set-value --secret 457eb676-33da-42ec-9a8c-9293d545c337 --base64 $(cat client.cinder.key) && rm client.cinder.key secret.xml
保留密钥的 uuid ,稍后配置 nova-compute 时要用。

3)配置OpenStack使用Ceph
Glance 可使用多种后端存储 image 。要让它默认使用 Ceph 块设备,按如下配置 Glance 。
JUNO 之前的版本¶
编辑 /etc/glance/glance-api.conf 并把下列内容加到 [DEFAULT] 段下:
default_store = rbd
rbd_store_user = glance
rbd_store_pool = images
rbd_store_chunk_size = 8

JUNO 版¶
编辑 /etc/glance/glance-api.conf 并把下列内容加到 [glance_store] 段下:
[DEFAULT]
...
default_store = rbd
...
[glance_store]
stores = rbd
rbd_store_pool = images
rbd_store_user = glance
rbd_store_ceph_conf = /etc/ceph/ceph.conf
rbd_store_chunk_size = 8

配置 CINDER¶
OpenStack 需要一个驱动和 Ceph 块设备交互。还得指定块设备所在的存储池名。编辑 OpenStack 节点上的 /etc/cinder/cinder.conf ,添加:
[DEFAULT]
...
enabled_backends = ceph
...
[ceph]
volume_driver = cinder.volume.drivers.rbd.RBDDriver
rbd_pool = volumes
rbd_ceph_conf = /etc/ceph/ceph.conf
rbd_flatten_volume_from_snapshot = false
rbd_max_clone_depth = 5
rbd_store_chunk_size = 4
rados_connect_timeout = -1
glance_api_version = 2

如果你使用了 cephx 认证,还需要配置用户及其密钥(前述文档中存进了 libvirt )的 uuid :
[ceph]
...
rbd_user = cinder
rbd_secret_uuid = 457eb676-33da-42ec-9a8c-9293d545c337

配置 CINDER BACKUP¶
OpenStack 的 Cinder Backup 需要一个特定的守护进程,不要忘记安装它。编辑 Cinder Backup 节点的 /etc/cinder/cinder.conf 添加:
backup_driver = cinder.backup.drivers.ceph
backup_ceph_conf = /etc/ceph/ceph.conf
backup_ceph_user = cinder-backup
backup_ceph_chunk_size = 134217728
backup_ceph_pool = backups
backup_ceph_stripe_unit = 0
backup_ceph_stripe_count = 0
restore_discard_excess_bytes = true

配置 NOVA 来挂载 CEPH RBD 块设备¶
为了挂载 Cinder 块设备(块设备或者启动卷),必须告诉 Nova 挂载设备时使用的用户和 uuid 。libvirt会使用该用户来和 Ceph 集群进行连接和认证。
rbd_user = cinder
rbd_secret_uuid = 457eb676-33da-42ec-9a8c-9293d545c337

配置 NOVA¶
要让所有虚拟机直接从 Ceph 启动,必须配置 Nova 的临时后端。
建议在 Ceph 配置文件里启用 RBD 缓存(从 Giant 起默认启用)。另外,启用管理套接字对于故障排查来说大有好处,给每个使用 Ceph 块设备的虚拟机分配一个套接字有助于调查性能和/或异常行为。
可以这样访问套接字:
ceph daemon /var/run/ceph/ceph-client.cinder.19195.32310016.asok help

编辑所有计算节点上的 Ceph 配置文件:
[client]

    rbd cache = true
    rbd cache writethrough until flush = true
    admin socket = /var/run/ceph/guests/$cluster-$type.$id.$pid.$cctid.asok
    log file = /var/log/qemu/qemu-guest-$pid.log
    rbd concurrent management ops = 20

调整这些路径的权限:
mkdir -p /var/run/ceph/guests/ /var/log/qemu/
chown qemu:libvirtd /var/run/ceph/guests /var/log/qemu/
要注意, qemu 用户和 libvirtd 组可能因系统不同而不同,前面的实例基于 RedHat 风格的系统

4)重启OpenStack
要激活 Ceph 块设备驱动、并把块设备存储池名载入配置,必须重启 OpenStack 。在基于 Debian 的系统上去对应节点执行下列命令:在基于 Red Hat 的系统上执行
sudo service openstack-glance-api restart
sudo service openstack-nova-compute restart
sudo service openstack-cinder-volume restart
sudo service openstack-cinder-backup restart一旦 OpenStack 启动并运行正常,应该就可以创建卷并用它启动虚拟机了。

5)从块设备引导
你可以用 Cinder 命令行工具从弄个 image 创建卷:
cinder create --image-id {id of image} --display-name {name of volume} {size of volume}

注意 image 必须是 RAW 格式,你可以用 qemu-img 转换格式,如:
qemu-img convert -f {source-format} -O {output-format} {source-filename} {output-filename}
qemu-img convert -f qcow2 -O raw precise-cloudimg.img precise-cloudimg.raw

Glance 和 Cinder 都使用 Ceph 块设备,此镜像又是个写时复制克隆,就能非常快地创建一个新卷。在 OpenStack 操作面板里就能从那个启动虚拟机,步骤如下:
启动新实例。
选择与写时复制克隆关联的 image 。
选择 ‘boot from volume’ 。
选择你刚创建的卷。

收起
保险 · 2018-09-20
Henry2017Henry2017研发工程师金融行业
个人建议没有特殊需求可以统一划到ceph中使用,cinder只是做数据盘使用,包括快照和备份;nova和glance也都可以放到ceph中存储,这种应用比较典型,其他的如果需要NFS或是对象存储等,可以单独搞,不一定要接到cinder。...显示全部

个人建议没有特殊需求可以统一划到ceph中使用,cinder只是做数据盘使用,包括快照和备份;nova和glance也都可以放到ceph中存储,这种应用比较典型,其他的如果需要NFS或是对象存储等,可以单独搞,不一定要接到cinder。

收起
金融其它 · 2018-09-21
浏览4141
大天使之剑大天使之剑售前技术支持杭州才云科技
注意driver的选择可以分为热存储和冷存储热存储使用ceph三副本,可以用来放虚拟机的镜像、系统盘和数据盘(cinder盘),保证数据的强一致性冷存储可以使用三台服务器做gluster 来存放备份以及视频图片,降低存储成本...显示全部
  • 注意driver的选择
  • 可以分为热存储和冷存储
  • 热存储使用ceph三副本,可以用来放虚拟机的镜像、系统盘和数据盘(cinder盘),保证数据的强一致性
  • 冷存储可以使用三台服务器做gluster 来存放备份以及视频图片,降低存储成本
收起
互联网服务 · 2018-09-19
浏览4195

提问者

int32bit
研发工程师民生银行
擅长领域: 云计算私有云云管平台

问题来自

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2018-09-19
  • 关注会员:4 人
  • 问题浏览:7756
  • 最近回答:2018-09-21
  • X社区推广