1.2. 在容器中安装 Red Hat Ceph Storage 集群


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

生产环境中使用的 Ceph 集群通常包含十个或更多节点。要将 Red Hat Ceph Storage 作为容器镜像部署,红帽建议使用至少包含三个 OSD 和三个 monitor 节点的 Ceph 集群。

重要

Ceph 可以使用一个监控器运行;但是,为了保证生产环境集群中的高可用性,红帽将仅支持具有至少三个 monitor 节点的部署。

先决条件

  • 在 Ansible 管理节点上使用 root 用户帐户,启用 Red Hat Ceph Storage 3 工具存储库和 Ansible 存储库:

    [root@admin ~]# subscription-manager repos --enable=rhel-7-server-rhceph-3-tools-els-rpms --enable=rhel-7-server-ansible-2.6-rpms
  • 安装 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-docker.yml.sample site-docker.yml
  5. 编辑复制的文件。

    1. 编辑 group_vars/all.yml 文件。下表包括了最常见需要的和可选参数以取消注释。请注意,表不包括所有参数。

      重要

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

      表 1.1. 常规 Ansible 设置
      选项订阅价值必需备注

      monitor_interface

      monitor 节点侦听的接口

      monitor_interface、monitoring_address 或 monitor_address _block 需要

       

      monitor_address

      monitor 节点侦听的地址

       

      monitor_address_block

      Ceph 公共网络的子网

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

      ip_version

      ipv6

      是,如果使用 IPv6 寻址

       

      journal_size

      日志的大小(以 MB 为单位)

       

      public_network

      Ceph 公共网络的 IP 地址和子网掩码

      Red Hat Enterprise Linux 安装指南中验证 Red Hat Ceph Storage的网络配置

      cluster_network

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

      ceph_docker_image

      rhceph/rhceph-3-rhel7,如果使用本地 Docker registry,则为 cephimageinlocalreg

       

      containerized_deployment

      true

       

      ceph_docker_registry

      registry.access.redhat.com (如果使用本地 Docker registry)或 <local-host-fqdn>

       

      all.yml 文件示例类似如下:

      monitor_interface: eth0
      journal_size: 5120
      public_network: 192.168.0.0/24
      ceph_docker_image: rhceph/rhceph-3-rhel7
      containerized_deployment: true
      ceph_docker_registry: registry.access.redhat.com

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

    2. 编辑 group_vars/osds.yml 文件。下表包括了最常见需要的和可选参数以取消注释。请注意,表不包括所有参数。

      重要

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

      表 1.2. OSD Ansible 设置
      选项订阅价值必需备注

      osd_scenario

      并置 使用同一设备进行 write-ahead logging 和 key/value 数据(BlueStore)或 journal(FileStore)和 OSD 数据

      非并置 使用专用设备,如 SSD 或 NVMe 介质来存储 write-ahead log 和 key/value 数据(BlueStore)或日志数据(FileStore)

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

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

      osd_auto_discovery

      True 用于自动发现 OSD

      是,如果使用 osd_scenario: collocated

      使用 设备 设置时无法使用

      devices

      存储 ceph 数据 的设备列表

      yes 指定设备列表

      使用 osd_auto_discovery 设置时无法使用。当使用 lvm 作为 osd_scenario 且设置 devices 选项时,ceph-volume lvm 批处理 模式会创建优化的 OSD 配置。

      dedicated_devices

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

      是的,如果 osd_scenario: non-collocated

      应该是非分区的设备

      dmcrypt

      对 OSD 加密为 true

      默认为 false

      lvm_volumes

      FileStore 或 BlueStore 字典列表

      是,如果使用 osd_scenario: lvm 和存储设备没有使用 设备定义

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

      osds_per_device

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

      默认为 1

      osd_objectstore

      OSD 的 Ceph 对象存储类型。

      默认为 蓝色存储。另一个选项是 filestore。升级需要。

      在使用三个 OSD 情境时,以下是 osds.yml 文件示例: collocatednon-collocatedlvm。如果未指定,默认的 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

      这个非并置示例将创建四个 BlueStore OSD,每个设备一个。在本例中,传统的硬盘驱动器(sdasdbsdc sdc、sdd)用于对象数据,而固态硬盘(SSD)(SSD)(/dev/nvme0n1 n1)用于 BlueStore 数据库和 write-ahead 日志。此配置对 /dev/sda/dev/sdb 设备与 /dev/nvme0n1 设备对,并使用 /dev/nvme1n1 设备对 /dev/sdc/dev/sdd 设备进行分组。

      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 simple

      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 advance

      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 SSDs 设置 osd_scenario: lvmosds_per_device:4 选项。如需更多信息,请参阅 Red Hat Ceph Storage Container Guide为所有 NVMe Storage 配置 OSD Ansible 设置

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

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

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

      [mons]
      <monitor-host-name>
      <monitor-host-name>
      <monitor-host-name>
    2. [osds] 部分下添加 OSD 节点。如果节点有顺序命名,请考虑使用一个范围:

      [osds]
      <osd-host-name[1:10]>
      注意

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

      或者,您可以通过在 [mons][osds] 部分中添加相同的节点,将 monitor 与一个节点上的 OSD 守护进程在一起。详情请查看 第 2 章 容器化 Ceph 守护进程的共存

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

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

      Syntax

      [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
  8. 对于所有部署、裸机或容器中的,打开 来编辑 Ansible 清单文件,默认为 /etc/ansible/hosts 文件。注释掉示例主机。

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

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

    [user@admin ~]$ ansible all -m ping
  10. 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
  11. 以 Ansible 用户身份,更改到 /usr/share/ceph-ansible/ 目录:

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

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

    如果您将 Red Hat Ceph Storage 部署到 Red Hat Enterprise Linux Atomic Host 主机,请使用 --skip-tags=with_pkg 选项:

    [user@admin ceph-ansible]$ ansible-playbook site-docker.yml --skip-tags=with_pkg
    注意

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

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

    docker exec ceph-<mon|mgr>-<id> ceph health

    替换:

    • <id> 带有 monitor 节点的主机名:

    例如:

    [root@monitor ~]# docker exec ceph-mon-mon0 ceph health
    HEALTH_OK
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.