本文发布于Cylon的收藏册,转载请著名原文链接~


环境配置

Ceph 是一个开源去中心化存储平台,专为满足现代存储需求而设计。 Ceph可扩展至 EB 级,并且设计为无单点故障,使其成为需要高度可用的灵活存储的应用程序的理想选择。

下图显示了具有 Ceph 存储的示例 3 节点集群的布局。 两个网络接口可用于增加带宽和冗余,这有助于保持足够的带宽来满足存储要求,而不影响客户端应用程序。

image-20230910161024448

图:Ceph存储集群
Source:https://www.jamescoyle.net/how-to/1244-create-a-3-node-ceph-storage-cluster

图中架构表示了一个无单点故障的 3 节点 Ceph 集群,以提供高度冗余的存储。 每个节点都配置了两个磁盘; 一台运行 Linux 操作系统,另一台将用于 Ceph 存储。 下面的输出显示了可用的存储空间,每个主机上的存储空间完全相同。 /dev/sda 是包含操作系统安装的根分区, /dev/sdb 是一个未触及的分区,将用于部署 Ceph 集群,对应的硬件信息如下表所示。

主机名 public IP cluster IP 数据盘
ceph-nautilus01 10.0.0.50 10.0.0.50 /dev/sda
/dev/sdb
ceph-nautilus02 10.0.0.51 10.0.0.51 /dev/sda
/dev/sdb
ceph-nautilus03 10.0.0.52 10.0.0.52 /dev/sda
/dev/sdb
ceph-control 10.0.0.49 10.0.0.49 /dev/sda

部署工具

ceph-deploy 工具是在 “管理节点” (ceph-admin) 上的目录中运行。

  • ceph-deploy 部署ceph的原生工具 (最后支持版本 octopus 15)
    • 借助于ssh来管理目标主机,sudo,和一些 python 模块来完成 ceph 集群的部署和后期维护。
    • 一般讲 ceph-deploy 放置在专用节点,作为 ceph 集群的管理节点。
    • ceph-deploy 不是一个通用的部署工具,只是用于管理Ceph集群的,专门为用户快速部署并运行一个Ceph集群,这些功能和特性不依赖于其他的编排工具。
    • 它无法处理客户端的配置,因此在部署客户端时就无法使用此工具。

下图是来自 ceph 官网的 ceph-deploy 部署工具的一个模型图

image-20230910164114089

图:ceph-deploy部署模型
Source:https://docs.ceph.com/en/nautilus/start/quick-start-preflight/

CEPH 集群拓扑及网络

在Ceph内部存在两种流量:

  • Ceph内部各节点之间用来处理OSD之间数据复制,因此为了避免正常向客户端提供服务请求,
  • public network 必须,所有客户端都应位于public network
  • cluster network 可选

ceph-deploy 先决条件配置

将 Ceph 安装仓库添加到 “管理节点”。然后,安装 ceph-deploy

Debian/Ubuntu

  1. 添加 release key
wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -
  1. 将 Ceph deb添加到您的存储库。并替换为安装的 Ceph 版本(例如 nautilus)。例如:
export CEPH_VERSION=nautilus
echo deb https://download.ceph.com/debian-${CEPH_VERSION}/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list
  1. 更新仓库并安装 ceph-deploy
sudo apt update
sudo apt install ceph-deploy

RHEL/CentOS

  1. 安装 epel 源,这里方式很多可以任意选择 “你所在地区可用的 epel 源
sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
  1. 添加 Ceph rpm 仓库
export CEPH_VERSION=nautilus
cat << EOF > /etc/yum.repos.d/ceph.repo
[ceph]
name=Ceph packages for $basearch
baseurl=https://download.ceph.com/rpm-${CEPH_VERSION}/el7/\$basearch
enabled=1
priority=2
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc

[ceph-noarch]
name=Ceph noarch packages
baseurl=https://download.ceph.com/rpm-${CEPH_VERSION}/el7/noarch
enabled=1
priority=2
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc

[ceph-source]
name=Ceph source packages
baseurl=https://download.ceph.com/rpm-${CEPH_VERSION}/el7/SRPMS
enabled=0
priority=2
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc
EOF
  1. 更新缓存并安装 ceph-deploy
sudo yum clean all && sudo yum makecache
sudo yum install ceph-deploy

安装集群的预先条件 - CEPH NODE

  • 管理节点必须拥有所有 ceph node 的无密码登录权限
  • ntp
  • 开放端口
  • 关闭 selinux

创建用于 ceph-deploy 的用户

ceph-deploy 实用程序必须以具有无密码 sudo 权限的用户身份登录 Ceph node,因为它需要在不提示输入密码的情况下安装软件和配置文件。

最新版本的 ceph-deploy 支持 –username 选项,因此您可以指定任何具有无密码的 sudo 用户(包括 root,但不推荐)。要使用 ceph-deploy –username {username},“所指定的用户必须具有对 Ceph Node 的无密码 SSH 访问权限”,因为 ceph-deploy 不会提示您输入密码。

Ceph 官方建议在集群中的所有 Ceph 节点上为 ceph-deploy 创建特定用户。==请不要使用 “ceph” 作为用户名==。整个集群中的统一用户名可能会提高易用性(不是必需的),但您应该避免使用明显的用户名,因为黑客通常会通过暴力破解来使用它们(例如 root, admin, 或使用项目名称)。以下过程将 {username} 替换为您定义的用户名,描述了如何使用无密码 sudo 创建用户。

  1. 在每个 Ceph Node 创建一个用户
export CEPH_USERNAME=ceph
sudo useradd -d /home/${CEPH_USERNAME} -m ${CEPH_USERNAME}
echo 1|sudo passwd ${CEPH_USERNAME} --stdin
  1. 对于添加到每个 Ceph Node 的新用户,请确保该用户具有 sudo 权限。
echo "${CEPH_USERNAME} ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/${CEPH_USERNAME}
sudo chmod 0440 /etc/sudoers.d/${CEPH_USERNAME}

启用 SSH 无密码登录

由于 ceph-deploy 不会提示输入密码,因此必须在管理节点上生成 SSH 密钥并将公钥分发到每个 Ceph 节点。 ceph-deploy 将尝试为初始 monitor 生成 SSH 密钥。

  1. 生成 ssh key,不要使用 sudo 或者是 root 用户
$ ssh-keygen

Generating public/private key pair.
Enter file in which to save the key (/ceph-admin/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /ceph-admin/.ssh/id_rsa.
Your public key has been saved in /ceph-admin/.ssh/id_rsa.pub.
  1. 将 SSH 密钥复制到每个 Ceph Node,将变量 “CEPH_USERNAME” 替换为创建 Ceph 部署用户创建的用户名。

通常情况下,主机名需要解析的,如果没有需要配置在 /etc/hosts 内

ssh-copy-id ${CEPH_USERNAME}@ceph-nautilus01
ssh-copy-id ${CEPH_USERNAME}@ceph-nautilus02
ssh-copy-id ${CEPH_USERNAME}@ceph-nautilus03
# 如果是 root 用户执行下面命令
sudo -u ${CEPH_USERNAME} ssh-copy-id ${CEPH_USERNAME}@ceph-nautilus01
sudo -u ${CEPH_USERNAME} ssh-copy-id ${CEPH_USERNAME}@ceph-nautilus02
sudo -u ${CEPH_USERNAME} ssh-copy-id ${CEPH_USERNAME}@ceph-nautilus03
  1. 添加主机名到 /etc/hosts (可选)
$ tee >> /etc/hosts << EOF
10.0.0.50 ceph-nautilus01
10.0.0.51 ceph-nautilus02
10.0.0.52 ceph-nautilus03
EOF

网卡开机自启动

Ceph OSD Peer 并通过网络向 Ceph monitor 报告。如果默认情况下网络处于关闭状态,则在启用网络之前,Ceph 集群无法在启动期间联机。

在一些 Linux 发行版下(例如 CentOS)上的默认配置默认关闭网络接口。确保在启动过程中网络接口打开,以便 Ceph 守护进程可以通过网络进行通信。(如果你的系统是新装的)

开放所需端口

Ceph Monitor (ceph-mon) 默认使用端口 6789 进行通信。默认情况下,Ceph OSD 在 6800:7300 端口范围内进行通信。详细信息请参见网络配置参考 [1]

确保关闭 SELinux

在 CentOS 和 RHEL 上,SELinux 默认设置为“Enforcing”。为了简化您的安装,我们建议将 SELinux 设置为 Permissive 或完全禁用,这是 Ceph 官方给出的建议

sudo setenforce 0

要持久配置 SELinux(如果 SELinux 存在问题,则建议这样做),请修改 /etc/selinux/config 中的配置文件。

Preferences

确保您的 “包管理器” 已安装并启用 “priority/preferences”。在 CentOS 上,您可能需要安装 EPEL。在 RHEL 上,您可能需要启用可选存储库。

sudo yum install yum-plugin-priorities

例如,在 RHEL 7 服务器上,执行以下命令安装 yum-plugin-priorities 并启用 rhel-7-server-optional-rpms 存储库:

sudo yum install yum-plugin-priorities --enablerepo=rhel-7-server-optional-rpms

初始化新的 CEPH 集群

在这里我们创建一个包含一个 Ceph Monitor (ceph-mon) 和 三个 Ceph OSD (osd daemon) 的 Ceph 集群。通常使用 ceph-deploy 部署集群,最佳方式是在 “管理节点” 上创建一个目录,用于维护 ceph-deploy 为集群生成的配置文件和密钥。

mkdir ceph-cluster && cd ceph-cluster

需要注意的是,ceph-deploy 将文件输出到当前目录。执行 ceph-deploy 时需要确保位于此目录中。

还需要注意的是,需要使用 “SSH 免密的那个用户

确保集群节点清洁性

如果在任何时候遇到问题后并想重新开始,可以执行下列命令清除所有安装包和配置:

ceph-deploy purge {ceph-node} [{ceph-node}]
ceph-deploy purgedata {ceph-node} [{ceph-node}]
ceph-deploy forgetkeys
rm ceph.*

需要注意的是,执行 ceph-deploy,必须执行第四条命令 rm ceph.*

创建集群

创建集群会生成配置文件保存到当前工作目录中,使用 ceph-deploy 执行命令新建一个集群。

  1. 创建集群
# 语法
ceph-deploy new {initial-monitor-node(s)}
# 示例, 指定节点的 hostname, fqdn or hostname:fqdn
ceph-deploy new ceph-nautilus01 ceph-nautilus02 ceph-nautilus03

ceph-deploy 会输出到当前文件夹下的文件包含,Ceph 配置文件 (ceph.conf)、ceph-mon 的 keyring 文件 (ceph.mon.keyring) 以及新集群的日志文件。

  1. 如果主机存在多个网络接口(即公共网络和集群网络是分开的),需要在 Ceph 配置文件的 [global] 部分下添加公共网络设置。
public network = {ip-address}/{bits}
# 示例
public network = 10.1.2.0/24

或者通过命令指定两个网络的 IP

ceph-deploy new ceph-nautilus01 ceph-nautilus02 ceph-nautilus03 \
	--cluster-network 172.18.0.0/24 \
	--public-network 10.0.0.0/24
  1. 如果在 IPv6 环境中部署,请将以下内容添加到本地目录中的 ceph.conf 中:
echo ms bind ipv6 = true >> ceph.conf
  1. 现在可以安装 ceph 软件包了,执行下列命令
ceph-deploy install {ceph-node} [...]
# 示例
ceph-deploy install ceph-nautilus01 ceph-nautilus02 ceph-nautilus03

在命令执行后,ceph-deploy 将在每个节点上安装 Ceph,所以要确保对应节点需要提前安装好了 ceph yum 仓库文件

也可以通过 --release 指定版本进行安装

ceph-deploy install --release=nautilus ceph-nautilus01 ceph-nautilus02 ceph-nautilus03
  1. 部署 ceph-mon 并收集密钥:
ceph-deploy mon create-initial

​ 通常完成步骤5后,本地工作目录应具有以下 keyring 文件:

  • ceph.client.admin.keyring
  • ceph.bootstrap-mgr.keyring
  • ceph.bootstrap-osd.keyring
  • ceph.bootstrap-mds.keyring
  • ceph.bootstrap-rgw.keyring
  • ceph.bootstrap-rbd.keyring
  • ceph.bootstrap-rbd-mirror.keyring
  1. 使用 ceph-deploy 将配置文件和管理密钥复制到管理节点和 Ceph Node,以便可以在这些节点上使用 ceph CLI 时而无需在每次执行命令时指定 ceph-mon 地址和 keyring文件 (ceph.client.admin.keyring)。
ceph-deploy admin {ceph-node(s)}
# 示例
ceph-deploy admin ceph-nautilus01 ceph-nautilus02 ceph-nautilus03
  1. 部署 CEPH MANAGER (ceph-mgr),此步骤仅需要 ==luminous+== 以上版本
ceph-deploy mgr create {ceph-node(s)}  *Required only for luminous+ builds, i.e >= 12.x builds*
# 示例
ceph-deploy mgr create ceph-nautilus01
  1. 到步骤8时,只差 OSD 就完成了 RADOS 集群的安装,下面为集群添加 OSD
ceph-deploy osd create --data {device} {ceph-node}
# 示例
ceph-deploy osd create --data /dev/sdb ceph-nautilus01
ceph-deploy osd create --data /dev/sdb ceph-nautilus02
ceph-deploy osd create --data /dev/sdb ceph-nautilus03

Note:如果要在 LVM 卷上创建 OSD,则 –data 的参数必须是 {volume_group}/{lv_name},而不是卷的块设备的路径

  1. 检查集群状态
ssh node1 sudo ceph health
# or 
ceph -s

Troubleshooting

No module named pkg_resources

$ ceph-deploy new ceph-nautilus01 ceph-nautilus02 ceph-nautilus03
Traceback (most recent call last):
  File "/usr/bin/ceph-deploy", line 18, in <module>
    from ceph_deploy.cli import main
  File "/usr/lib/python2.7/site-packages/ceph_deploy/cli.py", line 1, in <module>
    import pkg_resources
ImportError: No module named pkg_resources

解决:This issue can be solved by installing yum install -y python-setuptools.

RuntimeError: NoSectionError: No section: ‘ceph’

[2019-09-11 05:31:42,640][ceph-nautilus01][DEBUG ]   Installing : ceph-release-1-1.el7.noarch                                  1/1 
[2019-09-11 05:31:42,640][ceph-nautilus01][DEBUG ] warning: /etc/yum.repos.d/ceph.repo created as /etc/yum.repos.d/ceph.repo.rpmnew
[2019-09-11 05:31:42,759][ceph-nautilus01][DEBUG ]   Verifying  : ceph-release-1-1.el7.noarch                                  1/1 
[2019-09-11 05:31:42,759][ceph-nautilus01][DEBUG ] 
[2019-09-11 05:31:42,759][ceph-nautilus01][DEBUG ] Installed:
[2019-09-11 05:31:42,759][ceph-nautilus01][DEBUG ]   ceph-release.noarch 0:1-1.el7                                                 
[2019-09-11 05:31:42,759][ceph-nautilus01][DEBUG ] 
[2019-09-11 05:31:42,759][ceph-nautilus01][DEBUG ] Complete!
[2019-09-11 05:31:42,759][ceph-nautilus01][WARNING] ensuring that /etc/yum.repos.d/ceph.repo contains a high priority
[2019-09-11 05:31:42,767][ceph_deploy][ERROR ] RuntimeError: NoSectionError: No section: 'ceph'

解决:CEPH Node 上不要安装 yum 仓库,ceph-deploy 会自动安装,如果存在新的文件会被命名为 ceph.repo.rpmnew

向 RADOS 集群添加 OSD

列出并擦净磁盘

ceph-deploy disk 命令可以检查并列出OSD节点上所有可用的磁盘相关的信息。

ceph-deploy disk list stor01 stor02 stor03 stor04

如果遇到 Running command: sudo fdisk -l 无输出,原因为系统问中文,修改 en_us.utf8 后可正常显示。

$ ceph-deploy disk list stor01
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/cephadmin/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (2.0.1): /bin/ceph-deploy disk list stor01
[ceph_deploy.cli][INFO  ] ceph-deploy options:
[ceph_deploy.cli][INFO  ]  username                      : None
[ceph_deploy.cli][INFO  ]  verbose                       : False
[ceph_deploy.cli][INFO  ]  debug                         : False
[ceph_deploy.cli][INFO  ]  overwrite_conf                : False
[ceph_deploy.cli][INFO  ]  subcommand                    : list
[ceph_deploy.cli][INFO  ]  quiet                         : False
[ceph_deploy.cli][INFO  ]  cd_conf                       : <ceph_deploy.conf.cephdeploy.Conf instance at 0x7fab61201488>
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  host                          : ['stor01']
[ceph_deploy.cli][INFO  ]  func                          : <function disk at 0x7fab6144e9b0>
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  default_release               : False
[stor01][DEBUG ] connection detected need for sudo
[stor01][DEBUG ] connected to host: stor01 
[stor01][DEBUG ] detect platform information from remote host
[stor01][DEBUG ] detect machine type
[stor01][DEBUG ] find the location of an executable
[stor01][INFO  ] Running command: sudo fdisk -l

而后,在管理节点上使用 ceph-deploy 命令 擦除计划专用于OSD磁盘上的所有分区表和数据以便用于OSD,命令格式为ceph-deploy disk zab {osd-server-name} {disk-name},需要注意的是此步会清除目标设备上的所有数据。

擦除一个磁盘

ceph-deploy disk zap
ceph-deploy disk zap {ceph_node} /dev/sdb

Note:如果是未格式化的块设备不需要额外擦除,ceph 集群要求 ceph 管理的块设备必须是未格式化的,如果格式化过的需要擦除

ceph-deploy osd –help

  • block-db 可以理解为RocksDB数据库,元数据存放的位置
  • block-wal 数据库的数据日志存放的位置
  • filestore 如果使用filestore,明确指定选项--filestore 指明数据放哪,并指明日志放哪(日志指的是文件系统日志)ceph-deploy osd create {node} --filestore --data /path/to/data --journal /path/to/journal
  • bluestore自身没有文件系统,故无需日志,数据库需要日志

扩展集群

添加 OSD

当一个 “基本集群” 部署好并运行,下一步就是扩展集群。通常会扩展集群,扩展集群存在两种类型,集群组件与OSD,这里主要围绕 扩展 OSD

早期版本的ceph-deploy命令支持在将添加OSD的过程分为两个步骤:准备OSD,激活OSD,但新版本中,此种操作方式已被废除,添加OSD的步骤只能由命令 ceph-deploy osd create create {node} –data {data-disk} ,一次完成,默认存储引擎为 bluestore

ceph-deploy osd create {node} --data /dev/sdb 
ceph-deploy osd create {node} --data /dev/sdc

而后可使用 ceph-deploy osd list {node} 命令列出指定节点上的OSD:

移除 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-mean-it

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

[osd.1]
    host = {hostname}

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

  • 于CRUSH运行图中移除设备: ceph osd crush remove {name}
  • 移除OSD的认证key: ceph auth del osd.{osd-num}
  • 移除设备: ceph osd purge {id} –yes-i-really-mean-it

扩展 ceph-mon

Ceph 集群需要至少一个 Ceph Monitor 和一个 Ceph Manager,生产环境中,为了实现高可用,Ceph集群通常运行多个监视器,以免单监视器整个存储集群崩溃。Ceph使用 Paxos 算法,改算法是需要至少需要板书以上的监视器(大于n/2,其中n为总监视器数量),才能形成法定人数,尽管此非必须,奇数个 ceph-mon 往往更好。

使用 ceph-deploy mon add {nodes} 命令可以一次添加一个 ceph-mon 到集群中。

ceph-deploy mon add nautilus02  ## 此处使用短格式名称,长格式名称会报错。
ceph-deploy mon add nautilus03

设置完成后,可以在ceph客户端上查看监视器及法定人数的相关信息:

$ ceph quorum_status --format json-pretty

{
    "election_epoch": 20,
    "quorum": [
        0,
        1,
        2
    ],
    "quorum_names": [
        "stor01",
        "stor02",
        "stor03"
    ],
    "quorum_leader_name": "stor01",
    "monmap": { 
        "epoch": 3,
        "fsid": "69fb9b55-3fb5-42d0-8cf7-239a3b569791",
        "modified": "2019-06-06 21:19:41.274199",
        "created": "2019-06-05 12:35:31.143594",
        "features": {
            "persistent": [
                "kraken",
                "luminous",
                "mimic",
                "osdmap-prune"
            ],
            "optional": []
        },
        "mons": [
            {
                "rank": 0,
                "name": "stor01",
                "addr": "10.0.0.4:6789/0",
                "public_addr": "10.0.0.4:6789/0"
            },
            {
                "rank": 1,
                "name": "stor02",
                "addr": "10.0.0.5:6789/0",
                "public_addr": "10.0.0.5:6789/0"
            },
            {
                "rank": 2,
                "name": "stor03",
                "addr": "10.0.0.6:6789/0",
                "public_addr": "10.0.0.6:6789/0"
            }
        ]
    }
}

扩展 Manager 节点

Ceph Manager (ceph-mgr) 以 Active/Standy 模式运行,部署其他 ceph-mgr 守护进程可确保在 Active 节点的 ceph-mgr 守护进程故障时,其中一个 Standby 实例可以在不中断服务的情况下接管其任务。

mgr 就是无状态的 web 服务,一般来讲两个足够了。

ceph-deploy mgr create {ceph_node}

启动 RGW

RGW (Rados Gateway) 必要组件,仅在需要用到对象存储兼容 “S3” 和 “Swift” 的 RESTful 接口时才需要部署 RGW 实例,相关的命令为ceph-deploy rgw create (gateway-node)

radosgw需要用自用的存储池不能与RBD混合使用,RGW 会在创建时自动初始化出存储池来,RGW 需要有相应服务才能运行起来。

ceph-deploy rgw create nautilus02

添加完成后,ceph -s 命令的 service 一段中会输出相关信息:

$ ceph -s
  cluster:
    id:     69fb9b55-3fb5-42d0-8cf7-239a3b569791
    health: HEALTH_WARN
            application not enabled on 1 pool(s)
 
  services:
    mon: 3 daemons, quorum stor01,stor02,stor03
    mgr: stor01(active), standbys: stor04
    osd: 8 osds: 8 up, 8 in
    rgw: 1 daemon active
 
  data:
    pools:   7 pools, 160 pgs
    objects: 196  objects, 1.5 KiB
    usage:   21 GiB used, 79 GiB / 100 GiB avail
    pgs:     160 active+clean

默认情况下,RGW 实例监听于 TCP 协议的 7480 端口,需要修改,可以通过在运行 RGW 的节点上编辑其主配置文件 ceph.conf 进行修改,相关参数如下所示

[client]
rgw_frontends = "civetweb port=8080"

RGW 会在 RADOWS 集群上生成包括如下存储池的一系列存储池

$  ceph osd pool ls
mypool
rbdpool
testpool
.rgw.root
default.rgw.control
default.rgw.meta
default.rgw.log

RGW 提供的是兼容 S3 和 Swift 的 REST 接口,客户端通过 HTTP 进行交互,完成数据的增删改查等管理操作。

启用文件系统 (CephFS) 接口

CephFS 需要至少运行一个 Metadata (MDS) 守护进程 (ceph-mds),此进程管理与 CephFS 上存储的文件相关的元数据,并协调对 Ceph存储集群的访问。因此,若要使用 CephFS ,需要在存储集群中至少部署一个 MDS 实例,增加 MDS 可以使用命令 ceph-deploy mds create {ceph-node} 完成

还需主义的是,每个 CephFS 都至少需要两个存储池,一个用来存放元数据 (Metadata Pool),一个存放数据 (Data Pool)。

$ ceph-deploy mds create stor01

查看 MDS 的相关状态可以发现,刚添加的 MDS 处于 standby 状态

在运行起来还不够,还没为其创建存储池,故其不能正常工作,处于standby模式。

$ ceph mds stat
, 1 up:standby

使用 CephFS 之前需要事先于集群中创建一个文件系统,并为其分别指定 “元数据” 和 “数据” 相关的存储池,下面创建一个名为 cephfs 的文件系统用于测试,使用cephfs-metadata为数据存储池,使用cephfs-data为数据存储池。

# 创建存储池
ceph osd pool create cephfs-metadata 64
ceph osd pool create cephfs-data 64
# 创建 cephfs
## 语法
ceph fs new {fs_name} {meatadata-pool} {data-pool}
## 示例
ceph fs new cephfs cephfs-metadata cephfs-data
  • ceph fs add_data_pool: 额外添加数据池
  • ceph fs new: 创建新文件系统
  • ceph fs status: 查看CephFS 文件系统状态
$ ceph fs status cephfs
cephfs - 0 clients
======
+------+--------+--------+---------------+-------+-------+
| Rank | State  |  MDS   |    Activity   |  dns  |  inos |
+------+--------+--------+---------------+-------+-------+
|  0   | active | stor02 | Reqs:    0 /s |   10  |   13  |
+------+--------+--------+---------------+-------+-------+
+-----------------+----------+-------+-------+
|       Pool      |   type   |  used | avail |
+-----------------+----------+-------+-------+
| cephfs-metadata | metadata | 2286  | 21.7G |
|   cephfs-data   |   data   |    0  | 21.7G |
+-----------------+----------+-------+-------+
+-------------+
| Standby MDS |
+-------------+
+-------------+
MDS version: ceph version 13.2.6 (7b695f835b03642f85998b2ae7b6dd093d9fbce4) mimic (stable)

Reference

[1] Network Configuration Reference

[2] ceph_deploy RuntimeError: NoSectionError: No section: ‘ceph’

本文发布于Cylon的收藏册,转载请著名原文链接~

链接:https://www.oomkill.com/2019/11/02-2-install-ceph-with-ceph-deploy/

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」 许可协议进行许可。