背景

部门Iaas资源要用OpenStack 的方式统一管理,需要部署一套Ceph集群为其提供统一的存储能力。
OpenStack 使用 Ceph 作为后端存储可以带来以下好处:

  • 不需要购买昂贵的商业存储设备,降低 OpenStack 的部署成本
  • Ceph 同时提供了块存储、文件系统和对象存储,能够完全满足 OpenStack 的存储类型需求
  • RBD COW 特性支持快速的并发启动多个 OpenStack 实例
  • 为 OpenStack 实例默认的提供持久化卷
  • 为 OpenStack 卷提供快照、备份以及复制功能
  • 为 Swift 和 S3 对象存储接口提供了兼容的 API 支持

在生产环境中,我们经常能够看见将 Nova、Cinder、Glance 与 Ceph RBD 进行对接。除此之外,还可以将 Swift、Manila 分别对接到 Ceph RGW 与 CephFS。Ceph 作为统一存储解决方案,有效降低了 OpenStack 云环境的复杂性与运维成本。

准备工作

依据之前部署ceph的经验,大部分情况按照规范来部署都不会有太大问题,最核心的问题就是部署之前的集群规划,想要做好集群规划就要考虑以下几个问题。

  • 版本 ?
  • 部署安装模式 ?
  • 可靠性?
  • 扩容方案?
  • 如何管理?

    版本

    当前最新的版本是15.2.1,从Nautilus版本(14.2.0)开始,每年都有一个新的稳定发行周期,定于3月1日。每个稳定的发行系列将收到一个名称(例如,“ Mimic”)和主要发行编号(例如,对于Mimic,为13,因为“ M”是字母的第13个字母)。
    出于稳定性考虑,我们没有用最新的15版本,选择相对比较新14版本。

    部署安装模式

    部署采用官方推荐的ceph-deploy部署,除了ceph-deploy 模式,还有一种是ansible部署模式,由于没有使用经验,且是生产环境,故不采用。如果是测试环境,需要经常重装ceph,会考虑用ansible,一键部署集群,一键销毁集群,想想都觉得省事。
    如果是在纯内网的环境,需要提前下好所有的离线包。
    1、使用一台刚安装完centos7.x minimal的设备,通过yum install –downloadonly的方式,将环境中所需要的所有包,例如htop、iotop之类的,只要是用得上的,都下载下来,做成一个内部yum源,常用的是ceph、ceph-radosgw、ceph-deploy、smartctl、htop、iotop、vim,后续所有内部节点的安装都指向这个源
    2、在指定的节点上使用yum安装服务,例如osd节点就安装ceph,RGW节点就安装ceph-radosgw,使用yum先安装好所需要的全部包
    3、使用ceph-deploy进行部署,起osd、创建mon、mgr、rgw等

    可靠性

    名词定义:

  • PG:一个PG包含一定量的数据切片,一个文件数据分片离散存放在PG中

一般OSD数量小于5把PG 数量设置在128
集群PG总数 = (OSD总数 100) / 最大副本数 (结果必须舍入到最接近的2的N次方幂的值)
存储池PG总数 = (OSD总数
100 / 最大副本数) / 池数

  • 副本:一个PG的总份数
  • 故障域:相同副本唯一存在的最大区域,一个故障域只存在PG的一份副本

Ceph的可靠性的影响因素可能有:

  • 副本的数量

出于稳定性考虑,副本数量为3个。

  • 故障域的范围

采用默认的主机类型,也就是说副本数量为3时,会把3个副本分别存放在3台主机上,这样即使挂掉一台主机也不会导致存储不可用。

  • 网络分离

先明确一下这么做的必要性。Ceph 的客户端,如 RADOSGW,RBD 等,会直接和 OSD 互联,以上传和下载数据,这部分是直接提供对外下载上传能力的;Ceph 一个基本功能是提供数据的冗余备份,OSD 负责数据的备份,跨主机间的数据备份当然要占用带宽,而且这部分带宽是无益于 Ceph 集群的吞吐量的。只有一个网络,尤其是有新的存储节点加入时,Ceph 集群的性能会因为大量的数据拷贝而变得很糟糕。所以对于性能有一定要求的用户,还是有必要配置内外网分离的。
要求服务器有2个网卡,且网络能通连通。

扩容方案

ceph 支持运行时扩容,当新节点加入到集群中,ceph集群开始将部分现有的数据重新平衡到新加入的OSD上。每次只扩容一个OSD,以防止出现可用节点

如何管理

ceph-dash?
prometheu+grafana?

inkscope?

calamari?

pacemaker?

主机规划

当前的主机状态

主机 public_ip cluster_ip 角色 osd磁盘
cont1 192.168.251.11 admin,osd, mon /dev/sdb 931G
cont2 192.168.251.13 osd, mon
cont3 192.168.251.14 osd, mon
cont4 192.168.251.15 osd, mon /dev/sdb 2.2T
/dev/sdb 2.2T(预留)

部署

为了记录安装步骤这里准备了3台测试机器如下

主机 ip 角色 osd磁盘
ceph-1 172.16.6.157 admin,osd, mon /dev/sdb 20G
ceph-2 172.16.6.158 osd, mon /dev/sdb 20G
ceph-3 172.16.6.204 osd, mon /dev/sdb 20G

前期准备

关闭防火墙和selinux(所有节点)

systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

修改主机名

各个机器下分别执行如下命令
hostnamectl set-hostname ceph-1``hostnamectl set-hostname ceph-2 hostnamectl set-hostname ceph-3

修改后在每台机器上修改/etc/hosts文件
172.16.6.157 ceph-1
172.16.6.158 ceph-2
172.16.6.204 ceph-3

创建ceph用户(所有节点)

ceph-deploy 工具必须以普通用户登录 Ceph 节点,且此用户拥有无密码使用 sudo 的权限,因为它需要在安装软件及配置文件的过程中,不必输入密码。
在集群内的所有 Ceph 节点上给 ceph-deploy 创建一个特定的用户,但不要用 “ceph” 这个名字。
useradd -d /home/ceph-one -m ceph-one
passwd ceph-one

设置sudo 权限(所有节点)

echo "ceph-one ALL = (root) NOPASSWD:ALL" | tee /etc/sudoers.d/ceph-one
chmod 0440 /etc/sudoers.d/ceph-one

生成密钥对(管理节点)

正因为 ceph-deploy 不支持输入密码,你必须在管理节点上生成 SSH 密钥并把其公钥分发到各 Ceph 节点。 ceph-deploy 会尝试给初始 monitors 生成 SSH 密钥对。

生成 SSH 密钥对,但不要用 sudo 或 root 用户。提示 “Enter passphrase” 时,直接回车,口令即为空:
su - ceph-one
ssh-keygen

拷贝密钥对(管理节点)

ssh-copy-id ceph-1 ssh-copy-id ceph-2 ssh-copy-id ceph-3

设置yum源

先备份原来的yum源
su -
mv /etc/yum.repos.d/ /etc/yum.repos.d.bak
新建yum源并且将提前准备好的包拷贝到管理节点
mkdir /etc/yum.repos.d
cd /etc/yum.repos.d

[root@ceph-1 yum.repos.d]# cat ceph-local.repo [local] name=Ceph packages for $basearch baseurl=file:///data/yum/ceph enabled=1 gpgcheck=0 type=rpm-md

[root@ceph-1 yum.repos.d]# cat myiso.repo [c7-media] name=CentOS-$releasever - Media

这里的IP根据现场的yum源决定

baseurl=http://192.168.254.74:81/centos7/ gpgcheck=1

enabled=0

enabled=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

拷贝rpm包

从254.74拷贝以下目录到安装节点

[ceph-one@ceph-1 yum]$ pwd

/data/yum

[ceph-one@ceph-1 yum]$ ll

总用量 20

drwxr-xr-x 4 root root 8192 6月 23 05:13 ceph

drwxr-xr-x 2 root root 4096 6月 23 05:21 ceph-dashboard

drwxr-xr-x 2 root root 4096 6月 23 05:21 ceph-deploy

部署ceph-common

cd /data/yum/ceph/ && tar xf ceph-common.tar && yum install -y /data/yum/ceph/ceph-common/*.rpm

部署ceph-deploy

yum install -y /data/yum/ceph-deploy/*.rpm

创建集群

su ceph-one
mkdir my-cluster
cd my-cluster
ceph-deploy new ceph-1 ceph-2 ceph-3

修改配置文件

修改默认生成的ceph.conf,增加如下配置段:

80G日志盘

osd_journal_size = 81920

public_network= 192.168.20.0/24

副本pg数为2,默认为3,最小工作size为默认size - (默认size/2)

osd pool default size = 2

官方建议平均每个osd 的pg数量不小于30,即pg num > (osd_num) * 30 / 2(副本数)

osd pool default pg num = 1024

osd pool default pgp num = 1024