B.2. 手动安装 Red Hat Ceph Storage

重要

红帽不支持或测试手动部署的集群的升级。因此,红帽建议使用 Ansible 来使用 Red Hat Ceph Storage 4 部署新集群。详情请查看 第 5 章 使用 Ansible 安装 Red Hat Ceph Storage

您可以使用 Yum 等命令行实用程序升级手动部署的集群,但红帽不支持或测试这种方法。

所有 Ceph 集群需要至少一个 monitor,并且至少与集群中存储的对象副本数量相同。红帽建议在生产环境中使用三个监视器,至少三个对象存储设备 (OSD)。

启动初始监控器是部署 Ceph 存储集群的第一步。Ceph 监控部署还为整个集群设置重要标准,例如:

  • 池的副本数
  • 每个 OSD 的 PG 数量
  • 心跳间隔
  • 任何身份验证要求

默认情况下会设置其中大多数值,因此为生产环境设置集群时了解这些值非常有用。

使用命令行界面安装 Ceph 存储集群涉及以下步骤:

监控 Bootstrapping

引导 monitor 和扩展 Ceph 存储集群需要以下数据:

唯一标识符
文件系统标识符 (fsid) 是集群的唯一标识符。fsid 最初在 Ceph 存储集群主要用于 Ceph 文件系统时使用。Ceph 现在也支持原生接口、块设备和对象存储网关接口,因此 fsid 可能会有一些问题。
Monitor 名称
集群中的每一个 Monitor 实例都有唯一的名称。在常见做法中,Ceph monitor 名称是节点名称。红帽建议每个节点一个 Ceph 监控器,而不与 Ceph 监控守护进程共同定位 Ceph OSD 守护进程。要获得较短的节点名称,请使用 hostname -s 命令。
Monitor Map

启动初始 Monitor 要求您生成 Monitor Map。Monitor map 需要:

  • 文件系统识别符 (fsid)
  • 使用集群名称或 ceph 的默认集群名称
  • 至少一个主机名及其 IP 地址。
监控密钥环
Monitor 使用 secret 密钥相互通信。您必须使用 Monitor secret 密钥生成密钥环,并在引导初始 Monitor 时提供密钥环。
管理员密钥环
要使用 ceph 命令行界面实用程序,请创建 client.admin 用户并生成其密钥环。此外,您必须将 client.admin 用户添加到 monitor 密钥环中。

强制要求不表示创建 Ceph 配置文件。但是,作为一种最佳实践,红帽建议创建一个 Ceph 配置文件并使用 fsid 填充它的数据,mon initial membersmon host 是最小设置。

您还可以在运行时获取和设置所有 Monitor 设置。但是,Ceph 配置文件可能仅包含覆盖默认值的设置。当您向 Ceph 配置文件添加设置时,这些设置将覆盖默认设置。在 Ceph 配置文件中维护这些设置可以更加轻松地维护集群。

要引导初始 Monitor,请执行以下步骤:

  1. 启用 Red Hat Ceph Storage 4 Monitor 存储库:

    [root@monitor ~]# subscription-manager repos --enable=rhceph-4-mon-for-rhel-8-x86_64-rpms
  2. 在初始监控节点上,以 root 用户身份安装 ceph-mon 软件包:

    # yum install ceph-mon
  3. root 用户身份,在 /etc/ceph/ 目录中创建 Ceph 配置文件。

    # touch /etc/ceph/ceph.conf
  4. root 用户身份,为集群生成唯一标识符,并将唯一标识符添加到 Ceph 配置文件的 [global] 部分:

    # echo "[global]" > /etc/ceph/ceph.conf
    # echo "fsid = `uuidgen`" >> /etc/ceph/ceph.conf
  5. 查看当前的 Ceph 配置文件:

    $ cat /etc/ceph/ceph.conf
    [global]
    fsid = a7f64266-0894-4f1e-a635-d0aeaca0e993
  6. root 用户身份,将初始 monitor 添加到 Ceph 配置文件:

    语法

    # echo "mon initial members = <monitor_host_name>[,<monitor_host_name>]" >> /etc/ceph/ceph.conf

    示例

    # echo "mon initial members = node1" >> /etc/ceph/ceph.conf

  7. root 用户身份,将初始 monitor 的 IP 地址添加到 Ceph 配置文件:

    语法

    # echo "mon host = <ip-address>[,<ip-address>]" >> /etc/ceph/ceph.conf

    示例

    # echo "mon host = 192.168.0.120" >> /etc/ceph/ceph.conf

    注意

    要使用 IPv6 地址,请将 ms bind ipv6 选项设置为 true。详情请参阅 Red Hat Ceph Storage 4 配置指南中的 绑定"一节。

  8. root 用户身份,为集群创建密钥环并生成 monitor secret 密钥:

    # ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'
    creating /tmp/ceph.mon.keyring
  9. root 身份生成管理员密钥环,生成 ceph.client.admin.keyring 用户,并将该用户添加到密钥环中:

    语法

    # ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --set-uid=0 --cap mon '<capabilites>' --cap osd '<capabilites>' --cap mds '<capabilites>'

    示例

    # ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --set-uid=0 --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow'
    creating /etc/ceph/ceph.client.admin.keyring

  10. root 用户身份,将 ceph.client.admin.keyring 密钥添加到 ceph.mon.keyring 中:

    # ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
    importing contents of /etc/ceph/ceph.client.admin.keyring into /tmp/ceph.mon.keyring
  11. 生成 Monitor map。使用初始 monitor 的节点名称、IP 地址和 fsid 指定,并将其保存为 /tmp/monmap

    语法

    $ monmaptool --create --add <monitor_host_name> <ip-address> --fsid <uuid> /tmp/monmap

    示例

    $ monmaptool --create --add node1 192.168.0.120 --fsid a7f64266-0894-4f1e-a635-d0aeaca0e993 /tmp/monmap
    monmaptool: monmap file /tmp/monmap
    monmaptool: set fsid to a7f64266-0894-4f1e-a635-d0aeaca0e993
    monmaptool: writing epoch 0 to /tmp/monmap (1 monitors)

  12. 作为初始监控节点上的 root 用户,创建一个默认数据目录:

    语法

    # mkdir /var/lib/ceph/mon/ceph-<monitor_host_name>

    示例

    # mkdir /var/lib/ceph/mon/ceph-node1

  13. root 用户身份,使用 monitor 映射和密钥环填充初始 monitor 守护进程:

    语法

    # ceph-mon --mkfs -i <monitor_host_name> --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring

    示例

    # ceph-mon --mkfs -i node1 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
    ceph-mon: set fsid to a7f64266-0894-4f1e-a635-d0aeaca0e993
    ceph-mon: created monfs at /var/lib/ceph/mon/ceph-node1 for mon.node1

  14. 查看当前的 Ceph 配置文件:

    # cat /etc/ceph/ceph.conf
    [global]
    fsid = a7f64266-0894-4f1e-a635-d0aeaca0e993
    mon_initial_members = node1
    mon_host = 192.168.0.120

    有关各种 Ceph 配置设置的更多详细信息,请参见 Red Hat Ceph Storage 4 配置指南 。以下 Ceph 配置文件示例列出了一些最常见的配置设置:

    示例

    [global]
    fsid = <cluster-id>
    mon initial members = <monitor_host_name>[, <monitor_host_name>]
    mon host = <ip-address>[, <ip-address>]
    public network = <network>[, <network>]
    cluster network = <network>[, <network>]
    auth cluster required = cephx
    auth service required = cephx
    auth client required = cephx
    osd journal size = <n>
    osd pool default size = <n>  # Write an object n times.
    osd pool default min size = <n> # Allow writing n copy in a degraded state.
    osd pool default pg num = <n>
    osd pool default pgp num = <n>
    osd crush chooseleaf type = <n>

  15. root 用户身份,创建 done 文件:

    语法

    # touch /var/lib/ceph/mon/ceph-<monitor_host_name>/done

    示例

    # touch /var/lib/ceph/mon/ceph-node1/done

  16. root 用户身份,更新新创建的目录和文件的所有者和组权限:

    语法

    # chown -R <owner>:<group> <path_to_directory>

    示例

    # chown -R ceph:ceph /var/lib/ceph/mon
    # chown -R ceph:ceph /var/log/ceph
    # chown -R ceph:ceph /var/run/ceph
    # chown ceph:ceph /etc/ceph/ceph.client.admin.keyring
    # chown ceph:ceph /etc/ceph/ceph.conf
    # chown ceph:ceph /etc/ceph/rbdmap

    注意

    如果 Ceph 监控节点与 OpenStack 控制器节点在一起,则 Glance 和 Cinder 密钥环文件必须分别归 glancecinder 所有。例如:

    # ls -l /etc/ceph/
    ...
    -rw-------.  1 glance glance      64 <date> ceph.client.glance.keyring
    -rw-------.  1 cinder cinder      64 <date> ceph.client.cinder.keyring
    ...
  17. root 用户身份,在初始监控节点上启动并启用 ceph-mon 进程:

    语法

    # systemctl enable ceph-mon.target
    # systemctl enable ceph-mon@<monitor_host_name>
    # systemctl start ceph-mon@<monitor_host_name>

    示例

    # systemctl enable ceph-mon.target
    # systemctl enable ceph-mon@node1
    # systemctl start ceph-mon@node1

  18. root 用户身份,验证 monitor 守护进程是否正在运行:

    语法

    # systemctl status ceph-mon@<monitor_host_name>

    示例

    # systemctl status ceph-mon@node1
    ● ceph-mon@node1.service - Ceph cluster monitor daemon
       Loaded: loaded (/usr/lib/systemd/system/ceph-mon@.service; enabled; vendor preset: disabled)
       Active: active (running) since Wed 2018-06-27 11:31:30 PDT; 5min ago
     Main PID: 1017 (ceph-mon)
       CGroup: /system.slice/system-ceph\x2dmon.slice/ceph-mon@node1.service
               └─1017 /usr/bin/ceph-mon -f --cluster ceph --id node1 --setuser ceph --setgroup ceph
    
    Jun 27 11:31:30 node1 systemd[1]: Started Ceph cluster monitor daemon.
    Jun 27 11:31:30 node1 systemd[1]: Starting Ceph cluster monitor daemon...

要将更多 Red Hat Ceph Storage Monitor 添加到存储集群中,请参阅 Red Hat Ceph Storage 4 管理指南中的添加 Monitor 部分。

OSD Bootstrapping

运行初始监控器后,您可以开始添加对象存储设备 (OSD)。直到有足够的 OSD 来处理对象的副本数时,您的集群才会达到 active + clean 状态。

对象的默认副本数为三个。至少需要三个 OSD 节点:但是,如果您只需要一个对象的两个副本,因此仅添加两个 OSD 节点,然后更新 Ceph 配置文件中的 osd pool default sizeosd pool default min size 设置。

如需了解更多详细信息,请参阅 Red Hat Ceph Storage 4 配置指南中的OSD 配置参考一节。

在引导初始监控器后,集群具有默认的 CRUSH map。但是,CRUSH map 没有任何 Ceph OSD 守护进程映射到 Ceph 节点。

要添加 OSD 到集群并更新默认的 CRUSH map,请在每个 OSD 节点上执行以下内容:

  1. 启用 Red Hat Ceph Storage 4 OSD 存储库:

    [root@osd ~]# subscription-manager repos --enable=rhceph-4-osd-for-rhel-8-x86_64-rpms
  2. root 用户身份,在 Ceph OSD 节点上安装 ceph-osd 软件包:

    # yum install ceph-osd
  3. 将 Ceph 配置文件和管理密钥环文件从初始 Monitor 节点复制到 OSD 节点:

    语法

    # scp <user_name>@<monitor_host_name>:<path_on_remote_system> <path_to_local_file>

    示例

    # scp root@node1:/etc/ceph/ceph.conf /etc/ceph
    # scp root@node1:/etc/ceph/ceph.client.admin.keyring /etc/ceph

  4. 为 OSD 生成通用唯一标识符 (UUID):

    $ uuidgen
    b367c360-b364-4b1d-8fc6-09408a9cda7a
  5. root 用户身份,创建 OSD 实例:

    语法

    # ceph osd create <uuid> [<osd_id>]

    示例

    # ceph osd create b367c360-b364-4b1d-8fc6-09408a9cda7a
    0

    注意

    此命令输出后续步骤所需的 OSD 编号标识符。

  6. root 用户身份,为新 OSD 创建默认目录:

    语法

    # mkdir /var/lib/ceph/osd/ceph-<osd_id>

    示例

    # mkdir /var/lib/ceph/osd/ceph-0

  7. root 用户身份,准备好将驱动器用作 OSD,并将它挂载到您刚才创建的目录中。为 Ceph 数据和日志创建一个分区。日志和数据分区可以位于同一磁盘上。这个示例使用 15 GB 磁盘:

    语法

    # parted <path_to_disk> mklabel gpt
    # parted <path_to_disk> mkpart primary 1 10000
    # mkfs -t <fstype> <path_to_partition>
    # mount -o noatime <path_to_partition> /var/lib/ceph/osd/ceph-<osd_id>
    # echo "<path_to_partition>  /var/lib/ceph/osd/ceph-<osd_id>   xfs defaults,noatime 1 2" >> /etc/fstab

    示例

    # parted /dev/sdb mklabel gpt
    # parted /dev/sdb mkpart primary 1 10000
    # parted /dev/sdb mkpart primary 10001 15000
    # mkfs -t xfs /dev/sdb1
    # mount -o noatime /dev/sdb1 /var/lib/ceph/osd/ceph-0
    # echo "/dev/sdb1 /var/lib/ceph/osd/ceph-0  xfs defaults,noatime 1 2" >> /etc/fstab

  8. root 用户身份,初始化 OSD 数据目录:

    语法

    # ceph-osd -i <osd_id> --mkfs --mkkey --osd-uuid <uuid>

    示例

    # ceph-osd -i 0 --mkfs --mkkey --osd-uuid b367c360-b364-4b1d-8fc6-09408a9cda7a
    ... auth: error reading file: /var/lib/ceph/osd/ceph-0/keyring: can't open /var/lib/ceph/osd/ceph-0/keyring: (2) No such file or directory
    ... created new key in keyring /var/lib/ceph/osd/ceph-0/keyring

  9. root 身份,注册 OSD 身份验证密钥。

    语法

    # ceph auth add osd.<osd_id> osd 'allow *' mon 'allow profile osd' -i /var/lib/ceph/osd/ceph-<osd_id>/keyring

    示例

    # ceph auth add osd.0 osd 'allow *' mon 'allow profile osd' -i /var/lib/ceph/osd/ceph-0/keyring
    added key for osd.0

  10. root 用户身份,将 OSD 节点添加到 CRUSH map:

    语法

    # ceph osd crush add-bucket <host_name> host

    示例

    # ceph osd crush add-bucket node2 host

  11. root 用户身份,将 OSD 节点放在 default CRUSH 树下:

    语法

    # ceph osd crush move <host_name> root=default

    示例

    # ceph osd crush move node2 root=default

  12. root 用户身份,将 OSD 磁盘添加到 CRUSH map

    语法

    # ceph osd crush add osd.<osd_id> <weight> [<bucket_type>=<bucket-name> ...]

    示例

    # ceph osd crush add osd.0 1.0 host=node2
    add item id 0 name 'osd.0' weight 1 at location {host=node2} to crush map

    注意

    您也可以解译 CRUSH map,并将 OSD 添加到设备列表中。将 OSD 节点添加为 bucket,然后将设备添加为 OSD 节点中的项目,为 OSD 分配一个权重,重新编译 CRUSH map,并且设置 CRUSH map。如需了解更多详细信息,请参阅 Red Hat Ceph Storage 4 的存储策略指南中的编辑 CRUSH map 部分。

  13. root 用户身份,更新新创建的目录和文件的所有者和组权限:

    语法

    # chown -R <owner>:<group> <path_to_directory>

    示例

    # chown -R ceph:ceph /var/lib/ceph/osd
    # chown -R ceph:ceph /var/log/ceph
    # chown -R ceph:ceph /var/run/ceph
    # chown -R ceph:ceph /etc/ceph

  14. OSD 节点位于 Ceph 存储集群配置中。不过,OSD 守护进程为 downin。新 OSD 的状态必须为 up 后才能开始接收数据。以 root 用户身份,启用并启动 OSD 过程:

    语法

    # systemctl enable ceph-osd.target
    # systemctl enable ceph-osd@<osd_id>
    # systemctl start ceph-osd@<osd_id>

    示例

    # systemctl enable ceph-osd.target
    # systemctl enable ceph-osd@0
    # systemctl start ceph-osd@0

    启动 OSD 守护进程后,它就为 upin

现在,您已启动并运行 Monitor 和一些 OSD。您可以执行以下命令来观察放置组对等点:

$ ceph -w

要查看 OSD 树,请执行以下命令:

$ ceph osd tree

示例

ID  WEIGHT    TYPE NAME        UP/DOWN  REWEIGHT  PRIMARY-AFFINITY
-1       2    root default
-2       2        host node2
 0       1            osd.0         up         1                 1
-3       1        host node3
 1       1            osd.1         up         1                 1

若要通过添加新 OSD 到存储集群来扩展存储容量,请参阅 Red Hat Ceph Storage 4 管理指南中的添加 OSD 部分。