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 管理节点运行以下命令。
以 Ansible 用户身份,创建
ceph-ansible-keys
目录,Ansible 存储由ceph-ansible
playbook 生成的临时值。[user@admin ~]$ mkdir ~/ceph-ansible-keys
以 root 用户身份,在
/etc/ansible/
目录中创建一个指向/usr/share/ceph-ansible/group_vars
目录的符号链接:[root@admin ~]# ln -s /usr/share/ceph-ansible/group_vars /etc/ansible/group_vars
进入
/usr/share/ceph-ansible/
目录:[root@admin ~]$ cd /usr/share/ceph-ansible
为 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
编辑复制的文件。
编辑
group_vars/all.yml
文件。下表包括了最常见需要的和可选参数以取消注释。请注意,表不包括所有参数。重要不要将
cluster: ceph
参数设置为ceph
以外的任何值,因为不支持使用自定义集群名称。表 1.1. 常规 Ansible 设置 选项 订阅价值 必需 备注 monitor_interface
monitor 节点侦听的接口
monitor_interface
、monitoring_address 或
需要monitor_address
_blockmonitor_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
文件。编辑
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
和存储设备没有使用设备
定义每一字典必须包含
data
、journal
和data_vg
键。任何逻辑卷或卷组都必须是名称,而不是完整路径。data
和journal
键可以是逻辑卷 (LV) 或分区,但不能将一个日志用于多个data
LV。data_vg
键必须是包含data
LV 的卷组。(可选)journal_vg
键可用于指定包含 journal LV 的卷组(如果适用)。有关各种支持的配置,请参见以下示例。osds_per_device
每个设备要创建的 OSD 数量。
否
默认为
1
osd_objectstore
OSD 的 Ceph 对象存储类型。
否
默认为
蓝色存储
。另一个选项是filestore
。升级需要。在使用三个 OSD 情境时,以下是
osds.yml
文件示例:collocated
、non-collocated
和lvm
。如果未指定,默认的 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,每个设备一个。在本例中,传统的硬盘驱动器(
sda
、sdb
、sdc
sdc、sdd
)用于对象数据,而固态硬盘(SSD)(SSD)(
)用于 BlueStore 数据库和 write-ahead 日志。此配置对/dev/nvme0n1
n1/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 混合时,其数据将放置到传统硬盘驱动器(
sda
、sdb
)和 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: lvm
和osds_per_device:4
选项。如需更多信息,请参阅 Red Hat Ceph Storage Container Guide 中 为所有 NVMe Storage 配置 OSD Ansible 设置。如需了解更多详细信息,请参阅
osds.yml
文件中的注释。
编辑默认位于
/etc/ansible/hosts
的 Ansible 清单文件。记住注释掉示例主机。在
[mons]
部分添加 monitor 节点:[mons] <monitor-host-name> <monitor-host-name> <monitor-host-name>
在
[osds]
部分下添加 OSD 节点。如果节点有顺序命名,请考虑使用一个范围:[osds] <osd-host-name[1:10]>
注意对于新安装的 OSD,默认的对象存储格式为 BlueStore。
或者,您可以通过在
[mons]
和[osds]
部分中添加相同的节点,将 monitor 与一个节点上的 OSD 守护进程在一起。详情请查看 第 2 章 容器化 Ceph 守护进程的共存。
另外,对于所有部署、裸机或 容器,您可以使用
ansible-playbook
创建自定义 CRUSH 层次结构:设置 Ansible 清单文件。使用
osd_crush_location
参数指定您希望 OSD 主机在 CRUSH map 的层次结构中的位置。您必须至少指定两个 CRUSH bucket 类型,以指定 OSD 的位置,一个 bucket类型
必须是主机。默认情况下,包括root
,datacenter
,room
,row
,pod
,pdu
,rack
,chassis
和host
。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' }"
将
crush_rule_config
和create_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
注意如果未部署 ssd 和 hdd OSD,默认 CRUSH 规则会失败,因为默认规则现在包含类参数,必须定义。
注意按照以下步骤中所述,也将自定义 CRUSH 层次结构添加到 host_vars 目录中的 OSD 文件中,以实现此配置。
使用在
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 }}"
查看树。
[root@mon ~]# ceph osd tree
验证池。
# for i in $(rados lspools);do echo "pool: $i"; ceph osd pool get $i crush_rule;done pool: pool1 crush_rule: HDD
对于所有部署、裸机或容器中的,打开 来编辑 Ansible 清单文件,默认为
/etc/ansible/hosts
文件。注释掉示例主机。在
[mgrs]
部分下,添加 Ceph Manager (ceph-mgr
) 节点。与 monitor 节点并置 Ceph 管理器守护进程。[mgrs] <monitor-host-name> <monitor-host-name> <monitor-host-name>
以 Ansible 用户身份,确保 Ansible 可以访问 Ceph 主机:
[user@admin ~]$ ansible all -m ping
以
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
编辑
/usr/share/ceph-ansible/ansible.cfg
文件,更新log_path
值,如下所示:log_path = /var/log/ansible/ansible.log
以 Ansible 用户身份,更改到
/usr/share/ceph-ansible/
目录:[user@admin ~]$ cd /usr/share/ceph-ansible/
运行
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
的数字。使用 monitor 节点上的 root 帐户,验证 Ceph 集群的状态:
docker exec ceph-<mon|mgr>-<id> ceph health
替换:
-
<id>
带有 monitor 节点的主机名:
例如:
[root@monitor ~]# docker exec ceph-mon-mon0 ceph health HEALTH_OK
-