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等编程语言

存储架构 集中 分布 存储集群有哪些_3c

 

  • RadosGW、RBD和CephFS都是RADOS存储服务的客户端,他们把RADOS的存储服务接口(librados)分别从不同的角度做了进一步抽象,因而各自适用于不同的应用场景;

 3 Ceph架构

存储架构 集中 分布 存储集群有哪些_配置文件_02

  • 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地址所在的网络,即公网网络地址;

存储架构 集中 分布 存储集群有哪些_数据_03

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用户的身份运行如下命令,测试集群的健康状态

存储架构 集中 分布 存储集群有哪些_数据_04

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及其以后的版本来说,停止和移除命令的格式分别如下所示:

  1. 停用设备:ceph osd out {osd-num}
  2. 停止进程:sudo systemctl stop ceph-osd@{osd-num}
  3. 移除设备:ceph osd purge {id} --yes-i-really-man-it

  若类似如下的OSD的配置信息存在于ceph.conf配置文件中,管理员在删除OSD之后手动将其删除。

存储架构 集中 分布 存储集群有哪些_存储架构 集中 分布_05

 

   不过,对于Luminous之前的版本来说,管理员需要依次手动执行如下步骤删除OSD设备:

  1. 于CRUSH运行图中移除设备:ceph osd crush remove {name}
  2. 移除OSD的认证:ceph auth del osd.{osd-num}
  3. 最后移除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

不积跬步,无以至千里;不积小流,无以成江海。