背景
部门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,以防止出现可用节点
如何管理
inkscope?
calamari?
主机规划
当前的主机状态
| 主机 | 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-1172.16.6.158 ceph-2172.16.6.204 ceph-3
创建ceph用户(所有节点)
ceph-deploy 工具必须以普通用户登录 Ceph 节点,且此用户拥有无密码使用 sudo 的权限,因为它需要在安装软件及配置文件的过程中,不必输入密码。
在集群内的所有 Ceph 节点上给 ceph-deploy 创建一个特定的用户,但不要用 “ceph” 这个名字。useradd -d /home/ceph-one -m ceph-onepasswd ceph-one
设置sudo 权限(所有节点)
echo "ceph-one ALL = (root) NOPASSWD:ALL" | tee /etc/sudoers.d/ceph-onechmod 0440 /etc/sudoers.d/ceph-one
生成密钥对(管理节点)
正因为 ceph-deploy 不支持输入密码,你必须在管理节点上生成 SSH 密钥并把其公钥分发到各 Ceph 节点。 ceph-deploy 会尝试给初始 monitors 生成 SSH 密钥对。
生成 SSH 密钥对,但不要用 sudo 或 root 用户。提示 “Enter passphrase” 时,直接回车,口令即为空:su - ceph-onessh-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.dcd /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-onemkdir my-clustercd my-clusterceph-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
