.. _add_ceph_osds_lvm:
=======================
添加Ceph OSDs (LVM卷)
=======================
.. note::
我在 :ref:`add_ceph_osds_raw` 遇到了重启后无法正确挂载 ``/var/lib/ceph/osd/ceph-0`` 问题,暂时无法解决。所以回归最标准的采用 :ref:`linux_lvm` 卷作为底层的方法,重试尽快部署完Ceph,进入下阶段测试。后续再做方案完善...`
在完成了初始 :ref:`install_ceph_mon` 之后,就可以添加 OSDs。只有完成了足够的OSDs部署(满足对象数量,例如 ``osd pool default size =2`` 要求集群至少具备2个OSDs)才能达到 ``active + clean`` 状态。在完成了 ``bootstap`` Ceph monitor之后,集群就具备了一个默认的 ``CRUSH`` map,但是此时 ``CRUSH`` map还没有具备任何Ceph OSD Daemons map到一个Ceph节点。
Ceph提供了一个 ``ceph-vlume`` 工具,用来准备一个逻辑卷,磁盘或分区给Ceph使用,通过增加索引来创建OSD ID,并且将新的OSD添加到CRUSH map。需要在每个要添加OSD的节点上执行该工具。
.. note::
我有3个服务器节点提供存储,需要分别在这3个节点上部署OSD服务。
.. note::
Ceph官方文档的案例都是采用 ``ceph-volume lvm`` 来完成的,这个命令可以在Ceph的OSD底层构建一个 :ref:`linux_lvm` ,带来的优势是可以随时扩容底层存储容量,对后续运维带来极大便利。在生产环境中部署,建议使用 ``lvm`` 卷。
我这里的测试环境,采用简化的 ``磁盘分区`` 来提供Ceph :ref:`bluestore` 存储,原因是我需要简化配置,同时我的测试服务器也没有硬件进行后续扩容。
bluestore
============
:ref:`bluestore` 是最新的Ceph采用的默认高性能存储引擎,底层不再使用OS的文件系统,可以直接管理磁盘硬件。
需要部署OSD的服务器首先准备存储,通常采用LVM卷作为底层存储块设备,这样可以通过LVM逻辑卷灵活调整块设备大小(有可能随着数据存储增长需要调整设备)。
作为我的实践环境 :ref:`hpe_dl360_gen9` 每个 :ref:`ovmf` 虚拟机仅有一个pass-through PCIe NVMe存储,所以我没有划分不同存储设备来分别存放 ``block`` / ``block.db`` 和 ``block.wal`` 。采用LVM可以不断扩容底层存储,所以即使开始时候磁盘空间划分较小也没有关系。我这次实践采用划分500GB作为初始分区,后续我将实践在线扩容。
使用LVM作为bluestore底层
-----------------------------------
- 执行 ``ceph-volume --help`` 可以看到支持3种底层存储::
lvm Use LVM and LVM-based technologies to deploy OSDs
simple Manage already deployed OSDs with ceph-volume
raw Manage single-device OSDs on raw block devices
我这里构建实践采用 ``ceph-volume lvm`` ,这个命令会自动创建底层 :ref:`linux_lvm`
.. note::
生产环境请使用LVM卷作为底层设备 - 参考 :ref:`bluestore_config`
我的部署实践是在3台虚拟机 ``z-b-data-1`` / ``z-b-data-2`` / ``z-b-data-3`` 上完成,分区完全一致
- 准备底层块设备,这里划分 GPT 分区1 ::
sudo parted /dev/nvme0n1 mklabel gpt
sudo parted -a optimal /dev/nvme0n1 mkpart primary 0% 500GB
完成后检查 ``fdisk -l`` 可以看到::
Disk /dev/nvme0n1: 953.89 GiB, 1024209543168 bytes, 2000409264 sectors
Disk model: SAMSUNG MZVL21T0HCLR-00B00
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: BF78F6A8-7654-4646-83B7-8331F77921E1
Device Start End Sectors Size Type
/dev/nvme0n1p1 2048 976562175 976560128 465.7G Linux filesystem
.. note::
以上分区操作在3台存储虚拟机上完成
- 创建第一个OSD,注意我使用了统一的 ``data`` 存储来存放所有数据,包括 ``block.db`` 和 ``block.wal`` ::
sudo ceph-volume lvm create --bluestore --data /dev/nvme0n1p1
.. note::
``ceph-volume raw -h`` 包含子命令::
list list BlueStore OSDs on raw devices
prepare Format a raw device and associate it with a (BlueStore) OSD
activate Discover and prepare a data directory for a (BlueStore) OSD on a raw device
``ceph-volume lvm -h`` 包含子命令::
activate Discover and mount the LVM device associated with an OSD ID and start the Ceph OSD
deactivate Deactivate OSDs
batch Automatically size devices for multi-OSD provisioning with minimal interaction
prepare Format an LVM device and associate it with an OSD
create Create a new OSD from an LVM device
trigger systemd helper to activate an OSD
list list logical volumes and devices associated with Ceph
zap Removes all data and filesystems from a logical volume or partition.
migrate Migrate BlueFS data from to another LVM device
new-wal Allocate new WAL volume for OSD at specified Logical Volume
new-db Allocate new DB volume for OSD at specified Logical Volume
对于 ``raw`` 命令需要分步骤完成,不像 ``lvm`` 命令提供了更为丰富的批量命令
提示信息:
.. literalinclude:: add_ceph_osds_lvm/ceph-volume_lvm.txt
:language: bash
:linenos:
:caption: ceph-volume lvm create 输出
- 检查osd 卷设备::
sudo ceph-volume lvm list
可以看到设备文件如下::
====== osd.0 =======
[block] /dev/ceph-b7d91a2a-72ca-488b-948f-c42613698cca/osd-block-33b7d928-8075-4531-9177-9253a71dec84
block device /dev/ceph-b7d91a2a-72ca-488b-948f-c42613698cca/osd-block-33b7d928-8075-4531-9177-9253a71dec84
block uuid T3vB57-w3fx-7g7r-Zgk6-ZqJK-Ijrc-zy3LZW
cephx lockbox secret
cluster fsid 0e6c8b6f-0d32-4cdb-a45d-85f8c7997c17
cluster name ceph
crush device class None
encrypted 0
osd fsid 33b7d928-8075-4531-9177-9253a71dec84
osd id 0
osdspec affinity
type block
vdo 0
devices /dev/nvme0n1p1
使用 ``ceph-volume lvm create`` 命令有以下优点:
- OSD自动激活并运行
- 自动添加了 :ref:`systemd` 对应服务配置,所以操作系统重启不会遇到我之前 :ref:`add_ceph_osds_raw` 中无法正确挂载卷和运行OSD的问题
- 检查集群状态::
sudo ceph -s
可以看到OSD已经运行::
cluster:
id: 0e6c8b6f-0d32-4cdb-a45d-85f8c7997c17
health: HEALTH_WARN
Reduced data availability: 1 pg inactive
Degraded data redundancy: 1 pg undersized
OSD count 1 < osd_pool_default_size 3
services:
mon: 1 daemons, quorum z-b-data-1 (age 47m)
mgr: z-b-data-1(active, since 36m)
osd: 1 osds: 1 up (since 6m), 1 in (since 6m)
data:
pools: 1 pools, 1 pgs
objects: 0 objects, 0 B
usage: 1.0 GiB used, 465 GiB / 466 GiB avail
pgs: 100.000% pgs not active
1 undersized+peered
- 检查OSD状态::
sudo ceph osd tree
可以看到::
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0.45470 root default
-3 0.45470 host z-b-data-1
0 ssd 0.45470 osd.0 up 1.00000 1.00000
请注意,现在只有一个OSD运行,不满足配置中要求3个副本的要求,我们需要添加OSD节点
重启操作系统验证
======================
重启操作系统 ``sudo shutdown -r now``
- 启动后检查::
sudo ceph -s
可以看到 ``ceph-volume lvm`` 默认配置非常方便,重启后系统服务正常,OSD也能正常运行::
cluster:
id: 0e6c8b6f-0d32-4cdb-a45d-85f8c7997c17
health: HEALTH_WARN
Reduced data availability: 1 pg inactive
Degraded data redundancy: 1 pg undersized
OSD count 1 < osd_pool_default_size 3
services:
mon: 1 daemons, quorum z-b-data-1 (age 82m)
mgr: z-b-data-1(active, since 81m)
osd: 1 osds: 1 up (since 82m), 1 in (since 100m)
data:
pools: 1 pools, 1 pgs
objects: 0 objects, 0 B
usage: 1.0 GiB used, 465 GiB / 466 GiB avail
pgs: 100.000% pgs not active
1 undersized+peered
上述 ``HEALTH_WARN`` 暂时不用顾虑,原因是OSD数量尚未满足配置3副本要求,后续将会配置补上。根据目前输出信息,3个服务都已经启动::
services:
mon: 1 daemons, quorum z-b-data-1 (age 82m)
mgr: z-b-data-1(active, since 81m)
osd: 1 osds: 1 up (since 82m), 1 in (since 100m)
添加OSD
=======================
需要满足3副本要求,我们需要在服务器本地或者其他服务器上添加OSD。为了能够冗余,我采用集群3个服务器上每个服务器都启动 ``ceph-mon`` 和 ``ceph-osd`` ,所以下面我们来完成:
- :ref:`add_ceph_mons`
然后再执行:
- :ref:`add_ceph_osds_more`
参考
=======
- `Ceph document - Installation (Manual) `_
- `raw osd's are not started on boot after upgrade from 14.2.11 to 14.2.16 ; ceph-volume raw activate claim systemd support not yet implemented `_