搜索

3.2. 安装 Red Hat Ceph Storage 集群

download PDF

将 Ansible 应用与 ceph-ansible playbook 搭配使用,以安装 Red Hat Ceph Storage 3。

生产用 Ceph 存储集群从至少三个 monitor 主机开始,以及包含多个 OSD 守护进程的三个 OSD 节点。

Ceph 存储集群

先决条件

  • 在 Ansible 管理节点上使用 root 帐户安装 ceph-ansible 软件包:

    [root@admin ~]# yum install ceph-ansible

流程

从 Ansible 管理节点运行以下命令,除非另有指示。

  1. 以 Ansible 用户身份,创建 ceph-ansible-keys 目录,其中 Ansible 存储 ceph-ansible playbook 生成的临时值。

    [user@admin ~]$ mkdir ~/ceph-ansible-keys
  2. 以 root 用户身份,创建一个指向 /etc/ansible/ 目录中的 /usr/share/ceph-ansible/group_vars 目录的符号链接:

    [root@admin ~]# ln -s /usr/share/ceph-ansible/group_vars /etc/ansible/group_vars
  3. 进入 /usr/share/ceph-ansible/ 目录:

    [root@admin ~]$ cd /usr/share/ceph-ansible
  4. yml.sample 文件创建新副本:

    [root@admin ceph-ansible]# cp group_vars/all.yml.sample group_vars/all.yml
    [root@admin ceph-ansible]# cp group_vars/osds.yml.sample group_vars/osds.yml
    [root@admin ceph-ansible]# cp site.yml.sample site.yml
  5. 编辑复制的文件。

    1. 编辑 group_vars/all.yml 文件。下表中列出了要取消注释的最常见必要参数和可选参数。请注意,该表不包含所有参数。

      重要

      不要将 cluster: ceph 参数设置为 ceph 以外的任何值,因为不支持使用自定义集群名称。

      表 3.1. 常规 Ansible 设置
      选项必需备注

      ceph_origin

      repositorydistrolocal

      repository 代表 Ceph 将通过一个新的仓库安装。distro 值意味着不会添加单独的存储库文件,您将获得 Linux 发行版本中包含的任何 Ceph 版本。local 值表示将从本地计算机复制 Ceph 二进制文件。

      ceph_repository_type

      cdniso

       

      ceph_rhcs_version

      3

       

      ceph_rhcs_iso_path

      ISO 镜像的路径

      如果使用 ISO 镜像,为 Yes

       

      monitor_interface

      monitor 节点侦听的接口

      monitor_interfacemonitoring_addressmonitor_address_block 是必需的

       

      monitor_address

      monitor 节点侦听的地址

       

      monitor_address_block

      Ceph 公共网络的子网

      当节点的 IP 地址未知时使用,但已知子网

      ip_version

      ipv6

      如果使用 IPv6 地址,则为

       

      public_network

      Ceph 公共网络的 IP 地址和子网掩码,或者对应的 IPv6 地址(若使用 IPv6)

      第 2.8 节 “验证 Red Hat Ceph Storage 的网络配置”

      cluster_network

      Ceph 集群网络的 IP 地址和子网掩码

      否,默认为 public_network

      configure_firewall

      Ansible 将尝试配置适当的防火墙规则

      否,将值设为 truefalse

       

      all.yml 文件的示例如下:

      ceph_origin: distro
      ceph_repository: rhcs
      ceph_repository_type: cdn
      ceph_rhcs_version: 3
      monitor_interface: eth0
      public_network: 192.168.0.0/24
      注意

      务必将 ceph_origin 设置为 all.yml 文件中的 distro。这样可确保安装过程使用正确的下载存储库。

      注意

      ceph_rhcs_version 选项设置为 3 将引入最新版本的 Red Hat Ceph Storage 3。

      警告

      默认情况下,Ansible 会尝试重启已安装但屏蔽的 firewalld 服务,这可能会导致 Red Hat Ceph Storage 部署失败。要临时解决这个问题,请在 all.yml 文件中将 configure_firewall 选项设置为 false。如果您正在运行 firewalld 服务,则不需要在 all.yml 文件中使用 configure_firewall 选项。

      如需了解更多详细信息,请参阅 all.yml 文件。

    2. 编辑 group_vars/osds.yml 文件。下表中列出了要取消注释的最常见必要参数和可选参数。请注意,该表不包含所有参数。

      重要

      使用不同的物理设备来安装与安装操作系统的设备不同的 OSD。在操作系统和 OSD 之间共享相同的设备会导致性能问题。

      表 3.2. OSD Ansible 设置
      选项必需备注

      osd_scenario

      collocated 使用相同的设备进行写入日志记录和键/值数据(BlueStore)或日志(FileStore)和 OSD 数据

      non-collocated 为使用专用设备,如 SSD 或 NVMe 介质,以存储 write-ahead 日志和键/值数据(BlueStore)或日志数据(FileStore)

      LVM 使用逻辑卷管理器存储 OSD 数据

      使用 osd_scenario: non-collocated 时,ceph-ansible 期望 devicesdedicated_devices 中的变量数量相匹配。例如,如果您在 devices 中指定了 10 个磁盘,则必须在 dedicated_devices 中指定 10 个条目。

      osd_auto_discovery

      true 来自动发现 OSD

      如果使用 osd_scenario: collocated 为 Yes

      使用 devices 设置时无法使用

      devices

      存储 Ceph 数据 的设备列表

      Yes 用来指定设备列表

      使用 osd_auto_discovery 设置时无法使用。当使用 lvm 作为 osd_scenario 并设置 devices 选项时,ceph-volume lvm batch 模式将创建优化的 OSD 配置。

      dedicated_devices

      存储 ceph 日志 的非并置 OSD 的专用设备列表

      如果 osd_scenario: non-collocated,则为 yes

      应该是非分区的设备

      dmcrypt

      true 来加密 OSD

      默认值为 false

      lvm_volumes

      FileStore 或 BlueStore 字典列表

      如果使用 osd_scenario: lvm且存储设备没有使用 devices定义 时为 Yes

      每一字典必须包含 datajournaldata_vg 键。任何逻辑卷或卷组都必须是名称,而不是完整路径。datajournal 键可以是逻辑卷 (LV) 或分区,但不能将一个日志用于多个 data LV。data_vg 键必须是包含 data LV 的卷组。(可选) journal_vg 键可用于指定包含 journal LV 的卷组(如果适用)。有关各种支持的配置,请参见以下示例。

      osds_per_device

      每个设备要创建的 OSD 数量。

      默认为 1

      osd_objectstore

      OSD 的 Ceph 对象存储类型。

      默认为 bluestore。另一个选项是 filestore。升级需要。

      以下是使用三种 OSD 方案 (collocated, non-collocated, 和 lvm) 的osds.yml 文件的示例:如果没有指定,默认的 OSD 对象存储格式为 BlueStore。

      Collocated

      osd_objectstore: filestore
      osd_scenario: collocated
      devices:
        - /dev/sda
        - /dev/sdb

      Non-collocated - BlueStore

      osd_objectstore: bluestore
      osd_scenario: non-collocated
      devices:
       - /dev/sda
       - /dev/sdb
       - /dev/sdc
       - /dev/sdd
      dedicated_devices:
       - /dev/nvme0n1
       - /dev/nvme0n1
       - /dev/nvme1n1
       - /dev/nvme1n1

      此 non-collocated 示例将创建四个 BlueStore OSD,每个设备一个。在本例中,传统的硬盘驱动器(sda, sdb, sdc, sdd)用于对象数据,以及固态驱动器(SSD)(/dev/nvme0n1/dev/nvme1n1)用于 BlueStore 数据库和 write-ahead 日志。此配置将 /dev/sda/dev/sdb 设备与 /dev/nvme0n1 设备配对,并将 /dev/sdc/dev/sdd 设备与 /dev/nvme1n1 设备配对。

      non-collocated - FileStore

      osd_objectstore: filestore
      osd_scenario: non-collocated
      devices:
        - /dev/sda
        - /dev/sdb
        - /dev/sdc
        - /dev/sdd
      dedicated_devices:
         - /dev/nvme0n1
         - /dev/nvme0n1
         - /dev/nvme1n1
         - /dev/nvme1n1

      LVM 简单

      osd_objectstore: bluestore
      osd_scenario: lvm
      devices:
        - /dev/sda
        - /dev/sdb

      或者

      osd_objectstore: bluestore
      osd_scenario: lvm
      devices:
        - /dev/sda
        - /dev/sdb
        - /dev/nvme0n1

      使用这些简单的配置,ceph-ansible 使用批处理模式(ceph-volume lvm batch)来创建 OSD。

      在第一个场景中,如果 devices 是传统的硬盘驱动器或 SSD,则每个设备会创建一个 OSD。

      在第二种场景中,当结合了传统的硬盘驱动器和 SSD 时,数据将放置在传统的硬盘驱动器(sdasdb)上,并且将最大型的 BlueStore 数据库(block.db)在 SSD(nvme0n1)上创建。

      LVM 高级设置

      osd_objectstore: filestore
      osd_scenario: lvm
      lvm_volumes:
         - data: data-lv1
           data_vg: vg1
           journal: journal-lv1
           journal_vg: vg2
         - data: data-lv2
           journal: /dev/sda
           data_vg: vg1

      或者

      osd_objectstore: bluestore
      osd_scenario: lvm
      lvm_volumes:
        - data: data-lv1
          data_vg: data-vg1
          db: db-lv1
          db_vg: db-vg1
          wal: wal-lv1
          wal_vg: wal-vg1
        - data: data-lv2
          data_vg: data-vg2
          db: db-lv2
          db_vg: db-vg2
          wal: wal-lv2
          wal_vg: wal-vg2

      使用这些高级场景示例时,必须事先创建卷组和逻辑卷。它们不会由 ceph-ansible 创建。

      注意

      如果使用所有 NVMe SSD,请设置 osd_scenario: lvmosds_per_device: 4 选项。有关更多信息,请参阅安装指南中的 Configuring OSD Ansible settings for all NVMe Storage(Red Hat Enterprise Linux)或 Configuring OSD Ansible settings for all NVMe Storage(Ubuntu)。

      如需了解更多详细信息,请参阅 osds.yml 文件中的注释。

  6. 编辑位于 /etc/ansible/hosts 的 Ansible 清单文件。记住注释掉示例主机。

    1. [mons] 部分下添加 monitor 节点:

      [mons]
      MONITOR_NODE_NAME1
      MONITOR_NODE_NAME2
      MONITOR_NODE_NAME3
    2. [osds] 部分下添加 OSD 节点。如果节点有顺序命名,请考虑使用范围:

      [osds]
      OSD_NODE_NAME1[1:10]
      注意

      对于新安装的 OSD,默认的对象存储格式为 BlueStore。

      1. (可选)使用 devicesdedicated_devices 选项指定 OSD 节点使用的设备。使用逗号分隔的列表列出多个设备。

        语法

        [osds]
        CEPH_NODE_NAME devices="['DEVICE_1', 'DEVICE_2']" dedicated_devices="['DEVICE_3', 'DEVICE_4']"

        示例

        [osds]
        ceph-osd-01 devices="['/dev/sdc', '/dev/sdd']" dedicated_devices="['/dev/sda', '/dev/sdb']"
        ceph-osd-02 devices="['/dev/sdc', '/dev/sdd', '/dev/sde']" dedicated_devices="['/dev/sdf', '/dev/sdg']"

        在没有指定设备时,在 osds.yml 文件中将 osd_auto_discovery 选项设置为 true

        注意

        当 OSD 与不同名称使用设备或者其中一个 OSD 上失败时,使用 devicesdedicated_devices 参数很有用。

  7. 另外,如果您想要将主机特定参数用于所有部署( 裸机或在 容器 中),请在 host_vars 目录中创建主机文件,使其包含特定于主机的参数。

    1. /etc/ansible/host_vars/ 目录下,为每个添加到存储集群的每个新 Ceph OSD 节点创建一个新文件:

      语法

      touch /etc/ansible/host_vars/OSD_NODE_NAME

      示例

      [root@admin ~]# touch /etc/ansible/host_vars/osd07

    2. 使用特定于主机的参数更新 文件。在裸机部署中,您可以在 文件中添加 devices:dedicated_devices: 部分。

      示例

      devices:
        - /dev/sdc
        - /dev/sdd
        - /dev/sde
        - /dev/sdf
      
      dedicated_devices:
        - /dev/sda
        - /dev/sdb

  8. 另外,对于所有部署(裸机容器 ),您可以使用 ansible-playbook 创建自定义 CRUSH 层次结构:

    1. 设置 Ansible 清单文件。使用 osd_crush_location 参数,指定 OSD 主机处于 CRUSH map 的层次结构中的位置。您必须指定至少两种 CRUSH bucket 类型来指定 OSD 的位置,一种 bucket 类型 必须是 host。默认情况下,包括 root, datacenter, room, row, pod, pdu, rack, chassishost

      语法

      [osds]
      CEPH_OSD_NAME osd_crush_location="{ 'root': ROOT_BUCKET', 'rack': 'RACK_BUCKET', 'pod': 'POD_BUCKET', 'host': 'CEPH_HOST_NAME' }"

      示例

      [osds]
      ceph-osd-01 osd_crush_location="{ 'root': 'default', 'rack': 'rack1', 'pod': 'monpod', 'host': 'ceph-osd-01' }"

    2. crush_rule_configcreate_crush_tree 参数设置为 True,如果您不想使用默认的 CRUSH 规则,至少创建一个 CRUSH 规则。例如,如果您使用 HDD 设备,请按如下所示编辑参数:

      crush_rule_config: True
      crush_rule_hdd:
          name: replicated_hdd_rule
          root: root-hdd
          type: host
          class: hdd
          default: True
      crush_rules:
        - "{{ crush_rule_hdd }}"
      create_crush_tree: True

      如果使用 SSD 设备,请按如下所示编辑参数:

      crush_rule_config: True
      crush_rule_ssd:
          name: replicated_ssd_rule
          root: root-ssd
          type: host
          class: ssd
          default: True
      crush_rules:
        - "{{ crush_rule_ssd }}"
      create_crush_tree: True
      注意

      如果没有部署 ssdhdd OSD,则默认 CRUSH 规则会失败,因为默认规则现在包含 类参数 (必须定义)。

      注意

      此外,将自定义 CRUSH 层次结构添加到 host_vars 目录中的 OSD 文件,如上面的步骤中所述,使此配置正常工作。

    3. 使用在 group_vars/clients.yml 文件中创建的 crush_rules 来创建 pools

      示例

      copy_admin_key: True
      user_config: True
      pool1:
        name: "pool1"
        pg_num: 128
        pgp_num: 128
        rule_name: "HDD"
        type: "replicated"
        device_class: "hdd"
      pools:
        - "{{ pool1 }}"

    4. 查看树。

      [root@mon ~]# ceph osd tree
    5. 验证池。

      # for i in $(rados lspools);do echo "pool: $i"; ceph osd pool get $i crush_rule;done
      
      pool: pool1
      crush_rule: HDD
  9. 对于 裸机容器 的所有部署,打开并编辑 Ansible 清单文件(默认为 /etc/ansible/hosts 文件)。注释掉示例主机。

    1. [mgrs] 部分下,添加 Ceph Manager (ceph-mgr) 节点。将 Ceph 管理器守护进程与 monitor 节点并置。

      [mgrs]
      <monitor-host-name>
      <monitor-host-name>
      <monitor-host-name>
  10. 以 Ansible 用户身份,确保 Ansible 可以访问 Ceph 主机:

    [user@admin ~]$ ansible all -m ping
  11. 将以下行添加到 /etc/ansible/ansible.cfg 文件中:

    retry_files_save_path = ~/
  12. root 用户身份,创建 /var/log/ansible/ 目录,并为 ansible 用户分配适当的权限:

    [root@admin ~]# mkdir /var/log/ansible
    [root@admin ~]# chown ansible:ansible  /var/log/ansible
    [root@admin ~]# chmod 755 /var/log/ansible
    1. 编辑 /usr/share/ceph-ansible/ansible.cfg 文件,更新 log_path 值,如下所示:

      log_path = /var/log/ansible/ansible.log
  13. 以 Ansible 用户身份,切换到 /usr/share/ceph-ansible/ 目录:

    [user@admin ~]$ cd /usr/share/ceph-ansible/
  14. 运行 ceph-ansible playbook:

    [user@admin ceph-ansible]$ ansible-playbook site.yml
    注意

    要提高部署速度,请在 ansible-playbook 中使用 --forks 选项。默认情况下,ceph-ansible 将 fork 设置为 20。在这个版本中,最多 20 个节点将同时安装。要一次安装最多 30 个节点,请运行 ansible-playbook --forks 30 PLAYBOOK 文件。必须监控管理节点上的资源,以确保它们不会被过度使用。如果是,则减少传递给 --forks 的数字。

  15. 使用 monitor 节点上的 root 帐户,验证 Ceph 集群的状态:

    [root@monitor ~]# ceph health
    HEALTH_OK
  16. 使用 rados 验证群集是否正常运行。

    1. 在监控节点上,创建一个包含八个 PG 的测试池:

      语法

      [root@monitor ~]# ceph osd pool create <pool-name> <pg-number>

      示例

      [root@monitor ~]# ceph osd pool create test 8
    2. 创建名为 hello-world.txt 的文件:

      语法

      [root@monitor ~]# vim <file-name>

      示例

      [root@monitor ~]# vim hello-world.txt
    3. 使用对象名称 hello-worldhello-world.txt 上传到测试池中:

      语法

      [root@monitor ~]# rados --pool <pool-name> put <object-name> <object-file>

      示例

      [root@monitor ~]# rados --pool test put hello-world hello-world.txt
    4. 从 test 池下载 hello-world,保存为 fetch.txt

      语法

      [root@monitor ~]# rados --pool <pool-name> get <object-name> <object-file>

      示例

      [root@monitor ~]# rados --pool test get hello-world fetch.txt
    5. 检查 fetch.txt 的内容:

      [root@monitor ~]# cat fetch.txt

      输出应该是:

      "Hello World!"
      注意

      除了验证集群状态外,您还可以使用 ceph-medic 实用程序来全面诊断 Ceph 存储群集。请参阅 Red Hat Ceph Storage 3 管理指南中的使用 ceph-medic 诊断 Ceph Storage 集群Cluster

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.