Openstack集成Ceph准备
Openstack环境中,数据存储可分为临时性存储与永久性存储。
临时性存储:主要由本地文件系统提供,并主要用于nova虚拟机的本地系统与临时数据盘,以及存储glance上传的系统镜像;
永久性存储:主要由cinder提供的块存储与swift提供的对象存储构成,以cinder提供的块存储应用最为广泛,块存储通常以云盘的形式挂载到虚拟机中使用。
Openstack中需要进行数据存储的三大项目主要是nova项目(虚拟机镜像文件),glance项目(共用模版镜像)与cinder项目(块存储)。
下图为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等)。
 
环境介绍
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高可用集群17-openstack集成Ceph准备的更多相关文章

  1. openstack高可用集群21-生产环境高可用openstack集群部署记录

    第一篇 集群概述 keepalived + haproxy +Rabbitmq集群+MariaDB Galera高可用集群   部署openstack时使用单个控制节点是非常危险的,这样就意味着单个节 ...

  2. openstack高可用集群18-Ceph和openstack的对接

    Ceph对接Openstack 官方文档: https://docs.ceph.com/docs/master/rbd/rbd-openstack/   Ceph的一个使用场景是结合Openstack ...

  3. openstack高可用集群15-后端存储技术—GlusterFS(分布式存储)

         

  4. openstack高可用集群16-ceph介绍和部署

    Ceph Ceph是一个可靠.自动重均衡.自动恢复的分布式存储系统,根据场景划分可以将Ceph分为三大块,分别是对象存储.块设备和文件系统服务.块设备存储是Ceph的强项. Ceph的主要优点是分布式 ...

  5. openstack高可用集群20-openstack计算节点宕机迁移方案

    openstack计算节点宕机迁移方案   情景一:/var/lib/nova/instances/ 目录不共享的处理方法(类似手动迁移云主机到其他节点)

  6. openstack高可用集群19-linuxbridge结合vxlan

    生产环境,假设我们的openstack是公有云,我们一般的linuxbridge结合vlan的模式相对于大量的用户来说是vlan是不够用的,于是我们引进vxlan技术解决云主机内网网络通讯的问题. 我 ...

  7. [ Openstack ] Openstack-Mitaka 高可用之 Pacemaker+corosync+pcs 高可用集群

    目录 Openstack-Mitaka 高可用之 概述    Openstack-Mitaka 高可用之 环境初始化    Openstack-Mitaka 高可用之 Mariadb-Galera集群 ...

  8. 阿里云搭建k8s高可用集群(1.17.3)

    首先准备5台centos7 ecs实例最低要求2c4G 开启SLB(私网) 这里我们采用堆叠拓扑的方式构建高可用集群,因为k8s 集群etcd采用了raft算法保证集群一致性,所以高可用必须保证至少3 ...

  9. kubeadm使用外部etcd部署kubernetes v1.17.3 高可用集群

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247483891&idx=1&sn=17dcd7cd ...

随机推荐

  1. angular11源码探索[DoCheck 生命周期和onChanges区别]

    网站 https://blog.thoughtram.io/ https://juristr.com/ https://www.concretepage.com/angular/ https://ww ...

  2. Java反射——java.lang.Class和类的加载

    反射的基础: java.lang.Class Class类的实例对象,用于记录类描述信息. 源码说:represent classes and interfaces in a running Java ...

  3. 迭代器原理gif

  4. JDBC【2】-- JDBC工作原理以及简单封装

    目录 1. 工作原理 1.1 加载驱动 1.1.1 类加载相关知识 1.1.2 为什么JDK 1.6之后不需要显示加载了? 1.2 驱动加载完成了,然后呢? 2. 简单封装 1. 工作原理 一般我们主 ...

  5. asp.net core 集成 Prometheus

    asp.net core 集成 prometheus Intro Prometheus 是一个开源的现代化,云原生的系统监控框架,并且可以轻松的集成 PushGateway, AlertManager ...

  6. 【Usaco 2009 Gold 】JZOJ2020年9月19日提高B组T2 电视游戏问题

    [Usaco 2009 Gold ]JZOJ2020年9月19日提高B组T2 电视游戏问题 题目 Description 农夫约翰的奶牛们游戏成瘾!本来FJ是想要按照陶叫兽的做法拿她们去电击戒瘾的,可 ...

  7. 转:Cookie详解

    没怎么坐过客户端相关的工作,所以写爬虫的时候,很多概念都很模糊,学习起来很困难.现在想攻坚一下,所以找了一下cookies相关的内容. HTTP cookies,通常又称作"cookies& ...

  8. PyQt(Python+Qt)学习随笔:枚举类QTreeWidgetItem.ItemType、QListWidgetItem.ItemType的取值及含义

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在Model/View的便利类QTreeWidget.QListWidgetItem中的项类型分别是 ...

  9. PyQt(Python+Qt)学习随笔:布局控件layout的layoutSizeConstraint属性不起作用的问题解决办法

    在<PyQt(Python+Qt)学习随笔:布局控件layout的layoutSizeConstraint属性>中介绍layout的layoutSizeConstraint属性后,反复测试 ...

  10. Springboot集成swagger和knife

    前言 knife4j是在swagger的基本上做做了一次封装,主要体现在ui表现,所有在使用前必须先搭建好swagger2,其实是swagger和knife都可以访问, 至于哪个好用全看个人! swa ...