1.5. Ceph OSD
当 Red Hat Ceph Storage 集群启动并运行时,您可以在运行时将 OSD 添加到存储集群中。
Ceph OSD 通常由一个存储驱动器和一个 ceph-osd
守护进程和一个节点中的相关日志组成。如果节点有多个存储驱动器,则为每个驱动器映射一个 ceph-osd
守护进程。
红帽建议定期检查集群的容量,以查看它是否达到其存储容量的上限。当存储集群达到其 近满(near full)
比率时,添加一个或多个 OSD 来扩展存储集群的容量。
当您要缩小 Red Hat Ceph Storage 集群大小或替换硬件时,您还可以在运行时移除 OSD。如果节点有多个存储驱动器,您可能还需要为该驱动器删除其中一个 ceph-osd
守护进程。通常,最好检查存储集群的容量,以查看您是否达到其容量的上限。在删除 OSD 后,确保存储集群没有达到接近全满
比率。
在添加 OSD 前,不要让存储集群达到全满
比率。在存储集群达到接近满
比率后发生 OSD 故障可能会导致存储集群超过全满
比率。Ceph 会阻止写入访问来保护数据,直到您解决存储容量问题。在删除 OSD 前,需要仔细考虑它对 full
比率的影响。
1.5.1. Ceph OSD 节点配置
配置 Ceph OSD 及其支持的硬件与使用 OSD 的池存储策略类似。Ceph 倾向于在池之间实现一致的性能配置集统一硬件。为了获得最佳性能,请考虑使用相同类型或大小的驱动器的 CRUSH 层次结构。
如果您添加不同大小的驱动器,请相应地调整其权重。将 OSD 添加到 CRUSH map 时,请考虑新 OSD 的权重。硬盘容量每年增长约 40%,因此较新的 OSD 节点可能比存储集群中的旧节点有更大的硬盘驱动器,即它们可能具有更大的权重。
在进行新安装前,请参阅安装指南中的安装 Red Hat Ceph Storage 的要求章节。
其它资源
- 如需了解更多详细信息,请参阅 Red Hat Ceph Storage 策略指南。*
1.5.2. 将容器 OSD ID 映射到驱动器
有时,需要确定容器化 OSD 正在使用哪个驱动器。例如,如果 OSD 有问题,您可能需要知道它用来验证驱动器状态的驱动器。另外,对于非容器化 OSD,您可以引用 OSD ID 来启动和停止它,但要启动和停止容器化 OSD,您要引用它所使用的驱动器。
以下示例在 Red Hat Enterprise Linux 8 上运行。在 Red Hat Enterprise Linux 8 中,podman
是默认服务,并替换了旧的 docker
服务。如果您在 Red Hat Enterprise Linux 7 上运行,则使用 docker
替换 podman
以执行给定的命令。
先决条件
- 在容器化环境中运行的 Red Hat Ceph Storage 集群。
-
具有容器节点的
root
访问权限。
流程
查找容器名称。例如,要识别与
osd.5
关联的驱动器,请在osd.5
正在运行的容器节点上打开终端,然后运行podman ps
来列出所有容器:示例
[root@ceph3 ~]# podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3a866f927b74 registry.redhat.io/rhceph/rhceph-4-rhel8:latest "/entrypoint.sh" About an hour ago Up About an hour ceph-osd-ceph3-sdd 4e242d932c32 registry.redhat.io/rhceph/rhceph-4-rhel8:latest "/entrypoint.sh" About an hour ago Up About an hour ceph-osd-ceph3-sdc 91f3d4829079 registry.redhat.io/rhceph/rhceph-4-rhel8:latest "/entrypoint.sh" 22 hours ago Up 22 hours ceph-osd-ceph3-sdb 73dfe4021a49 registry.redhat.io/rhceph/rhceph-4-rhel8:latest "/entrypoint.sh" 7 days ago Up 7 days ceph-osd-ceph3-sdf 90f6d756af39 registry.redhat.io/rhceph/rhceph-4-rhel8:latest "/entrypoint.sh" 7 days ago Up 7 days ceph-osd-ceph3-sde e66d6e33b306 registry.redhat.io/rhceph/rhceph-4-rhel8:latest "/entrypoint.sh" 7 days ago Up 7 days ceph-mgr-ceph3 733f37aafd23 registry.redhat.io/rhceph/rhceph-4-rhel8:latest "/entrypoint.sh" 7 days ago Up 7 days ceph-mon-ceph3
使用
podman exec
在前面输出中任何 OSD 容器名称上运行ceph-volume lvm 列表
:示例
[root@ceph3 ~]# podman exec ceph-osd-ceph3-sdb ceph-volume lvm list ====== osd.5 ======= [journal] /dev/journals/journal1 journal uuid C65n7d-B1gy-cqX3-vZKY-ZoE0-IEYM-HnIJzs osd id 1 cluster fsid ce454d91-d748-4751-a318-ff7f7aa18ffd type journal osd fsid 661b24f8-e062-482b-8110-826ffe7f13fa data uuid SlEgHe-jX1H-QBQk-Sce0-RUls-8KlY-g8HgcZ journal device /dev/journals/journal1 data device /dev/test_group/data-lv2 devices /dev/sda [data] /dev/test_group/data-lv2 journal uuid C65n7d-B1gy-cqX3-vZKY-ZoE0-IEYM-HnIJzs osd id 1 cluster fsid ce454d91-d748-4751-a318-ff7f7aa18ffd type data osd fsid 661b24f8-e062-482b-8110-826ffe7f13fa data uuid SlEgHe-jX1H-QBQk-Sce0-RUls-8KlY-g8HgcZ journal device /dev/journals/journal1 data device /dev/test_group/data-lv2 devices /dev/sdb
在这个输出中,您可以看到
osd.5
与/dev/sdb
关联。
其它资源
- 如需更多信息,请参阅重新放置失败的 OSD 磁盘。
1.5.3. 使用 Ansible 添加具有相同磁盘拓扑的 Ceph OSD
对于具有相同磁盘拓扑的 Ceph OSD,Ansible 使用 /usr/share/ceph-ansible/group_vars/osds.yml
文件的 devices:
部分中指定的同一设备路径添加与其他 OSD 节点相同的 OSD 数量。
新的 Ceph OSD 节点具有与 OSD 的其余部分相同的配置。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 请参阅 Red Hat Ceph Storage 安装指南中的安装 Red Hat Ceph Storage 的要求。
-
具有对新节点的
root
访问权限。 - 与存储集群中的其他 OSD 节点相同的 OSD 数据驱动器数量。
流程
将 Ceph OSD 节点添加到
/etc/ansible/hosts
文件的[osds]
部分下:语法
[osds] ... osd06 NEW_OSD_NODE_NAME
验证 Ansible 能否访问 Ceph 节点:
[user@admin ~]$ ansible all -m ping
进入 Ansible 配置目录:
[user@admin ~]$ cd /usr/share/ceph-ansible
对于裸机和容器部署,请运行
add-osd.yml
Ansible playbook:注意对于新的 OSD 主机,您需要使用
--limit
选项运行site.yml
或site-container.yml
playbook,并且ceph-crash
服务没有部署到使用osds.yml
playbook 的节点上。示例
[user@admin ceph-ansible]$ ansible-playbook infrastructure-playbooks/add-osd.yml -i hosts
对于新的 OSD 主机,请运行
site.yml
或site-container.yml
Ansible playbook:裸机部署:
语法
ansible-playbook site.yml -i hosts --limit NEW_OSD_NODE_NAME
示例
[user@admin ceph-ansible]$ ansible-playbook site.yml -i hosts --limit node03
容器部署:
语法
ansible-playbook site-container.yml -i hosts --limit NEW_OSD_NODE_NAME
示例
[user@admin ceph-ansible]$ ansible-playbook site-container.yml -i hosts --limit node03
在添加 OSD 时,如果 playbook 失败(PGs were not reported as active+clean
),在 all.yml
文件中配置以下变量来调整重试和延迟:
# OSD handler checks handler_health_osd_check_retries: 50 handler_health_osd_check_delay: 30
其它资源
- 如需了解有关 Ansible 清单配置的更多详细信息,请参阅 {storage_product} 安装指南中的配置 Ansible 清单位置部分。
1.5.4. 使用具有不同磁盘拓扑的 Ansible 添加 Ceph OSD
对于具有不同磁盘拓扑的 Ceph OSD,可通过两种方法将新 OSD 节点添加到现有存储集群中。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 请参阅 Red Hat Ceph Storage 安装指南中的安装 Red Hat Ceph Storage 的要求。
-
具有对新节点的
root
访问权限。
流程
第一种方法
在
[osds]
部分下,添加新的 Ceph OSD 节点到/etc/ansible/hosts
文件:示例
[osds] ... osd06 NEW_OSD_NODE_NAME
在
/etc/ansible/host_vars/
目录下,为每个添加到存储集群的每个新 Ceph OSD 节点创建一个新文件:语法
touch /etc/ansible/host_vars/NEW_OSD_NODE_NAME
示例
[root@admin ~]# touch /etc/ansible/host_vars/osd07
编辑新文件,并将
devices:
和dedicated_devices:
部分添加到该文件中。在每个部分下,添加一个-
、空格,然后添加到这个 OSD 节点的块设备名称的完整路径:示例
devices: - /dev/sdc - /dev/sdd - /dev/sde - /dev/sdf dedicated_devices: - /dev/sda - /dev/sda - /dev/sdb - /dev/sdb
验证 Ansible 是否可以访问所有 Ceph 节点:
[user@admin ~]$ ansible all -m ping
将目录改为 Ansible 配置目录:
[user@admin ~]$ cd /usr/share/ceph-ansible
对于裸机和容器部署,请运行
add-osd.yml
Ansible playbook:注意对于新的 OSD 主机,您需要使用
--limit
选项运行site.yml
或site-container.yml
playbook,并且ceph-crash
服务没有部署到使用osds.yml
playbook 的节点上。示例
[user@admin ceph-ansible]$ ansible-playbook infrastructure-playbooks/add-osd.yml -i hosts
对于新的 OSD 主机,请运行
site.yml
或site-container.yml
Ansible playbook:裸机部署:
语法
ansible-playbook site.yml -i hosts --limit NEW_OSD_NODE_NAME
示例
[user@admin ceph-ansible]$ ansible-playbook site.yml -i hosts --limit node03
容器部署:
语法
ansible-playbook site-container.yml -i hosts --limit NEW_OSD_NODE_NAME
示例
[user@admin ceph-ansible]$ ansible-playbook site-container.yml -i hosts --limit node03
第二种方法
将新 OSD 节点名称添加到
/etc/ansible/hosts
文件,并使用devices
和dedicated_devices
选项指定不同的磁盘拓扑:示例
[osds] ... osd07 devices="['/dev/sdc', '/dev/sdd', '/dev/sde', '/dev/sdf']" dedicated_devices="['/dev/sda', '/dev/sda', '/dev/sdb', '/dev/sdb']"
验证 Ansible 能否访问所有 Ceph 节点:
[user@admin ~]$ ansible all -m ping
将目录改为 Ansible 配置目录:
[user@admin ~]$ cd /usr/share/ceph-ansible
对于裸机和容器部署,请运行
add-osd.yml
Ansible playbook:注意对于新的 OSD 主机,您需要使用
--limit
选项运行site.yml
或site-container.yml
playbook,并且ceph-crash
服务没有部署到使用osds.yml
playbook 的节点上。示例
[user@admin ceph-ansible]$ ansible-playbook infrastructure-playbooks/add-osd.yml -i hosts
对于新的 OSD 主机,请运行
site.yml
或site-container.yml
Ansible playbook:裸机部署:
语法
ansible-playbook site.yml -i hosts --limit NEW_OSD_NODE_NAME
示例
[user@admin ceph-ansible]$ ansible-playbook site.yml -i hosts --limit node03
容器部署:
语法
ansible-playbook site-container.yml -i hosts --limit NEW_OSD_NODE_NAME
示例
[user@admin ceph-ansible]$ ansible-playbook site-container.yml -i hosts --limit node03
其它资源
- 如需了解有关 Ansible 清单配置的更多详细信息,请参阅 {storage_product} 安装指南中的配置 Ansible 清单位置部分。
1.5.5. 使用 ceph-volume
创建 Ceph OSD
create
子命令调用 prepare
子命令,然后调用 activate
子命令。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 对 Ceph OSD 节点的 root 级别访问权限。
如果您希望对创建过程拥有更多控制,可以单独使用 prepare
和 activate
子命令来创建 OSD,而不必使用 create
。您可以使用两个子命令逐步将新的 OSD 引入到存储集群中,同时避免重新平衡大量数据。这两种方法的工作方式相同,唯一的不同是使用 create
子命令会使 OSD 在完成后立即变为 up 和 in。
流程
要创建新 OSD,请执行以下操作:
语法
ceph-volume lvm create --bluestore --data VOLUME_GROUP/LOGICAL_VOLUME
示例
[root@osd ~]# ceph-volume lvm create --bluestore --data example_vg/data_lv
其它资源
- 如需更多详细信息,请参阅 Red Hat Ceph Storage 管理指南中的使用 'ceph-volume' 准备 Ceph OSD。
- 如需更多详细信息,请参阅 Red Hat Ceph Storage 管理指南中的使用 'ceph-volume' 激活 Ceph OSD。
1.5.6. 将批处理模式与 ceph-volume
搭配使用
当提供单一设备时,batch
子命令可自动创建多个 OSD。
ceph-volume
命令根据驱动器类型决定使用创建 OSD 的最佳方法。Ceph OSD 优化取决于可用的设备:
-
如果所有设备都是传统的硬盘驱动器,
batch
会为每个设备创建一个 OSD。 -
如果所有设备都是固态硬盘,则
batch
会为每个设备创建两个 OSD。 -
如果混合使用传统硬盘驱动器和固态驱动器,
batch
使用传统的硬盘驱动器用于数据,并在固态硬盘上创建最大可能的日志(block.db
)。
batch
子命令不支持为 write-ahead-log (block.wal
) 设备创建单独的逻辑卷。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 对 Ceph OSD 节点的 root 级别访问权限。
流程
在几个驱动器中创建 OSD:
语法
ceph-volume lvm batch --bluestore PATH_TO_DEVICE [PATH_TO_DEVICE]
示例
[root@osd ~]# ceph-volume lvm batch --bluestore /dev/sda /dev/sdb /dev/nvme0n1
其它资源
- 如需更多详细信息,请参阅 Red Hat Ceph Storage 管理指南中的使用 'ceph-volume' 创建 Ceph OSD。
1.5.7. 使用命令行界面添加 Ceph OSD
以下是手动将 OSD 添加到 Red Hat Ceph Storage 的高级别工作流:
-
安装
ceph-osd
软件包并创建新的 OSD 实例。 - 准备并挂载 OSD 数据和日志驱动器。
- 创建卷组和逻辑卷。
- 添加新 OSD 节点到 CRUSH map。
- 更新所有者和组权限。
-
启用并启动
ceph-osd
守护进程。
ceph-disk
命令已弃用。ceph-volume
命令现在是从命令行界面部署 OSD 的首选方法。目前,ceph-volume
命令只支持 lvm
插件。红帽在整个指南中提供了使用两个命令作为参考的示例,允许存储管理员将依赖 ceph-disk
的任何自定义脚本转换为 ceph-volume
。
对于自定义存储集群名称,请将 --cluster CLUSTER_NAME
选项与 ceph
和 ceph-osd
命令搭配使用。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 请参阅 Red Hat Ceph Storage 安装指南中的安装 Red Hat Ceph Storage 的要求。
-
新节点的
root
访问权限。 -
可选。如果您不希望
ceph-volume
实用程序自动创建卷组和逻辑卷,请手动创建它们。请参阅 Red Hat Enterprise Linux 8 配置和管理逻辑卷指南。
流程
启用 Red Hat Ceph Storage 4 OSD 软件存储库。
Red Hat Enterprise Linux 7
[root@osd ~]# subscription-manager repos --enable=rhel-7-server-rhceph-4-osd-rpms
Red Hat Enterprise Linux 8
[root@osd ~]# subscription-manager repos --enable=rhceph-4-osd-for-rhel-8-x86_64-rpms
创建
/etc/ceph/
目录:[root@osd ~]# mkdir /etc/ceph
在新 OSD 节点上,从其中一个 Ceph 监控节点复制 Ceph 管理密钥环和配置文件:
语法
scp USER_NAME @ MONITOR_HOST_NAME :/etc/ceph/CLUSTER_NAME.client.admin.keyring /etc/ceph scp USER_NAME @ MONITOR_HOST_NAME :/etc/ceph/CLUSTER_NAME.conf /etc/ceph
示例
[root@osd ~]# scp root@node1:/etc/ceph/ceph.client.admin.keyring /etc/ceph/ [root@osd ~]# scp root@node1:/etc/ceph/ceph.conf /etc/ceph/
在新的 Ceph OSD 节点上安装
ceph-osd
软件包:Red Hat Enterprise Linux 7
[root@osd ~]# yum install ceph-osd
Red Hat Enterprise Linux 8
[root@osd ~]# dnf install ceph-osd
准备 OSD。
使用之前创建的逻辑卷:
语法
ceph-volume lvm prepare --bluestore --data VOLUME_GROUP/LOGICAL_VOLUME
为
ceph-volume
指定原始设备以自动创建逻辑卷:语法
ceph-volume lvm prepare --bluestore --data /PATH_TO_DEVICE
如需了解更多详细信息,请参阅准备 OSD 部分。
设置
noup
选项:[root@osd ~]# ceph osd set noup
激活新 OSD:
语法
ceph-volume lvm activate --bluestore OSD_ID OSD_FSID
示例
[root@osd ~]# ceph-volume lvm activate --bluestore 4 6cc43680-4f6e-4feb-92ff-9c7ba204120e
如需了解更多详细信息,请参阅 激活 OSD 部分。
注意您可以使用一个命令准备并激活 OSD。详情请参阅创建 OSD 部分。或者,您可以使用单个命令指定多个驱动器并创建 OSD。请参阅使用
batch
模式。将 OSD 添加到 CRUSH map。如果指定了多个存储桶,命令会将 OSD 放置到您指定的特定存储桶中,并且会将存储桶移到您指定的任何其他 bucket 下。
语法
ceph osd crush add OSD_ID WEIGHT [ BUCKET_TYPE = BUCKET_NAME ...]
示例
[root@osd ~]# ceph osd crush add 4 1 host=node4
注意如果指定了多个存储桶,命令会将 OSD 放置到您指定的特定存储桶中,并且会将存储桶移到您指定的任何其他 bucket 下。
注意您也可以手动编辑 CRUSH map。请参阅 Red Hat Ceph Storage 策略指南中的编辑 CRUSH map 部分。
重要如果您仅指定根存储桶,则 OSD 会直接附加到 root,但 CRUSH 规则预期 OSD 在主机 bucket 内。
取消设置
noup
选项:[root@osd ~]# ceph osd unset noup
为新创建的目录更新所有者和组权限:
语法
chown -R OWNER : GROUP PATH_TO_DIRECTORY
示例
[root@osd ~]# chown -R ceph:ceph /var/lib/ceph/osd [root@osd ~]# chown -R ceph:ceph /var/log/ceph [root@osd ~]# chown -R ceph:ceph /var/run/ceph [root@osd ~]# chown -R ceph:ceph /etc/ceph
如果您使用带有自定义名称的存储集群,请在适当的文件中添加以下行:
[root@osd ~]# echo "CLUSTER=CLUSTER_NAME" >> /etc/sysconfig/ceph
将
CLUSTER_NAME
替换为自定义存储集群名称。为确保新 OSD
已启动
并准备好接收数据,请启用并启动 OSD 服务:语法
systemctl enable ceph-osd@OSD_ID systemctl start ceph-osd@OSD_ID
示例
[root@osd ~]# systemctl enable ceph-osd@4 [root@osd ~]# systemctl start ceph-osd@4
其它资源
- 如需更多信息,请参阅 Red Hat Ceph Storage 策略指南中的编辑 CRUSH map 部分。
-
有关使用
ceph-volume
命令的更多信息,请参阅 Red Hat Ceph Storage 管理指南。
1.5.8. 使用容器化环境中的命令行界面添加 Ceph OSD
您可以使用容器化 Red Hat Ceph Storage 集群中的命令行界面手动添加一个或多个 Ceph OSD。
红帽建议使用 ceph-ansible
添加 Ceph OSD,除非存在异常或需要手动添加 Ceph OSD 的具体用例。如果您不确定,请联系红帽支持团队。
先决条件
- 在容器化环境中运行的 Red Hat Ceph Storage 集群。
- 具有对容器节点的 root 访问权限。
- 现有的 OSD 节点。
以下示例在 Red Hat Enterprise Linux 8 上运行。在 Red Hat Enterprise Linux 8 中,podman 是默认服务,并替换了旧的 docker 服务。如果您在 Red Hat Enterprise Linux 7 上运行,则使用 docker 替换 podman 来执行给定的命令。
流程
要创建单个 OSD,请执行
lvm prepare
命令:语法
podman run --rm --net=host --privileged=true --pid=host --ipc=host -v /dev:/dev -v /etc/localtime:/etc/localtime:ro -v /var/lib/ceph:/var/lib/ceph:z -v /etc/ceph:/etc/ceph:z -v /var/run/ceph:/var/run/ceph:z -v /var/run/udev/:/var/run/udev/ -v /var/log/ceph:/var/log/ceph:z -v /run/lvm/:/run/lvm/ --entrypoint=ceph-volume PATH_TO_IMAGE --cluster CLUSTER_NAME lvm prepare --bluestore --data PATH_TO_DEVICE --no-systemd
示例
[root@osd ~]# podman run --rm --net=host --privileged=true --pid=host --ipc=host -v /dev:/dev -v /etc/localtime:/etc/localtime:ro -v /var/lib/ceph:/var/lib/ceph:z -v /etc/ceph:/etc/ceph:z -v /var/run/ceph:/var/run/ceph:z -v /var/run/udev/:/var/run/udev/ -v /var/log/ceph:/var/log/ceph:z -v /run/lvm/:/run/lvm/ --entrypoint=ceph-volume registry.redhat.io/rhceph/rhceph-4-rhel8:latest --cluster ceph lvm prepare --bluestore --data /dev/sdh --no-systemd
此示例准备一个 Bluestore Ceph OSD,其数据位于
/dev/sdh
中。注意要启用并启动 OSD,请执行以下命令:
示例
[root@osd ~]# systemctl enable ceph-osd@4 [root@osd ~]# systemctl start ceph-osd@4
您还可以使用以下可选参数:
- dmcrypt
- 描述
- 为底层 OSD 设备启用加密。
- block.db
- 描述
- 到 bluestore block.db 逻辑卷或分区的路径。
- block.wal
- 描述
- 到 bluestore block.wal 逻辑卷或分区的路径。
要创建多个 Ceph OSD,请执行
lvm batch
命令:语法
podman run --rm --net=host --privileged=true --pid=host --ipc=host -v /dev:/dev -v /etc/localtime:/etc/localtime:ro -v /var/lib/ceph:/var/lib/ceph:z -v /etc/ceph:/etc/ceph:z -v /var/run/ceph:/var/run/ceph:z -v /var/run/udev/:/var/run/udev/ -v /var/log/ceph:/var/log/ceph:z -v /run/lvm/:/run/lvm/ --entrypoint=ceph-volume PATH_TO_IMAGE --cluster CLUSTER_NAME lvm batch --bluestore --yes --prepare _PATH_TO_DEVICE PATH_TO_DEVICE --no-systemd
示例
[root@osd ~]# podman run --rm --net=host --privileged=true --pid=host --ipc=host -v /dev:/dev -v /etc/localtime:/etc/localtime:ro -v /var/lib/ceph:/var/lib/ceph:z -v /etc/ceph:/etc/ceph:z -v /var/run/ceph:/var/run/ceph:z -v /var/run/udev/:/var/run/udev/ -v /var/log/ceph:/var/log/ceph:z -v /run/lvm/:/run/lvm/ --entrypoint=ceph-volume registry.redhat.io/rhceph/rhceph-4-rhel8:latest --cluster ceph lvm batch --bluestore --yes --prepare /dev/sde /dev/sdf --no-systemd
这个示例使用
/dev/sde
和/dev/sdf
中的数据准备多个 Bluestore Ceph OSD。您还可以使用以下可选参数:
- dmcrypt
- 描述
- 为底层 OSD 设备启用加密。
- db-devices
- 描述
- 到 bluestore block.db 逻辑卷或分区的路径。
- wal-devices
- 描述
- 到 bluestore block.wal 逻辑卷或分区的路径。
1.5.9. 使用 Ansible 删除 Ceph OSD
有时,您可能需要缩减 Red Hat Ceph Storage 集群的容量。要使用 Ansible 从 Red Hat Ceph Storage 集群中删除 OSD,请运行 shrink-osd.yml
playbook。
从存储集群移除 OSD 将破坏该 OSD 中包含的所有数据。
在移除 OSD 前,请验证集群有足够的空间来重新平衡。
除非您要确保 PG 处于 active+clean
状态,否则 OSD 不会同时删除 OSD,否则 OSD 不包含同一对象的副本或纠删代码分片。如果不确定,请联系红帽支持 团队。
先决条件
- 一个由 Ansible 部署的、正在运行的 Red Hat Ceph Storage。
- 正在运行的 Ansible 管理节点。
流程
进入到
/usr/share/ceph-ansible/
目录。语法
[user@admin ~]$ cd /usr/share/ceph-ansible
-
将 Ceph 监控节点上的
/etc/ceph/
中的 admin keyring 复制到包含您要删除的 OSD 的节点。 为 Ceph 的正常或容器化部署运行 Ansible playbook:
语法
ansible-playbook infrastructure-playbooks/shrink-osd.yml -e osd_to_kill=ID -u ANSIBLE_USER_NAME -i hosts
替换:
-
带有 OSD 节点的 ID 的
ID
。要删除多个 OSD,请将 OSD ID 与逗号分开。 -
ANSIBLE_USER_NAME
,Ansible 用户的名称。
示例
[user@admin ceph-ansible]$ ansible-playbook infrastructure-playbooks/shrink-osd.yml -e osd_to_kill=1 -u user -i hosts
-
带有 OSD 节点的 ID 的
验证 OSD 是否已成功移除:
语法
[root@mon ~]# ceph osd tree
其它资源
- Red Hat Ceph Storage 安装指南.
- 如需了解有关 Ansible 清单配置的更多详细信息,请参阅 {storage_product} 安装指南中的配置 Ansible 清单位置部分。
1.5.10. 使用命令行界面删除 Ceph OSD
从存储集群中移除 OSD 涉及这些步骤:* 更新 cluster map。* 删除其验证密钥。* 从 OSD map 移除 OSD。* 从 ceph.conf
文件中删除 OSD。
如果 OSD 节点有多个驱动器,您可能需要为您要删除的每个 OSD 重复此步骤来为每个驱动器移除 OSD。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
-
有足够的 OSD,使得存储集群不达到
接近全满
比率。 - 对 OSD 节点的 root 级别访问。
流程
禁用和停止 OSD 服务:
语法
systemctl disable ceph-osd@OSD_ID systemctl stop ceph-osd@OSD_ID
示例
[root@osd ~]# systemctl disable ceph-osd@4 [root@osd ~]# systemctl stop ceph-osd@4
OSD 停止后,它会
关闭
。从存储集群中移除 OSD:
语法
ceph osd out OSD_ID
示例
[root@osd ~]# ceph osd out 4
重要删除 OSD 后,Ceph 会开始重新平衡数据,并将数据复制到存储集群中剩余的 OSD。红帽建议等待存储集群变为
active+clean
,然后再继续下一步。要观察数据迁移,请运行以下命令:语法
[root@mon ~]# ceph -w
从 CRUSH map 移除 OSD,使它不再接收数据。
语法
ceph osd crush remove OSD_NAME
示例
[root@osd ~]# ceph osd crush remove osd.4
注意要手动删除 OSD 和包含它的存储桶,您还可以解译 CRUSH map,从设备列表中删除 OSD,将设备移除为主机存储桶,或者移除主机存储桶。如果它位于 CRUSH map 中,并且您想要删除主机,则重新编译该映射并设置它。详情请参阅 Storage 策略指南中的反编译 CRUSH map 的说明。
移除 OSD 身份验证密钥:
语法
ceph auth del osd.OSD_ID
示例
[root@osd ~]# ceph auth del osd.4
删除 OSD:
语法
ceph osd rm OSD_ID
示例
[root@osd ~]# ceph osd rm 4
编辑存储集群的配置文件。文件的默认名称为
/etc/ceph/ceph.conf
。如果存在,请删除文件中的 OSD 条目:示例
[osd.4] host = _HOST_NAME_
-
如果手动添加了 OSD,删除对
/etc/fstab
文件中的 OSD 的引用。 将更新后的配置文件复制到存储集群中所有节点的
/etc/ceph/
目录中。语法
scp /etc/ceph/CLUSTER_NAME.conf USER_NAME@HOST_NAME:/etc/ceph/
示例
[root@osd ~]# scp /etc/ceph/ceph.conf root@node4:/etc/ceph/
1.5.11. 使用命令行界面替换 BlueStore 数据库磁盘
当替换 BlueStore DB 设备 block.db
中包含 BlueStore OSD 的内部元数据时,红帽支持使用 Ansible 和命令行界面 (CLI) 重新部署所有 OSD。一个被破坏的 block.db
文件会影响到包括在那个 block.db
文件包含的所有 OSD。
替换 BlueStore block.db
磁盘的步骤是,标记每个设备,等待数据在集群中复制,替换 OSD,再重新标记它。您可以保留 OSD_ID
,并使用所替换磁盘上的新 block.db
分区重新创建 OSD。虽然这只是一个简单的流程,但需要大量数据迁移。
如果 block.db
设备具有多个 OSD,则对 block.db
设备上的每个 OSD 遵循这个步骤。您可以运行 ceph-volume lvm list
来查看 block.db
到块的关系。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 带分区的存储设备。
- 所有节点的根级别访问权限。
流程
检查 monitor 节点上的当前 Ceph 集群状态:
[root@mon ~]# ceph status [root@mon ~]# ceph df
识别要替换的 OSD 失败:
[root@mon ~]# ceph osd tree | grep -i down
在 OSD 节点上停止并禁用 OSD 服务:
语法
systemctl disable ceph-osd@OSD_ID systemctl stop ceph-osd@OSD_ID
示例
[root@osd1 ~]# systemctl stop ceph-osd@1 [root@osd1 ~]# systemctl disable ceph-osd@1
在监控节点上设置 OSD
out
:语法
ceph osd out OSD_ID
示例
[root@mon ~]# ceph osd out 1
等待数据从 OSD 迁出:
语法
while ! ceph osd safe-to-destroy OSD_ID ; do sleep 60 ; done
示例
[root@mon ~]# while ! ceph osd safe-to-destroy 1 ; do sleep 60 ; done
停止 OSD 节点上的 OSD 守护进程:
语法
systemctl kill ceph-osd@OSD_ID
示例
[root@osd1 ~]# systemctl kill ceph-osd@1
记录此 OSD 使用的设备:
语法
mount | grep /var/lib/ceph/osd/ceph-OSD_ID
示例
[root@osd1 ~]# mount | grep /var/lib/ceph/osd/ceph-1
卸载 OSD 节点上的故障驱动器路径的挂载点:
语法
umount /var/lib/ceph/osd/CLUSTER_NAME-OSD_ID
示例
[root@osd1 ~] #umount /var/lib/ceph/osd/ceph-1
设置
noout
和norebalance
以避免回填和重新平衡:[root@mon ~]# ceph osd set noout [root@mon ~]# ceph osd set norebalance
-
替换物理驱动器。请参阅硬件厂商的文档。在继续操作前,等待新驱动器出现在
/dev/
目录下,并记录下驱动器路径。 销毁 monitor 节点上的 OSD:
语法
ceph osd destroy OSD_ID --yes-i-really-mean-it
示例
[root@mon ~]# ceph osd destroy 1 --yes-i-really-mean-it
重要此步骤会破坏设备的内容。确保不需要该设备中的数据,且集群处于健康状态。
删除 OSD 磁盘中的逻辑卷管理器:
语法
lvremove /dev/VOLUME_GROUP/LOGICAL_VOLUME vgremove VOLUME_GROUP pvremove /dev/DEVICE
示例
[root@osd1 ~]# lvremove /dev/data-vg1/data-lv1 [root@osd1 ~]# vgremove data-vg1 [root@osd1 ~]# pvremove /dev/sdb
在 OSD 节点上 zap OSD 磁盘:
语法
ceph-volume lvm zap DEVICE
示例
[root@osd1 ~]# ceph-volume lvm zap /dev/sdb
在 OSD 磁盘上重新创建 lvm:
语法
pvcreate /dev/DEVICE vgcreate VOLUME_GROUP /dev/DEVICE lvcreate -l SIZE -n LOGICAL_VOLUME VOLUME_GROUP
示例
[root@osd1 ~]# pvcreate /dev/sdb [root@osd1 ~]# vgcreate data-vg1 /dev/sdb [root@osd1 ~]# lvcreate -l 100%FREE -n data-lv1 data-vg1
在新的
block.db
磁盘上创建 lvm:语法
pvcreate /dev/DEVICE vgcreate VOLUME_GROUP_DATABASE /dev/DEVICE lvcreate -Ll SIZE -n LOGICAL_VOLUME_DATABASE VOLUME_GROUP_DATABASE
示例
[root@osd1 ~]# pvcreate /dev/sdb [root@osd1 ~]# vgcreate db-vg1 /dev/sdb [root@osd1 ~]# lvcreate -l 100%FREE -n lv-db1 db-vg1
在 OSD 节点上重新创建 OSD:
语法
ceph-volume lvm create --bluestore --osd-id OSD_ID --data VOLUME_GROUP/LOGICAL_VOLUME --block.db VOLUME_GROUP_DATABASE/LOGICAL_VOLUME_DATABASE
示例
[root@osd1 ~]# ceph-volume lvm create --bluestore --osd-id 1 --data data-vg1/data-lv1 --block.db db-vg1/db-lv1
注意红帽建议使用与前面步骤中销毁相同的 OSD_ID。
在 OSD 节点上启动并启用 OSD 服务:
语法
systemctl start ceph-osd@OSD_ID systemctl enable ceph-osd@OSD_ID
示例
[root@osd1 ~]# systemctl start ceph-osd@1 [root@osd1 ~]# systemctl enable ceph-osd@1
检查 CRUSH 层次结构以确保 OSD 在集群中:
[root@mon ~]# ceph osd tree
取消设置 noout 和 norebalance:
[root@mon ~]# ceph osd unset noout [root@mon ~]# ceph osd unset norebalance
监控集群状态,直到
HEALTH_OK
为止:[root@mon ~]# watch -n2 ceph -s
其它资源
- 如需更多信息,请参阅 Red Hat Ceph Storage 安装指南中的安装 Red Hat Ceph Storage 集群。
1.5.12. 观察数据迁移
将 OSD 添加到 CRUSH map 时,Ceph 开始通过将放置组迁移到新的或现有的 OSD 来重新平衡数据。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 最近添加或删除 OSD。
流程
观察数据迁移:
[root@monitor ~]# ceph -w
-
在迁移完成后,观察放置组状态从
active+clean
变为active, some degraded objects
,最终变为active+clean
。 -
要退出,请按
Ctrl + C
。