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等)。
![]()
环境介绍
10.30.1.201 node1 #openstack控制节点1+glance节点1+ceph的mon
10.30.1.202 node2 #openstack控制节点2+glance节点2+ceph的mon
10.30.1.203 node3 #openstack计算节点1+ceph的osd节点
10.30.1.204 node4 #openstack计算节点2+ceph的osd节点
10.30.1.205 node5 #openstack的cinder节点1+keepalived+haproxy+ceph客户端 节点
10.30.1.206 node6 #openstack的cinder节点2+keepalived+haproxy+ceph客户端 节点
10.30.1.221 ceph-host-01 #ceph的mon+mgr+mds+osd节点1
10.30.1.222 ceph-host-02 #ceph的mon+mgr+mds+osd节点2
10.30.1.223 ceph-host-03 #ceph的mon+mgr+mds+osd节点3
10.30.1.224 ceph-host-04 #ceph的osd节点4
10.30.1.225 ceph-host-05 #ceph的osd节点5
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节点操作,以ceph-host-01节点为例;
# 这里volumes池是永久性存储,vms是实例临时后端存储,images是镜像存储
创建volumes池,对应Cinder服务
[root@ceph-host-01 ceph-cluster]# ceph osd pool create volumes 64
创建images池,对应Glance服务
[root@ceph-host-01 ceph-cluster]# ceph osd pool create images 64
创建vms池,对应Nova服务
[root@ceph-host-01 ceph-cluster]# ceph osd pool create vms 64
初始化pool
[root@ceph-host-01 ceph-cluster]# rbd pool init volumes
[root@ceph-host-01 ceph-cluster]# rbd pool init images
[root@ceph-host-01 ceph-cluster]# rbd pool init vms
# 查看状态和pool列表
ceph pg stat
ceph osd lspools
2. 安装Ceph客户端
# glance-api服务所在节点需要安装python-rbd;
# 这里glance-api服务运行在2个控制节点,以node1节点为例
[root@node1 ~]# yum install python-rbd -y
# cinder-volume与nova-compute服务所在节点需要安装ceph-common;
# 这里cinder-volume与nova-compute服务运行在2个计算和一个cinder节点,以cinder节点node5节点为例
[root@node5 ~]# yum install ceph-common -y
#当然我们也直接在ceph的admin节点直接给glance,nova,cinder节点这就安装ceph和ceph-radosgw并把ceph.conf和admin密钥推送给这些节点
[root@ceph-host-01 ceph-cluster]# ceph-deploy install --no-adjust-repos node1 node2 node3 node4 node5
[root@ceph-host-01 ceph-cluster]# ceph-deploy admin node1 node2 node3 node4 node5
注1:实验的过程中发现计算(nova-compute)节点必须是ceph的osd节点,所以下面三个步骤不能少,计算(nova-compute)节点必须添加其本身的一个磁盘到osd中
ceph-deploy install --no-adjust-repos node3 node4
ceph-deploy osd create --data /dev/vdb node3
ceph-deploy osd create --data /dev/vdb node4
注1:实验的过程中发现openstack控制节点是ceph的mon节点比较方便,因为glance一般放在openstack控制节点上
ceph-deploy install --no-adjust-repos node1 node2
ceph-deploy mon add node1 node2
注:在上面操作前所有的节点都修改/etc/hosts文件如下,并把ceph-host-01的密钥复制给这些节点,下面以复制到node5为例
[root@node5 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.30.1.201 node1
10.30.1.202 node2
10.30.1.203 node3
10.30.1.204 node4
10.30.1.205 node5
10.30.1.206 node6
10.30.1.221 ceph-host-01
10.30.1.222 ceph-host-02
10.30.1.223 ceph-host-03
10.30.1.224 ceph-host-04
10.30.1.225 ceph-host-05
[root@ceph-host-01 ceph-cluster]# ssh-copy-id node5
3. 授权设置
1)创建用户
# ceph默认启用cephx authentication(见ceph.conf),需要为nova/cinder与glance客户端创建新的用户并授权;
# 可在管理节点上分别为运行cinder-volume与glance-api服务的节点创建client.glance与client.cinder用户并设置权限;
# 在ceph中创建了cinder、glance等用户,并做了权限控制
# 在ceph集群中创建glance和cinder用户,只需在一个节点上操作即可。OpenStack中用到ceph集群中的glance和cinder服务,因此要创建这两个用户。nova不需要单独创建用户,nova是单独调用底层的kvm libvirt 使得ceph集群直接对接libvirt。
# 针对pool设置权限,pool名对应创建的pool
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 mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes, allow rwx pool=vms, allow rx pool=images'
示范如下
[root@ceph-host-01 ceph-cluster]# ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images'
[client.glance]
key = AQCmKjdelrXfIxAA8YwM2lpdjFZh3vBwddi7kA==
[root@ceph-host-01 ceph-cluster]# 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'
[client.cinder]
key = AQAKxTdeH/dAIxAA73GmEXRQQLKnGRfxkcnz4w==
2)推送client.glance秘钥
安装完ceph包之后,需要将ceph集群的ceph.conf和密钥copy到所有client端。
如果在Ceph的配置中打开了auth认证,就需要做如下的操作;如果Ceph中的auth都是设置的none,也就是关闭的话,可以不做如下操作。
# 将创建client.glance用户生成的秘钥推送到运行glance-api服务的节点
[root@ceph-host-01 ceph-cluster]# ceph auth get-or-create client.glance | tee /etc/ceph/ceph.client.glance.keyring
[root@ceph-host-01 ceph-cluster]# scp /etc/ceph/ceph.client.glance.keyring root@node1:/etc/ceph/
[root@ceph-host-01 ceph-cluster]# scp /etc/ceph/ceph.client.glance.keyring root@node2:/etc/ceph/
# 同时修改秘钥文件的属主与用户组
[root@ceph-host-01 ceph-cluster]# chown glance:glance /etc/ceph/ceph.client.glance.keyring
[root@ceph-host-01 ceph-cluster]# ssh root@node1 chown glance:glance /etc/ceph/ceph.client.glance.keyring
[root@ceph-host-01 ceph-cluster]# ssh root@node2 chown glance:glance /etc/ceph/ceph.client.glance.keyring
3)推送client.cinder秘钥(nova-volume)
# 将创建client.cinder用户生成的秘钥推送到运行cinder-volume服务的节点
[root@ceph-host-01 ceph-cluster]# ceph auth get-or-create client.cinder | tee /etc/ceph/ceph.client.cinder.keyring
[root@ceph-host-01 ceph-cluster]# scp /etc/ceph/ceph.client.cinder.keyring root@node5:/etc/ceph/
# 同时修改秘钥文件的属主与用户组
[root@ceph-host-01 ceph-cluster]# ssh root@node5 chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring
4)推送client.cinder秘钥(nova-compute)
[root@ceph-host-01 ceph-cluster]# scp /etc/ceph/ceph.client.cinder.keyring root@node3:/etc/ceph/
[root@ceph-host-01 ceph-cluster]# scp /etc/ceph/ceph.client.cinder.keyring root@node4:/etc/ceph/
# 同时修改秘钥文件的属主与用户组
[root@ceph-host-01 ceph-cluster]# ssh root@node3 chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring
[root@ceph-host-01 ceph-cluster]# ssh root@node4 chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring
5)libvirt秘钥
nova-compute所在节点需要将client.cinder用户的秘钥文件存储到libvirt中;当基于ceph后端的cinder卷被attach到虚拟机实例时,libvirt需要用到该秘钥以访问ceph集群;
# 在ceph的admin节点向计算节点推送client.cinder秘钥文件,生成的文件是临时性的,将秘钥添加到libvirt后可删除
# 在计算节点将秘钥加入libvirt,以node3节点为例;
# 首先生成1个uuid,全部计算和cinder节点可共用此uuid(其他节点不用操作此步);
# uuid后续配置nova.conf文件时也会用到,请保持一致
[root@ceph-host-01 ceph-cluster]# uuidgen
29355b97-1fd8-4135-a26e-d7efeaa27b0a
# 在libvirt上添加秘钥
[root@node3 ~]# cd /etc/ceph
[root@node3 ceph]# touch secret.xml
[root@node3 ceph]# vim secret.xml
<secret ephemeral='no' private='no'>
<uuid>29355b97-1fd8-4135-a26e-d7efeaa27b0a</uuid>
<usage type='ceph'>
<name>client.cinder secret</name>
</usage>
</secret>
[root@node3 ceph]# virsh secret-define --file secret.xml
[root@node3 ceph]#virsh secret-set-value --secret 29355b97-1fd8-4135-a26e-d7efeaa27b0a --base64 AQDiazlemzi3JxAAOvstXYpCD6igO0SRJ455BQ==
注: --base64 后面的是/etc/ceph/ceph.client.cinder.keyring里的key
- openstack高可用集群21-生产环境高可用openstack集群部署记录
第一篇 集群概述 keepalived + haproxy +Rabbitmq集群+MariaDB Galera高可用集群 部署openstack时使用单个控制节点是非常危险的,这样就意味着单个节 ...
- openstack高可用集群18-Ceph和openstack的对接
Ceph对接Openstack 官方文档: https://docs.ceph.com/docs/master/rbd/rbd-openstack/ Ceph的一个使用场景是结合Openstack ...
- openstack高可用集群15-后端存储技术—GlusterFS(分布式存储)
- openstack高可用集群16-ceph介绍和部署
Ceph Ceph是一个可靠.自动重均衡.自动恢复的分布式存储系统,根据场景划分可以将Ceph分为三大块,分别是对象存储.块设备和文件系统服务.块设备存储是Ceph的强项. Ceph的主要优点是分布式 ...
- openstack高可用集群20-openstack计算节点宕机迁移方案
openstack计算节点宕机迁移方案 情景一:/var/lib/nova/instances/ 目录不共享的处理方法(类似手动迁移云主机到其他节点)
- openstack高可用集群19-linuxbridge结合vxlan
生产环境,假设我们的openstack是公有云,我们一般的linuxbridge结合vlan的模式相对于大量的用户来说是vlan是不够用的,于是我们引进vxlan技术解决云主机内网网络通讯的问题. 我 ...
- [ Openstack ] Openstack-Mitaka 高可用之 Pacemaker+corosync+pcs 高可用集群
目录 Openstack-Mitaka 高可用之 概述 Openstack-Mitaka 高可用之 环境初始化 Openstack-Mitaka 高可用之 Mariadb-Galera集群 ...
- 阿里云搭建k8s高可用集群(1.17.3)
首先准备5台centos7 ecs实例最低要求2c4G 开启SLB(私网) 这里我们采用堆叠拓扑的方式构建高可用集群,因为k8s 集群etcd采用了raft算法保证集群一致性,所以高可用必须保证至少3 ...
- kubeadm使用外部etcd部署kubernetes v1.17.3 高可用集群
文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247483891&idx=1&sn=17dcd7cd ...
随机推荐
- 「LOJ 3153」 「JOI Open 2019」三级跳
题面 LOJ 3153 solution 对于任意一对\(A,B\),若区间\([A,B]\)中存在一个数权值大于\(A\)或\(B\),则用这个数来替代\(A\)或\(B\)显然更优. 故只需要考虑 ...
- 【性能测试】【locust】快速入门
简介 locust是一个开源的分布式用户负载压力测试工具,对网站(其他系统,例如接口等)进行负载测试,并确定可以处理多少的并发用户,locust特点利用了协程支持,达到高数量级别的并发,以及基于事件驱 ...
- java8的lambda表达式
关于java8的lambda表达式 lambda表达式一般用于接口,因为lambda表达式是函数式编程. 1.有且仅有一个抽象方法被称为函数式接口,函数式接口可以显示的被@FunctionalInte ...
- P3619 魔法
考虑两个任务 \(1\) 和 \(2\),当前时间为 \(T\),两个任务都要完成. 先完成任务 \(1\) 的条件是 \(T>t_1\) 且 \(T+b_1>t_2\),先完成任务 \( ...
- ③SpringCloud 实战:使用 Ribbon 客户端负载均衡
这是SpringCloud实战系列中第三篇文章,了解前面第两篇文章更有助于更好理解本文内容: ①SpringCloud 实战:引入Eureka组件,完善服务治理 ②SpringCloud 实战:引入F ...
- Java String 演进全解析
前言 String 是我们使用最频繁的对象,使用不当会对内存.程序的性能造成影响,本篇文章全面介绍一下 Java 的 String 是如何演进的,以及使用 String 的注意事项. 下面的输出结果是 ...
- rest-framework 解析器
一 解析器的作用: 根据请求头 content-type 选择对应的解析器对请求体内容进行处理. 有application/json,x-www-form-urlencoded,form-data等格 ...
- CentOS7.X 挂载磁盘 与Mysql 自动备份
1.前言 搞了好几天终于弄了出来,简单记录一下.注意以下教程是在测试服务器基础上编写 如数据盘含有数据切勿使用此教程,如对命令行不熟悉的 不建议搞哈 .本文中的磁盘/dev/sdb为笔者测试服务器上的 ...
- 自动化运维工具之Puppet变量、正则表达式、流程控制、类和模板
前文我们了解了puppet的file.exec.cron.notify这四种核心资源类型的使用以及资源见定义通知/订阅关系,回顾请参考https://www.cnblogs.com/qiuhom-18 ...
- 安装pillow报错处理
sudo python3 pip install pillow 报错:The headers or library files could not be found for jpeg,... 解决:安 ...