1 存储设备
- DAS:IDE、SATA、SCSI、SAS、USB,直接附加存储,直接附加到计算机主板总线上提供存储服务
- NAS:NFS,CIFS,网络附加存储,通过网络附加至计算机文件挂载点上提供存储服务,文件系统级别的存储方式,无法对挂载文件存储服务进行格式化等操作
- SAN:SCSI,FC SAN、iSCSI,提供块存储服务,而NFS提供的是文件级别存储服务
2 关于Ceph
- Ceph是一个对象(object)式存储系统,它把每一个待管理的数据流(例如一个文件)切分到一到多个固定大小的对象数据,并以其为原子单元完成数据存取。
- 对象数据的底层存储服务是由多个主机(host)组成的存储集群,该集群也被称之为RADOS(Reliable Automatic Distributed Object Store)存储集群,即可靠、自动化、分布式对象存储系统
- librados是RADOS存储集群的API,它支持C、C++、Java、Python、Ruby和PHP等编程语言
- RadosGW、RBD和CephFS都是RADOS存储服务的客户端,他们把RADOS的存储服务接口(librados)分别从不同的角度做了进一步抽象,因而各自适用于不同的应用场景;
3 Ceph架构
- osd:对象存储设备(object storage device),每一个磁盘就是一个对象存储设备,一台机器可以有多个osd,即多个对象存储设备。
- mon:监控集群总共有多少个节点,每个节点有多少个osd,整个集群元数据
- mgr:新版L版后会有mgr组件,进行集群健康状态检查
- pool:存储池,相当于对整个集群进行分区
- PG:归置组
4 Ceph集群部署
4.1 测试环境说明
public ip | cluster ip | hostname | roles |
172.20.0.5 | 192.168.1.5 | ceph-admin.h3c.com | ceph-admin |
172.20.0.10 | 192.168.1.10 | stor01.h3c.com | mon,osd,mds |
172.20.0.11 | 192.168.1.11 | stor02.h3c.com | mon.osd,mgr |
172.20.0.12 | 192.168.1.12 | stor03.h3c.com | mon,osd,mgr |
172.20.0.13 | 192.168.1.13 | stor04.h3c.com | mon,osd |
此外,各主机需要预设的系统环境如下:
- 借助于NTP服务设定各节点时间精确同步
- 通过DNS完成各节点的主机名称解析,测试环境主机梳理较少时也可以使用hosts文件进行;
- 关闭各节点的iptables或firewalld服务,并确保他们被禁止随系统引导过程启动
- 各节点禁用SELinux
4.2 设定时钟同步
若节点可直接访问互联网,直接启动chronyd系统服务,并设定其随系统引导而启动
# systemctl start chronyd.service
# systemctl enable chronyd.service
不过,建议用户配置使用本地的时间服务器,在节点数量众多时尤其如此。存在可用的本地时间服务器时,修改节点的/etc/chrony.conf配置文件,并将时间服务器指向相应的主机即可,配置格式如下:
server CHRONY-SERVER-NAME-OR-IP iburst
4.3 主机名称解析
出于简化配置步骤的目的,本测试环境使用hosts文件进行各节点名称解析
4.4 关闭iptables或filewalld服务
在Centos7上,iptables或filewalld服务通常只会安装并启动一种,在不确定具体启动状态情况下,这里通过同时关闭并禁用二者即可简单达到设定目标。
# systemctl stop iptables.service
# systemctl stop firewalld.service
# systemctl disable iptables.service
# systemctl disable firewalld.servcie
4.5 关闭并禁用SELinux
若当前启用了SELinux,则需要编辑/etc/sysconfig/selinux文件,禁用SELinux,并临时设置其当前状态为permissive
# sed -i 's#^\(SELINUX=).*\#\1disabled#' /etc/sysconfig/selinux
# setenforce 0
4.6 准备yum仓库配置文件
Ceph官方的仓库路径为http://downlowd.ceph.com,目前主流版本相关的程序包都在提供,包括kraken、luminous和mimic等,他们分别位于rpm-mimic等一类的目录中。直接安装程序包即可生成相关的yum仓库相关的配置文件,程序包位于相关版本的noarch目录下,例如ceph-medic-1.0.4-16.g60cf7e9.el7.noarch.rpm是为负责生成适用于部署mimic版本Ceph的yum仓库配置文件,因此直接在线安装此程序包,也能直接生成yum仓库的相关配置。
在ceph-admin节点上,使用如下命令即可安装生成mimic版本相关的yum仓库配置
# rpm -ivh https://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarch/ceph-medic-1.0.4-16.g60cf7e9.el7.noarch.rpm?spm=a2c6h.25603864.0.0.48ea635b6hdiSa
4.7 创建部署Ceph的特定用户账号
部署工具ceph-deploy必须以普通用户登陆到Ceph集群的各目标节点,且此用户需要拥有无密码使用sudo命令的权限,以方便在安装软件以及生成配置文件的过程中无需中断配置过程。不过,较新版的ceph-deploy也支持使用“--username”选项提供可无密码使用sudo命令的用户名。
另外,使用“ceph-deploy --username {username}”命令时,指定的用户需要能够通过SSH协议自动认证并连接到各Ceph节点,以免Ceph-deploy命令在配置途中需要用户输入密码。
4.8 在各ceph各节点创建新用户
首先需要在各节点以管理员的身份创建一个专用与ceph-deploy的特定用户账号,例如,cephadm(建议不要使用ceph),并为其设置认证密码:
# useradd cephadm
# echo "magedu" | passwd --stdin cephadm
而后,确保这些节点上新创建的用户cephadm都有无密码运行sudo命令的权限。
# echo "cephadm ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephadm
# chmod 0440 /etc/sudoers.d/cephadm
4.9 配置用户基于密钥的ssh认证
ceph-deploy命令不支持运行中途的密码输入,因此,必须在管理节点(ceph-admin.magedu.com)上生成SSH密钥并将公钥分发至Ceph集群的各个节点上,下面直接以cephadm用户身份生成SSH密钥对:
# ssh-keygen -t rsa -P " "
而后即可把公钥拷贝到各Ceph节点:
# ssh-copy-id -i .ssh/id_rsa.pub cephadm@stor01.h3c.com
# ssh-copy-id -i .ssh/id_rsa.pub cephadm@stor02.h3c.com
# ssh-copy-id -i .ssh/id_rsa.pub cephadm@stor03.h3c.com
# ssh-copy-id -i .ssh/id_rsa.pub cephadm@stor04.h3c.com
另外,为了后续操作方便,建议修改管理节点上cephadm用户的~/.ssh/config文件,设定其访问ceph集群各节点时默认使用的用户名,从而避免每次执行ceph-deploy命令时都要指定使用“--username”选项设置使用的用户名。文件内容如下所示:
Host stor01
Hostname stor01.h3c.com
User cephadm
Host stor02
Hostname stor02.h3c.com
User cephadm
Host stor03
Hostname stor03.h3c.com
User cephadm
4.10 在管理节点安装ceph-deploy
ceph存储集群的部署的过程可通过管理节点使用ceph-deploy全程进行,这里首先在管理节点安装ceph-deploy及其以来的程序包
# yum update
# yum install ceph-deploy python-setuptools python2-subprocess32 -y
4.11 初始化RADOS集群
4.11.1 首先在管理节点上以cephadm用户创建集群相关的配置文件目录
$ mkdir ceph-cluster
$ cd ceph-cluster
4.11.2 初始化第一个MON节点,准备创建集群
初始化第一个MON节点的命令格式为“ceph-deploy new {initial-monitor-node(s)}”,本示例中,stor01即为第一个MON节点名称,其名称必须与节点当前实际使用的主机名称保持一致。运行如下命令即可生成初始配置;
$ ceph-deploy new --cluster-network 192.168.1.0/24 --public-network 172.20.0.0/16 stor01
4.11.3 编辑生成ceph.conf配置文件,在[global]配置段中设置ceph集群面向客户端通信时使用的IP地址所在的网络,即公网网络地址;
4.11.4 安装Ceph集群
ceph-deploy命令能够以远程的方式连入Ceph集群各节点完成程序包安装等操作,命令格式如下:
ceph-deploy install {ceph-node} [{ceph-node}...]
因此,若要将stor01、stor02和stor03配置为Ceph集群节点,则执行如下命令即可
$ ceph-deploy install stor01 stor02 stor03 stor04
提示:若需要在集群各节点独立安装ceph程序包,其方法如下:
$ rpm -ivh https://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarch/ceph-medic-1.0.4-16.g60cf7e9.el7.noarch.rpm?spm=a2c6h.25603864.0.0.48ea635b6hdiSa
$ yum install ceph ceph-radosgw
独立安装完后,配置将其他节点为集群节点需要添加如下参数,“--no-adjust-repos”\
# ceph-deploy install --no-adjust-repos stor01 stor02 stor03 stor04
4.11.5 配置初始MON节点,并收集所有密钥
$ ceph-deploy mon create-initial
4.11.6 把配置文件和admin密钥拷贝Ceph集群各节点,以免得每次执行“ceph”命令行时不得不明确指定MON节点的地址和ceph.client.admin.kyering:
$ ceph-deploy admin stor01 stor02 stor03 stor04
而后在Ceph集群中需要运行ceph命令的节点上(或所有节点上)以root用户身份设定用户cephadmin能够读取/etc/ceph/ceph.client.admin.keyring文件:
$ setfacl -m u:cephadm:r /etc/ceph/ceph.client.admin.keyring
4.11.7 配置Manager节点,启动ceph-mgr进程:
$ ceph-deploy mgr create stor01
4.12 在Ceph集群内的节点上以cephadm用户的身份运行如下命令,测试集群的健康状态
4.13 向RADOS集群添加OSD
“ceph-deploy disk”命令可以检查并列出OSD节点上所有可用的磁盘相关信息:
$ ceph-deploy disk list stor01 stor02 stor03 stor04
而后,在管理节点上使用ceph-deploy命令擦除计划专用于OSD,命令格式为“ceph-deploy disk zap {osd-server-name} {disk-name}”,需要注意的是此步会清除目标设备上的所有数据,下面分别擦净stor01、stor02和stor03/04上用于OSD的一个磁盘设备vdb:
$ ceph-deploy disk zap stro01 /dev/vdb
$ ceph-deploy disk zap stro02 /dev/vdb
$ ceph-deploy disk zap stro03 /dev/vdb
$ ceph-deploy disk zap stro04 /dev/vdb
提示:若设备上此前有数据,则可能需要在相应节点上以root用户使用“ceph-volume lvm zap --destroy {DEVICE}”命令进行;
4.14 添加OSD
添加OSD命令“ceph-deploy osd create {node} --data {data-disk}”,默认使用的存储引擎为bluestore。
如下命令即可分别吧stor01、stor02和stor03/04上的设备vdb添加为OSD;
# ceph-deploy osd create stor01 --data /dev/vdb
# ceph-deploy osd create stor02 --data /dev/vdb
# ceph-deploy osd create stor03 --data /dev/vdb
# ceph-deploy osd create stor04 --data /dev/vdb
而后可以使用“ceph-deploy osd list” 命令列出指定节点上的OSD:
# ceph-deploy osd list stor01 stor02 stor03 stor04
使用如下命令了解相关信息
$ ceph osd dump
$ ceph osd ls
5 从RADOS集群中移除OSD的方法
Ceph集群中的一个OSD通常对应于一个设备,且运行于专用的守护进程。在某OSD设备出现故障,或管理员出于管理之需确实要移除特定的OSD设备时,需要先停止相关的守护进程,而后在进行移除操作。对于Luminous及其以后的版本来说,停止和移除命令的格式分别如下所示:
- 停用设备:ceph osd out {osd-num}
- 停止进程:sudo systemctl stop ceph-osd@{osd-num}
- 移除设备:ceph osd purge {id} --yes-i-really-man-it
若类似如下的OSD的配置信息存在于ceph.conf配置文件中,管理员在删除OSD之后手动将其删除。
不过,对于Luminous之前的版本来说,管理员需要依次手动执行如下步骤删除OSD设备:
- 于CRUSH运行图中移除设备:ceph osd crush remove {name}
- 移除OSD的认证:ceph auth del osd.{osd-num}
- 最后移除OSD设备:ceph osd rm {osd-num}
6 测试上传/下载数据对象
存取数据时,客户端必须首先连接至RADOS集群上某存储池,而后依据对象名称由相关的CRUSH规则完成数据对象寻址,于是,为了测试集群的数据存储功能,这里首先创建一个用于测试的存储池mypool,并设定其PG数量为16个。
$ ceph osd pool create mypool 16
然而即可将测试文件上传至存储池中,例如下面的“rados put”命令将/etc/issue文件上传至mypool存储池,对象名称依然保留为文件名issue,而“rados ls”命令则可以列出指定存储池中的数据对象。
$ rados put issue /etc/issue --pool=mypool
$ rados ls --pool=mypool
而“ceph osd map”命令可以获取到存储池中数据对象的具体位置信息
$ ceph osd map mypool issue
删除数据对象,“rados rm”命令时较为常用的一种方式
# rados rm issue --pool=mypool
删除存储池命令存在数据丢失的风险,Ceph于是默认禁止此类操作。管理员需要在ceph.conf配置文件中启用支持删除存储池的操作后,方可使用类似如下命令删除存储池。
$ ceph osd pool rm mypool mypool --yes-i-really-really-mean-it
不积跬步,无以至千里;不积小流,无以成江海。