千家信息网

Ceph 手工部署13.2版本

发表于:2025-02-12 作者:千家信息网编辑
千家信息网最后更新 2025年02月12日,安装ceph官方文档0. 部署前的准备在部署之前需要准备好三台CentOS主机,我这里使用的是CentOS7.5,并将系统内核升级到4.x长期支持版本,相关的配置信息如下:节点主机名和IP信息loca
千家信息网最后更新 2025年02月12日Ceph 手工部署13.2版本

安装ceph

官方文档

0. 部署前的准备

在部署之前需要准备好三台CentOS主机,我这里使用的是CentOS7.5,并将系统内核升级到4.x长期支持版本,相关的配置信息如下:

  1. 节点主机名和IP信息
local-node-1: 10.0.0.1local-node-2: 10.0.0.2local-node-3: 10.0.0.3
  1. 配置hosts解析三台节点的主机名,并将三台节点配置为无密码认证模式。

  2. 关闭防火墙和Selinux

  3. 每台主机节点至少添加3块磁盘用于ceph存储,在实际的生产中可以将多块盘做raid,ceph 在添加磁盘时会自动格式化,所以此处不需要格式化。

  4. ceph对节点之间时间的要求很高,需要安装ntp并做好时间同步,配置好epel源。
1. 所有节点安装依赖包
yum install snappy  leveldb gdisk python-argparse gperftools-libs  -y

添加yum 源,导入key,这里我使用最新的mimic版本:

rpm --import 'https://download.ceph.com/keys/release.asc'su -c 'rpm -Uvh https://download.ceph.com/rpm-mimic/el7/noarch/ceph-release-1-0.el7.noarch.rpm'

由于国内的网络问题,这里可以选择使用阿里云的源,修改ceph.repo文件如下:

[Ceph]name=Ceph packages for $basearchbaseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/$basearchenabled=1gpgcheck=1type=rpm-mdgpgkey=https://download.ceph.com/keys/release.asc[Ceph-noarch]name=Ceph noarch packagesbaseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarchenabled=1gpgcheck=1type=rpm-mdgpgkey=https://download.ceph.com/keys/release.asc[ceph-source]name=Ceph source packagesbaseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/SRPMSenabled=1gpgcheck=1type=rpm-mdgpgkey=https://download.ceph.com/keys/release.asc
2. 所有节点安装ceph
 yum install ceph -y --disablerepo=epel
3. 检查安装包是否完整
[root@local-node-1 ~]# rpm -qa |egrep -i "ceph|rados|rbd"ceph-deploy-2.0.1-0.noarchlibrados2-13.2.5-0.el7.x86_64libradosstriper1-13.2.5-0.el7.x86_64ceph-mgr-13.2.5-0.el7.x86_64ceph-13.2.5-0.el7.x86_64python-rados-13.2.5-0.el7.x86_64libcephfs2-13.2.5-0.el7.x86_64python-rbd-13.2.5-0.el7.x86_64ceph-common-13.2.5-0.el7.x86_64ceph-selinux-13.2.5-0.el7.x86_64ceph-mon-13.2.5-0.el7.x86_64ceph-osd-13.2.5-0.el7.x86_64librbd1-13.2.5-0.el7.x86_64python-cephfs-13.2.5-0.el7.x86_64ceph-base-13.2.5-0.el7.x86_64ceph-mds-13.2.5-0.el7.x86_64

部署ceph集群

一. 部署Monitor

  1. 创建配置文件目录,并创建配置文件
mkdir /etc/ceph/touch /etc/ceph/ceph.conf
  1. 为集群生成一个FSDI:
[root@local-node-1 ~]# uuidgen7bd25f8d-b76f-4ff9-89ec-186287bbeaa5

3.集群创建一个钥匙串,为Monitor 服务创建一个密钥:

[root@local-node-1 ~]# ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'creating /tmp/ceph.mon.keyring

4.创建一个管理员钥匙串,生成一个client.admin用户,并将此用户添加到钥匙串中:

[root@local-node-1 ~]# ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'creating /etc/ceph/ceph.client.admin.keyring
  1. 创建bootstrap-osd钥匙串,将client.bootstrap-osd 用户添加到此钥匙串中:
[root@local-node-1 ~]# ceph-authtool --create-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring --gen-key -n client.bootstrap-osd --cap mon 'profile bootstrap-osd'creating /var/lib/ceph/bootstrap-osd/ceph.keyring
  1. 将生成的key加入ceph.mon.keyring.
[root@local-node-1 ~]# ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring[root@local-node-1 ~]# ceph-authtool /tmp/ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring
  1. 使用主机名和IP地址以及FSID生成monitor map:
[root@local-node-1 ~]# monmaptool --create --add local-node-1 10.0.0.1  --fsid 7bd25f8d-b76f-4ff9-89ec-186287bbeaa5 /tmp/monmapmonmaptool: monmap file /tmp/monmapmonmaptool: set fsid to 7bd25f8d-b76f-4ff9-89ec-186287bbeaa5monmaptool: writing epoch 0 to /tmp/monmap (1 monitors)
  1. 创建mon的目录,使用 集群名称-主机名的形式:
 mkdir  /var/lib/ceph/mon/ceph-local-node-1
  1. 填入第一个mon守护进程的信息:
[root@local-node-1 ~]# ceph-mon --mkfs -i local-node-1 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
  1. 配置/etc/ceph/ceph.conf文件:
[root@local-node-1 ~]# cat /etc/ceph/ceph.conf[global]fsid = 7bd25f8d-b76f-4ff9-89ec-186287bbeaa5     # 生成的FSIDmon initial members = local-node-1              # 主机名mon host = 10.0.0.1                             # 对应的IPpublic network = 10.0.0.0/24         auth cluster required = cephxauth service required = cephxauth client required = cephxosd journal size = 1024osd pool default size = 3osd pool default min size = 2osd pool default pg num = 333osd pool default pgp num = 333osd crush chooseleaf type = 1
  1. 由于我们使用使用root操作的,需要设置权限为ceph(也可以修改systemd的启动文件,将ceph用户改为root),并启动Monitor
chown  -R ceph:ceph /var/lib/cephsystemctl start ceph-mon@local-node-1.service
  1. 确认服务已经正常启动:
[root@local-node-1 ~]# ceph -s  cluster:    id:     7bd25f8d-b76f-4ff9-89ec-186287bbeaa5    health: HEALTH_OK  services:    mon: 1 daemons, quorum local-node-1    mgr: no daemons active    osd: 0 osds: 0 up, 0 in  data:    pools:   0 pools, 0 pgs    objects: 0  objects, 0 B    usage:   0 B used, 0 B / 0 B avail    pgs:     [root@local-node-1 ~]# netstat -lntp|grep ceph-montcp        0      0 10.0.0.1:6789           0.0.0.0:*               LISTEN      1799/ceph-mon 

二. 部署Manager

当我们配置好ceph-mon服务之后,就需要配置ceph-mgr服务。

  1. 生成一个认证密钥(ceph-mgr为自定义的名称,替换下面的$name):
ceph auth get-or-create mgr.$name mon 'allow profile mgr' osd 'allow *' mds 'allow *'如:[root@local-node-1 ~]# ceph auth get-or-create mgr.ceph-mgr mon 'allow profile mgr' osd 'allow *' mds 'allow *'[mgr.ceph-mgr]    key = AQBC56VcK2PALhAArjY0icXMK6/Hs0xZm/smPA==
  1. 创建存放此密钥的文件的目录,(目录名称为 集群名-$name):
sudo -u ceph mkdir /var/lib/ceph/mgr/ceph-ceph-mgr
  1. 将上面产生的密钥文件存入此目录下,并命名为keyring:
[root@local-node-1 ~]# cat /var/lib/ceph/mgr/ceph-ceph-mgr/keyring [mgr.ceph-mgr]    key = AQBC56VcK2PALhAArjY0icXMK6/Hs0xZm/smPA==
  1. 启动ceph-mgr服务:
ceph-mgr -i $name如:[root@local-node-1 ~]# ceph-mgr -i ceph-mgr
  1. 检查服务是否启动,查看ceph状态,此时应该为mgr: ceph-mgr(active)
[root@local-node-1 ~]# ceph -s  cluster:    id:     7bd25f8d-b76f-4ff9-89ec-186287bbeaa5    health: HEALTH_OK  services:    mon: 1 daemons, quorum local-node-1    mgr: ceph-mgr(active)           # 如果为starting状态需要稍等一会儿    osd: 0 osds: 0 up, 0 in  data:    pools:   0 pools, 0 pgs    objects: 0  objects, 0 B    usage:   0 B used, 0 B / 0 B avail    pgs:     [root@local-node-1 ~]# netstat -lntp | grep cephtcp        0      0 10.0.0.1:6789           0.0.0.0:*               LISTEN      1799/ceph-mon       tcp        0      0 10.0.0.1:6800           0.0.0.0:*               LISTEN      133336/ceph-mgr     
  1. mgr服务正常之后,我们可以使用如下命令查看当前mgr中可用的模块:
[root@local-node-1 ~]#  ceph mgr module ls{    "enabled_modules": [        "balancer",        "iostat",        "restful",        "status"    ],    "disabled_modules": [        {            "name": "dashboard",            "can_run": true,            "error_string": ""        },        {            "name": "hello",            "can_run": true,            "error_string": ""        },        {            "name": "influx",            "can_run": false,            "error_string": "influxdb python module not found"        },        {            "name": "localpool",            "can_run": true,            "error_string": ""        },        {            "name": "prometheus",            "can_run": true,            "error_string": ""        },        {            "name": "selftest",            "can_run": true,            "error_string": ""        },        {            "name": "smart",            "can_run": true,            "error_string": ""        },        {            "name": "telegraf",            "can_run": true,            "error_string": ""        },        {            "name": "telemetry",            "can_run": true,            "error_string": ""        },        {            "name": "zabbix",            "can_run": true,            "error_string": ""        }    ]}
  1. 如果想开启某个模块,可以使用如下命令:
[root@local-node-1 ~]# ceph mgr module enable dashboard[root@local-node-1 ~]# ceph mgr module ls{    "enabled_modules": [        "balancer",        "dashboard",        "iostat",        "restful",        "status"    ],...# 禁用模块 ceph mgr module disable dashboard
  1. 如果模块可以在加载时发布其地址(如http服务),可以通过如下命令查看开启的服务地址:
[root@local-node-1 ~]# ceph mgr services{}
  1. 群集第一次启动时,它使用mgr_initial_modules设置来覆盖要启用的模块。 但是,在集群的其余生命周期中忽略此设置:仅将其用于引导。 例如,在第一次启动监视器守护程序之前,您可以在ceph.conf中添加这样的部分:
[mon]    mgr initial modules = dashboard balancer
ceph-mgr的高可用

通常情况下,我们应该在运行ceph-mon守护程序的每台主机上配置ceph-mgr服务,以实现相同的可用性级别。
默认情况下,首先出现的ceph-mgr实例将由Monitor激活,其他成为是备用节点。ceph-mgr守护进程中不需要仲裁。
如果活动守护程序未能向监视器发送信标超过mon mgr beacon grace(默认为30秒),则它将被备用数据库替换。
如果要抢占故障转移,可以使用ceph mgr fail 将ceph-mgr守护程序显式标记为失败。

相关模块的帮助命令可以使用:

ceph tell mgr help

三. 创建OSD

官方文档

当mon初始化完成并正常运行后,应添加OSD。 在有足够的OSD来处理对象的副本数量之前,群集无法达到active + clean状态(例如,osd池默认大小= 3需要至少三个OSD)。 引导监视器后,您的群集具有默认的CRUSH映射; 但是,CRUSH映射没有映射到Ceph节点的任何Ceph OSD守护进程。

Ceph提供了ceph-volume实用程序,它可以初始化Ceph使用的逻辑卷,磁盘或分区等。 ceph-volume实用程序通过递增索引来创建OSD ID。 此外,ceph-volume会将新的OSD添加到主机下的CRUSH地图中。可以通过执行ceph-volume -h以获取CLI详细信息。 ceph-volume工具可以简化很多手工部署的步骤,如果不使用ceph-volume,就需要手动完成一些配置。 要使用短格式过程创建前三个OSD,请在所有要创建osd的node上执行以下操作:

==ceph OSD的创建有两种不同的架构选择,分为filestore和bluestore,bulestore是社区版本的默认配置,也是旨在对filestore性能方面的优化,两者具体的差异将在ceph原理中介绍。==

BlueStore
方式一:
  1. 创建OSD,如在每个节点上我们都有三块磁盘,分别为sdb,sdc,sdd.
 ceph-volume lvm create --data /dev/sdb ceph-volume lvm create --data /dev/sdc ceph-volume lvm create --data /dev/sdd
  1. 查看当前的lvm逻辑卷,根据此输出内容进行下一步激活OSD的操作
[root@local-node-1 ~]# ceph-volume lvm list====== osd.1 =======  [block]    /dev/ceph-fad16202-18c0-4444-9640-946173373925/osd-block-43a082d5-79c4-4d3f-880e-ecc7eaef6a83      type                      block      osd id                    1      cluster fsid              7bd25f8d-b76f-4ff9-89ec-186287bbeaa5      cluster name              ceph      osd fsid                  43a082d5-79c4-4d3f-880e-ecc7eaef6a83      encrypted                 0      cephx lockbox secret            block uuid                W68QgI-8eHM-bSEr-I9Gs-dQx8-tdf9-lHRbqa      block device              /dev/ceph-fad16202-18c0-4444-9640-946173373925/osd-block-43a082d5-79c4-4d3f-880e-ecc7eaef6a83      vdo                       0      crush device class        None      devices                   /dev/sdc====== osd.0 =======  [block]    /dev/ceph-6c675287-4a42-43f0-8cef-69b0150c3b06/osd-block-f829a5f0-0a11-4ae7-983a-ecd01718a81a      type                      block      osd id                    0      cluster fsid              7bd25f8d-b76f-4ff9-89ec-186287bbeaa5      cluster name              ceph      osd fsid                  f829a5f0-0a11-4ae7-983a-ecd01718a81a      encrypted                 0      cephx lockbox secret            block uuid                E0YDG4-lm1W-WbqE-yRHy-hqGL-H0af-eZzKjr      block device              /dev/ceph-6c675287-4a42-43f0-8cef-69b0150c3b06/osd-block-f829a5f0-0a11-4ae7-983a-ecd01718a81a      vdo                       0      crush device class        None      devices                   /dev/sdb====== osd.2 =======  [block]    /dev/ceph-256d0c82-3d7b-4672-a241-99c9c614809d/osd-block-75c04fb3-90e8-40af-9fb4-1c94b22664be      type                      block      osd id                    2      cluster fsid              7bd25f8d-b76f-4ff9-89ec-186287bbeaa5      cluster name              ceph      osd fsid                  75c04fb3-90e8-40af-9fb4-1c94b22664be      encrypted                 0      cephx lockbox secret            block uuid                fNFmrI-Y1dZ-4cHd-UCVi-ajLD-Uim2-wkcx3y      block device              /dev/ceph-256d0c82-3d7b-4672-a241-99c9c614809d/osd-block-75c04fb3-90e8-40af-9fb4-1c94b22664be      vdo                       0      crush device class        None      devices                   /dev/sdd
方式二:

这种方式中配置更加细致的参数,分为准备磁盘和激活OSD两步。

  1. 准备OSD

    ceph-volume lvm prepare --data {data-path} {data-path}如:ceph-volume lvm prepare --data /dev/hdd1
  2. 激活OSD
ceph-volume lvm activate {ID} {FSID}如:ceph-volume lvm activate 0 7bd25f8d-b76f-4ff9-89ec-186287bbeaa5
  1. 查看ceph状态:
[root@local-node-1 ~]# ceph -s  cluster:    id:     7bd25f8d-b76f-4ff9-89ec-186287bbeaa5    health: HEALTH_OK  services:    mon: 1 daemons, quorum local-node-1    mgr: ceph-mgr(active)    osd: 3 osds: 3 up, 3 in  data:    pools:   0 pools, 0 pgs    objects: 0  objects, 0 B    usage:   3.0 GiB used, 27 GiB / 30 GiB avail    pgs:  [root@local-node-1 ~]# netstat -lntp|grep cephtcp        0      0 10.0.0.1:6805           0.0.0.0:*               LISTEN      1132/ceph-osd       tcp        0      0 10.0.0.1:6806           0.0.0.0:*               LISTEN      1132/ceph-osd       tcp        0      0 10.0.0.1:6807           0.0.0.0:*               LISTEN      1132/ceph-osd       tcp        0      0 10.0.0.1:6808           0.0.0.0:*               LISTEN      1126/ceph-osd       tcp        0      0 10.0.0.1:6809           0.0.0.0:*               LISTEN      1126/ceph-osd       tcp        0      0 10.0.0.1:6810           0.0.0.0:*               LISTEN      1126/ceph-osd       tcp        0      0 10.0.0.1:6811           0.0.0.0:*               LISTEN      1126/ceph-osd       tcp        0      0 10.0.0.1:6812           0.0.0.0:*               LISTEN      1941/ceph-mgr       tcp        0      0 10.0.0.1:6789           0.0.0.0:*               LISTEN      1093/ceph-mon       tcp        0      0 10.0.0.1:6800           0.0.0.0:*               LISTEN      1128/ceph-osd       tcp        0      0 10.0.0.1:6801           0.0.0.0:*               LISTEN      1128/ceph-osd       tcp        0      0 10.0.0.1:6802           0.0.0.0:*               LISTEN      1128/ceph-osd       tcp        0      0 10.0.0.1:6803           0.0.0.0:*               LISTEN      1128/ceph-osd       tcp        0      0 10.0.0.1:6804           0.0.0.0:*               LISTEN      1132/ceph-osd 
FILESTORE(略)

参考此文档:http://docs.ceph.com/docs/master/install/manual-deployment/#filestore

扩展集群

以上在单机上部署了基本的组件,我们需要创建一个高可用的集群,要加入另外的两个节点local-node-2和local-node-3。

一. 扩展MON

  1. 修改node-1节点上的配置:
[root@local-node-1 ~]# cat /etc/ceph/ceph.conf [global]fsid = 7bd25f8d-b76f-4ff9-89ec-186287bbeaa5public network = 10.0.0.0/24mon initial members = local-node-1,local-node-2,local-node-3mon host = 10.0.0.1,10.0.0.2,10.0.0.3auth cluster required = cephxauth service required = cephxauth client required = cephxosd journal size = 1024osd pool default size = 3osd pool default min size = 2osd pool default pg num = 333osd pool default pgp num = 333osd crush chooseleaf type = 1[mon]mon allow pool delete = true[mds.local-node-1]host = local-node-1
  1. 将配置和密钥文件分发到其它的节点上
scp /etc/ceph/*  10.0.0.2:/etc/ceph/scp /etc/ceph/*  10.0.0.3:/etc/ceph/
  1. 在新的节点创建ceph相关目录,并添加权限:
mkdir -p  /var/lib/ceph/{bootstrap-mds,bootstrap-mgr,bootstrap-osd,bootstrap-rbd,bootstrap-rgw,mds,mgr,mon,osd}chown  -R ceph:ceph /var/lib/cephsudo -u ceph mkdir /var/lib/ceph/mon/ceph-local-node-2   # 指定node名称ID
  1. 修改本节点的配置文件
[root@local-node-2 ~]# cat /etc/ceph/ceph.conf [global]fsid = 7bd25f8d-b76f-4ff9-89ec-186287bbeaa5public network = 10.0.0.0/24mon initial members = local-node-1,local-node-2,local-node-3mon host = 10.0.0.1,10.0.0.2,10.0.0.3auth cluster required = cephxauth service required = cephxauth client required = cephxosd journal size = 1024osd pool default size = 3osd pool default min size = 2osd pool default pg num = 333osd pool default pgp num = 333osd crush chooseleaf type = 1[mon]mon allow pool delete = true[mon.local-node-2]mon_addr = 10.0.0.2:6789host = loacl-node-2
  1. 获取集群中的密钥和map
ceph auth get mon. -o /tmp/monkeyringceph mon getmap -o /tmp/monmap
  1. 使用已有的密钥和map添加一个新的Monitor,指定主机名
sudo -u ceph ceph-mon --mkfs -i local-node-2 --monmap /tmp/monmap --keyring /tmp/monkeyring
  1. 启动服务
systemctl start ceph-mon@local-node-2
  1. 使用上述方式添加其他节点,添加成功后查看mon状态:
[root@local-node-3]# ceph -s  cluster:    id:     7bd25f8d-b76f-4ff9-89ec-186287bbeaa5    health: HEALTH_OK  services:    mon: 3 daemons, quorum local-node-1,local-node-2,local-node-3    mgr: ceph-mgr(active)    osd: 3 osds: 3 up, 3 in  data:    pools:   0 pools, 0 pgs    objects: 0  objects, 0 B    usage:   3.0 GiB used, 27 GiB / 30 GiB avail    pgs:     [root@local-node-3]# ceph mon state3: 3 mons at {local-node-1=10.0.0.1:6789/0,local-node-2=10.0.0.2:6789/0,local-node-3=10.0.0.3:6789/0}, election epoch 28, leader 0 local-node-1, quorum 0,1,2 local-node-1,local-node-2,local-node-3

二. 添加OSD

  1. 从已经运行的ceph 节点上拷贝/etc/ceph下的配置文件和密钥到新的节点上,修改配置为:
[root@local-node-2 ~]# cat /etc/ceph/ceph.conf [global]fsid = 7bd25f8d-b76f-4ff9-89ec-186287bbeaa5public network = 10.0.0.0/24mon initial members = local-node-1,local-node-2,local-node-3mon host = 10.0.0.1,10.0.0.2,10.0.0.3auth cluster required = cephxauth service required = cephxauth client required = cephxosd journal size = 1024osd pool default size = 3osd pool default min size = 2osd pool default pg num = 333osd pool default pgp num = 333osd crush chooseleaf type = 1[mon]mon allow pool delete = true[mon.local-node-2]mon_addr = 10.0.0.2:6789host = loacl-node-2
  1. 从已经存在的osd的节点上拷贝初始化的密钥文件:
scp -p  /var/lib/ceph/bootstrap-osd/ceph.keyring  10.0.0.2:/var/lib/ceph/bootstrap-osd/scp -p  /var/lib/ceph/bootstrap-osd/ceph.keyring  10.0.0.3:/var/lib/ceph/bootstrap-osd/
  1. 在添加osd时,需要考虑是添加bluestore 还是filestore的后端存储集群,需要与原集群保持一致, 这里以bluestore为例:
ceph-volume lvm create --data /dev/sdbceph-volume lvm create --data /dev/sdcceph-volume lvm create --data /dev/sdd
  1. 按照上述方式添加其他节点,成功后如下所示:
[root@local-node-1 ~]# ceph -s  cluster:    id:     7bd25f8d-b76f-4ff9-89ec-186287bbeaa5    health: HEALTH_OK  services:    mon: 3 daemons, quorum local-node-1,local-node-2,local-node-3    mgr: ceph-mgr(active)    osd: 9 osds: 9 up, 9 in  data:    pools:   0 pools, 0 pgs    objects: 0  objects, 0 B    usage:   9.1 GiB used, 81 GiB / 90 GiB avail    pgs:     

部署CephFS

一. 添加MDS

==只有要使用cephFS的场景下才需要创建MDS服务。==

  1. 创建目录
mkdir -p /var/lib/ceph/mds/{cluster-name}-{id}   # 这里的ID设置为本地主机名EG:[root@local-node-1 ~]# sudo -u ceph mkdir -p /var/lib/ceph/mds/ceph-local-node-1
  1. 创建钥匙串:
ceph-authtool --create-keyring /var/lib/ceph/mds/{cluster-name}-{id}/keyring --gen-key -n mds.{id}eg:ceph-authtool --create-keyring /var/lib/ceph/mds/ceph-local-node-1/keyring --gen-key -n mds.local-node-1
  1. 导入密钥,并设置caps:
ceph auth add mds.{id} osd "allow rwx" mds "allow" mon "allow profile mds" -i /var/lib/ceph/mds/{cluster}-{id}/keyringEG:ceph auth add mds.local-node-1 osd "allow rwx" mds "allow" mon "allow profile mds" -i /var/lib/ceph/mds/ceph-local-node-1/keyring
  1. 添加mds的区域配置
[root@local-node-1 ~]# cat /etc/ceph/ceph.conf[global]fsid = 7bd25f8d-b76f-4ff9-89ec-186287bbeaa5public network = 10.0.0.0/24mon initial members = local-node-1mon host = 10.0.0.1auth cluster required = cephxauth service required = cephxauth client required = cephxosd journal size = 1024osd pool default size = 3osd pool default min size = 2osd pool default pg num = 333osd pool default pgp num = 333osd crush chooseleaf type = 1[mds.local-node-1]            # 添加此处的配置host = local-node-1
  1. 手动启动服务
[root@local-node-1 ~]# ceph-mds --cluster ceph -i local-node-1 -m local-node-1:6789

如果是使用root启动,需要注意权限问题,最好将服务使用systemd,修改为ceph:

 chown -R ceph:ceph /var/lib/ceph/mds/ systemctl start ceph-mds@local-node-1 systemctl enable ceph-mds@local-node-1
  1. 检查服务是否启动
[root@local-node-1 ~]# ps -ef|grep ceph-mdsceph        2729       1  0 17:32 ?        00:00:00 /usr/bin/ceph-mds -f --cluster ceph --id local-node-1 --setuser ceph --setgroup ceph[root@local-node-1 ~]# netstat -lntp|grep ceph-mdstcp        0      0 10.0.0.1:6813           0.0.0.0:*               LISTEN      2729/ceph-mds    

7.检查ceph 集群状态

[root@local-node-1 ~]# ceph -s  cluster:    id:     7bd25f8d-b76f-4ff9-89ec-186287bbeaa5    health: HEALTH_OK  services:    mon: 1 daemons, quorum local-node-1    mgr: ceph-mgr(active)    osd: 3 osds: 3 up, 3 in  data:    pools:   0 pools, 0 pgs    objects: 0  objects, 0 B    usage:   3.0 GiB used, 27 GiB / 30 GiB avail    pgs:     [root@local-node-1 ~]# ceph osd treeID CLASS WEIGHT  TYPE NAME             STATUS REWEIGHT PRI-AFF -1       0.02939 root default                                  -3       0.02939     host local-node-1                          0   hdd 0.00980         osd.0             up  1.00000 1.00000  1   hdd 0.00980         osd.1             up  1.00000 1.00000  2   hdd 0.00980         osd.2             up  1.00000 1.00000 

二. 创建ceph filesystem

1. 创建pools

CephFS至少需要两个RADOS pool,一个存储数据,另一个存储元数据,当配置这些pool时,我们需要考虑两个问题:

  • 对元数据池使用更高的复制级别,因为此池中的任何数据丢失都可能导致整个文件系统无法访问。
  • 使用较低延迟的存储(如SSD)作为元数据池,因为这将直接影响客户端上文件系统操作的延迟。

使用如下命令创建这两个pool:

ceph osd pool create cephfs_data ceph osd pool create cephfs_metadata EG:[root@local-node-1 ~]# ceph osd pool create cephfs_data 64[root@local-node-1 ~]# ceph osd pool create cephfs_metadata 64
2. 启用cephfs文件系统
[root@local-node-1 ~]# ceph fs new cephfs cephfs_metadata cephfs_datanew fs with metadata pool 2 and data pool 1

查看文件系统状态:

[root@local-node-1 ~]# ceph fs lsname: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ][root@local-node-1 ~]# ceph mds statcephfs-1/1/1 up  {0=local-node-1=up:active}

如果在系统中创建了多个Ceph filesystem,可以通过使用 ceph fs set-default 设置默认的挂载盘,而不必指定具体要挂载哪个文件系统。

3. 挂载cephfs

==使用ceph-fuse挂载==

这里演示将cephfs挂载到node-4(10.0.0.4)上,先安装ceph-fuse客户端:

yum install ceph-fuse -y --disablerepo=epel  # 非ceph集群中的主机需要开启epel安装依赖包

如果要挂载的客户机不是ceph集群中的成员,需要将ceph集群中的密钥和配置文件拷贝到/etc/ceph目录:

[root@node-4 ~]# mkdir /etc/ceph[root@local-node-2 ~]# scp /etc/ceph/ceph.conf 10.0.0.4:/etc/ceph/[root@local-node-2 ~]# scp /etc/ceph/ceph.client.admin.keyring 10.0.0.4:/etc/ceph/

挂载cephfs:

ceph-fuse -m 10.0.0.2:6789 /mnt/cephfs

查看挂载配置:

# df -h |grep cephfsceph-fuse        26G     0   26G   0% /mnt/cephfs

通过测试可以发现,可以在任何ceph集群节点上挂载,共享文件:

# 指定的mon必须是正常状态,如果不是active或standby则不能挂载ceph-fuse -m 10.0.0.3:6789 /mnt/cephfs[root@local-node-2 cephfs]# ceph -s  cluster:    id:     7bd25f8d-b76f-4ff9-89ec-186287bbeaa5    health: HEALTH_WARN            1/3 mons down, quorum local-node-2,local-node-3  services:    mon: 3 daemons, quorum local-node-2,local-node-3, out of quorum: local-node-1    mgr: ceph-mgr(active)    mds: cephfs-1/1/1 up  {0=local-node-1=up:active}    osd: 9 osds: 9 up, 9 in  data:    pools:   2 pools, 128 pgs    objects: 24  objects, 11 KiB    usage:   9.1 GiB used, 81 GiB / 90 GiB avail    pgs:     128 active+clean

==使用内核自带驱动挂载==

使用内核驱动,对于系统内核版本有一定的要求,如果使用Ceph最新的TUNABLES(可调参数)jewel时,官方建议是4.14或者4.9内核,如果是低于4.5版本的内核则会出现挂载错误:

 local-node-1 kernel: libceph: mon0 10.0.0.2:6789 feature set mismatch, my 107b84a842aca < server's 40107b84a842aca, missing 400000000000000 local-node-1 kernel: libceph: mon0 10.0.0.2:6789 missing required protocol features

更多内核版本支持信息可以参考官方文档

如果是这种情况建议使用ceph-fuse,当然也可以通过以下命令修改为低版本crush tunables(默认default,实际是jewel):

ceph osd crush tunables hammer# ceph osd crush show-tunables{    "choose_local_tries": 0,    "choose_local_fallback_tries": 0,    "choose_total_tries": 50,    "chooseleaf_descend_once": 1,    "chooseleaf_vary_r": 1,    "chooseleaf_stable": 0,    "straw_calc_version": 1,    "allowed_bucket_algs": 54,    "profile": "hammer",    "optimal_tunables": 0,    "legacy_tunables": 0,    "minimum_required_version": "hammer",    "require_feature_tunables": 1,    "require_feature_tunables2": 1,    "has_v2_rules": 0,    "require_feature_tunables3": 1,    "has_v3_rules": 0,    "has_v4_buckets": 1,    "require_feature_tunables5": 0,    "has_v5_rules": 0}

hammer 支持4.1或更高版本内核。

使用以下两种方式挂载:

# 方式一:[root@local-node-1 ~]# mount -t ceph 10.0.0.2:6789:/ /mnt -o name=admin,secret=AQDo1aVcQ+Z0BRAAENyooUgFgokkjw9hBUOseg==#方式二:[root@local-node-1 ~]# mount -t ceph 10.0.0.2:6789:/ /mnt -o name=admin,secretfile=/tmp/keyring   # keyring只包含密钥,不包含其它任何参数

如果挂载失败,需要检查mon和mds服务是否正常。

三. 移除Ceph FS

  1. 关闭mds服务:
# ceph mds statcephfs-1/1/1 up  {0=local-node-1=up:creating}ceph mds fail local-node-1 # 或者使用systemctl stop ceph-mds@local-node-1
  1. 删除CephFS
# 列出当前的CephFSceph fs ls# 删除CephFSceph fs rm cephfs --yes-i-really-mean-it # ceph fs lsNo filesystems enabled
  1. 删除pool
# ceph osd lspools3 cephfs_data4 cephfs_metadataceph osd pool delete cephfs_data cephfs_data --yes-i-really-really-mean-itceph osd pool delete cephfs_metadata cephfs_metadata --yes-i-really-really-mean-it
  1. 确认删除后的状态
# ceph -s  cluster:    id:     7bd25f8d-b76f-4ff9-89ec-186287bbeaa5    health: HEALTH_OK  services:    mon: 1 daemons, quorum local-node-1    mgr: ceph-mgr(active)    osd: 3 osds: 3 up, 3 in  data:    pools:   0 pools, 0 pgs    objects: 0  objects, 0 B    usage:   3.0 GiB used, 27 GiB / 30 GiB avail    pgs:     
0