在Linux上安装并挂载Ceph构建和CephFS文件系统
首先
Ceph是一种分布式存储的开源软件,提供了以下三种接口。
※以下是筆者對每個項目的粗略認識,可能存在錯誤。
-
- (1) RADOS(Reliable Autonomic Distributed Object Store)
オブジェクトストレージ。AWSでいうS3、AzureだとBlob Storageのようなもの
(2) RBD(RADOS Block Device)
デバイス。パソコンの内蔵ハードディスクや外付けハードディスクのようなもの(/dev/sdaとして認識されるような感じ)
(3) CephFS(Ceph File System)
ネットワーク経由で他のマシンと共有可能なファイルシステム。Samba(CIFS)、NFSのようなもの
Ceph是一款非常有趣的软件,它具备通过扩展存储容量、数据冗余来抵御故障等功能。
在本文章中,我们将介绍如何在Linux机器上构建以下Ceph环境。
-
- Ceph本体の構築。Cephadmを利用
-
- CephのファイルシステムCephFSの構築とマウント方法
最初にご紹介したインターフェイスの(3)相当
顺便提一下,使用RBD(RADOS块设备)的步骤在这篇文章中有详细介绍。
请确认环境是否适合动作。
構築Ceph的主要机器(MON,MNG,OSD等)
-
- Raspberry Pi 4 Model B 4GB
-
- OS : Ubuntu 22.04 LTS
- CPUアーキテクチャ : arm64
与OSD进行连接的磁盘(存储)
-
- Seagate BarraCuda
-
- 型名 : ST2000DM005
- 容量 : 2TB
这个硬盘被识别为“构建Ceph的机器”的设备,并且还没有构建文件系统。
$ sudo parted -l
(出力省略)
Error: /dev/sda: unrecognised disk label
Model: Logitec (scsi)
Disk /dev/sda: 2000GB
Sector size (logical/physical): 512B/4096B
Partition Table: unknown
Disk Flags:
(出力省略)
所有工具的版本
-
- Ceph : 17.2.5
- Docker : 20.10.23
Ceph的设置
Cephadm的安装。
这个工具用于构建Ceph的整个环境。(官方网站)
$ sudo apt update
$ sudo apt -y install cephadm
安装Ceph
用于操作Ceph环境。
$ sudo apt -y install ceph
尽管cephadm shell — ceph …也可以执行相同的操作,但是由于每次命令太长,使用ceph更加方便。
创建Ceph的新集群
根据官方网站的说明执行bootstrap命令。
请将待构建机器的IP地址填写在中。
$ sudo cephadm bootstrap --mon-ip *<mon-ip>*
[参考]检查集群启动情况
我們將檢查使用Bootstrap啟動的容器和服務。
※這是一個可選的步驟,並不是必需的設置。
Ceph Dashboardへアクセス
URL : https://[mon-ip]:8443/
UsernameとPasswordはbootstrap時に出力されたものを入力
初回ログイン後はパスワードの変更が必要
コンテナの起動確認
$ sudo docker ps -a | grep -e ^CONTAINER -e ceph
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2f579044e7bc quay.io/prometheus/alertmanager:v0.23.0 "/bin/alertmanager -…" 3 minutes ago Up 3 minutes ceph-[fsid]-alertmanager-ubuntu
a49f3e57be32 quay.io/ceph/ceph-grafana:8.3.5 "/bin/sh -c 'grafana…" 3 minutes ago Up 3 minutes ceph-[fsid]-grafana-ubuntu
584bbdeb7bc1 quay.io/prometheus/prometheus:v2.33.4 "/bin/prometheus --c…" 3 minutes ago Up 3 minutes ceph-[fsid]-prometheus-ubuntu
e24e16294c20 quay.io/prometheus/node-exporter:v1.3.1 "/bin/node_exporter …" 4 minutes ago Up 4 minutes ceph-[fsid]-node-exporter-ubuntu
0724377abf29 quay.io/ceph/ceph "/usr/bin/ceph-crash…" 4 minutes ago Up 4 minutes ceph-[fsid]-crash-ubuntu
0734e3708aef quay.io/ceph/ceph:v17 "/usr/bin/ceph-mgr -…" 8 minutes ago Up 8 minutes ceph-[fsid]-mgr-ubuntu-wtdnix
05aaf49dc3ab quay.io/ceph/ceph:v17 "/usr/bin/ceph-mon -…" 8 minutes ago Up 8 minutes ceph-[fsid]-mon-ubuntu
- サービスの起動確認
$ sudo systemctl list-units --type=service | grep ceph
ceph-[fsid]@alertmanager.ubuntu.service loaded active running Ceph alertmanager.ubuntu for [fsid]
ceph-[fsid]@crash.ubuntu.service loaded active running Ceph crash.ubuntu for [fsid]
ceph-[fsid]@grafana.ubuntu.service loaded active running Ceph grafana.ubuntu for [fsid]
ceph-[fsid]@mgr.ubuntu.wtdnix.service loaded active running Ceph mgr.ubuntu.wtdnix for [fsid]
ceph-[fsid]@mon.ubuntu.service loaded active running Ceph mon.ubuntu for [fsid]
ceph-[fsid]@node-exporter.ubuntu.service loaded active running Ceph node-exporter.ubuntu for [fsid]
ceph-[fsid]@prometheus.ubuntu.service loaded active running Ceph prometheus.ubuntu for [fsid]
似乎,Ceph的各个容器正在使用systemd服务进行监控。
添加OSD
我们会向Ceph主体添加存储空间。在增加存储空间时,我们会使用一个叫做OSD(对象存储设备守护进程)的工具。根据“DEPLOY OSDS”中的内容,我们会执行相应的命令。
让Ceph识别可用的存储设备
$ sudo ceph orch apply osd --all-available-devices
Scheduled osd.all-available-devices update...
當你確認後,你會看到以下可使用的儲存空間。
$ sudo ceph orch device ls --refresh
HOST PATH TYPE DEVICE ID SIZE AVAILABLE REFRESHED REJECT REASONS
[hostname] /dev/sda hdd 1Logitec_xxxxxxxxxxxxxxxx 2000G Yes 2s ago
添加操作系统显示
请使用下列命令添加OSD。
$ sudo ceph orch daemon add osd --method raw [hostname]:/dev/sda
(出力結果)
Created osd(s) 0 on host '[hostname]'
-
- 補足
[hostname]はceph orch device lsのHOSTに表示されたホスト名を入力
sudo ceph orch host lsでもCephが認識しているホスト名を確認可能
猜测:默认情况下使用LVM,假设要添加到OSD的设备是“逻辑卷(LVM)”,但这次使用的是物理卷,所以失败了。例如,通过VirtualBox创建的卷应该是LVM(大概),所以应该不需要指定“method raw”选项。
确认已添加的OSD
可以通过以下命令来进行确认。
$ sudo ceph osd stat
1 osds: 1 up (since 6m), 1 in (since 10m); epoch: e17
$ sudo ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 1.81940 root default
-3 1.81940 host [hostname]
0 hdd 1.81940 osd.0 up 1.00000 1.00000
顺便说一下,我也可以确认已经创建了osd-0的容器。
$ sudo docker ps -a | grep ceph | grep osd
cc5db04e2dac quay.io/ceph/ceph "/usr/bin/ceph-osd -…" 14 minutes ago Up 14 minutes ceph-[fsid]-osd-0
構築CephFS
-
- (1) RADOS poolの作成
-
- (2) ファイルシステムの作成
-
- (3) 作成したファイルシステムのMDS(=Metadata Server)をコンテナでデプロイ
- (4) マウントするユーザの作成
我們將按照以下順序進行解釋。
(1) 创建RADOS池
参考创建POOLS的方式,创建两个RADOS pool。
$ sudo ceph osd pool create cephfs_data
(出力結果)
pool 'cephfs_data' created
$ sudo ceph osd pool create cephfs_metadata
(出力結果)
pool 'cephfs_metadata' created
(2) 创建文件系统
参考 CREATING A FILE SYSTEM 进行命令执行。
$ sudo ceph fs new cephfs cephfs_metadata cephfs_data
(出力結果)
new fs with metadata pool 2 and data pool 1
确认已被创建
$ sudo ceph fs ls
name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
$ sudo ceph mds stat
cephfs:0
(3) 使用容器部署创建的文件系统的MDS。
使用下列命令在容器上部署在步骤(2)中创建的文件系统的MDS。
部署在容器中通过步骤(2)创建的文件系统的MDS,可使用以下指令完成。
$ sudo ceph orch apply mds cephfs --placement="1 [hostname]"
(出力結果)
Scheduled mds.cephfs update...
通过以上操作,Ceph集群的状态应如下所示。
$ sudo ceph -s
cluster:
id: xxxxxxxx-yyyy-zzzz-AAAA-BBBBBBBBBBBB
health: HEALTH_WARN
1 MDSs report slow metadata IOs
3 pool(s) have no replicas configured
OSD count 1 < osd_pool_default_size 3
services:
mon: 1 daemons, quorum [hostname] (age 2h)
mgr: [hostname].wtdnix(active, since 2h)
mds: 1/1 daemons up # 追加で起動!
osd: 1 osds: 1 up (since 50m), 1 in (since 54m) # 追加で起動!
data:
volumes: 1/1 healthy # 追加が反映!
pools: 3 pools, 65 pgs # 追加が反映!
objects: 24 objects, 451 KiB
usage: 8.1 MiB used, 1.8 TiB / 1.8 TiB avail # 追加が反映!
pgs: 65 active+clean
progress:
Global Recovery Event (0s)
[............................]
创建进行挂载的用户
根据挂载CephFS的”通用前提条件”,创建能够在CephFS上进行挂载的用户。
$ sudo ceph fs authorize cephfs client.user / rw \
| sudo tee /etc/ceph/ceph.client.user.keyring
(出力結果)
[client.user]
key = AQAOptVqae....
修改生成的密钥的权限。
$ sudo chmod 0600 /etc/ceph/ceph.client.user.keyring
您可以通过以下方式确认已添加到 Ceph 认证凭据的用户已经生效。
$ sudo ceph auth list
(出力省略)
client.user
key = AQAOptVqae....
caps: [mds] allow rw fsname=cephfs
caps: [mon] allow r fsname=cephfs
caps: [osd] allow rw tag cephfs data=cephfs
(出力省略)
挂载CephFS
终于准备好了安装要挂载的准备工作。虽然有多种挂载方法,但这次我们将使用“使用内核驱动程序挂载CEPHFS”的方法来进行挂载。
虽然官方网站上写了很多,但只需执行以下命令,应该就可以挂载成功了。
$ sudo mount -t ceph user@.cephfs=/ /path/to/mount
$ df -h
Filesystem Size Used Avail Use% Mounted on
...
[IP]:6789:/ 1.8T 0 1.8T 0% /path/to/mount
说明
user@.cephfs=/のフォーマット
user : 手順(4)で作成したマウント用のユーザ名
cephfs : 手順(2)で作成したファイルシステム名
/ : マウント元のパス
/path/to/mount
マウント先のパス。mkdir等で事前に作成が必要
为了确认如何使用-v选项进行挂载,试着卸载一次,然后检查。
$ sudo umount /path/to/mount
$ sudo mount -t ceph user@.cephfs=/ /path/to/mount -v
(出力結果)
parsing options: rw,secret=AQAOptVqae....
mount.ceph: resolved to: "[IP]:3300"
mount.ceph: trying mount with new device syntax: user@[fsid].cephfs=/
mount.ceph: options "name=user,ms_mode=prefer-crc,key=user,mon_addr=[IP]:3300" will pass to kernel
mount.ceph: switching to using v1 address with old syntax
mount.ceph: resolved to: "[IP]:6789"
mount.ceph: trying mount with old device syntax: [IP]:6789:/
mount.ceph: options "name=user,key=user,mds_namespace=cephfs,fsid=[fsid]" will pass to kernel
从输出结果来看,我们可以发现mount.ceph命令可以找到在mount命令中没有指定的监视器IP、FSID和保密信息等。关于这方面的内容,可以参考《MOUNT.CEPH – MOUNT A CEPH FILE SYSTEM》等文档进行了解。
顺便提一下,您也可以通过参数来指定以下所有的信息。
$ sudo mount -t ceph \
user@[fsid].cephfs=/ \
/path/to/mount \
-o mon_addr=[IP]:6789,secret=AQAOptVqae....
可能有用的安装设置
在/etc/fstab中的配置
我已经在网站上解释了,但是你可以在/etc/fstab中进行以下的追加,并成功挂载。
[IP]:6789:/ /path/to/mount ceph name=user 0 0
还有,可以省略(IP): 6789,在下面也可以。
:/ /path/to/mount ceph name=user 0 0
使用autofs进行配置
在autofs的情况下,在指定挂载路径的文件中追加以下内容,即可进行挂载。
与fstab不同,如果不填写[IP]:6789,则无法进行挂载。
some-path -fstype=ceph,name=user [IP]:6789:/
其他
更改OSD的内存使用量
在树莓派上构建Ceph并尝试进行文件复制等操作时,ceph-osd进程会立即耗尽内存,导致机器停止运行。因此,使用osd_memory_target命令更改OSD使用的内存大小可能是个好主意。文件中默认指定为4GB,经过确认果然是这样。
$ sudo ceph config get osd.0 osd_memory_target
4294967296
当我试图将容量调整到大约500MB时,却因“超过最低限度”而受到责备。
$ sudo ceph config set osd.0 osd_memory_target 500000000
Error EINVAL: error parsing value: Value '500000000' is below minimum 939524096
于是,将出现错误的数值(允许的最大值)进行更改后,通过了。
$ sudo ceph config set osd.0 osd_memory_target 939524096
虽然未经确认,但可能通过docker容器重启[OSD容器名]来重新启动容器并进行反映。
重启OSD的脚本(2022年2月23日更新)
由于更改OSD的内存使用上限无法解决内存耗尽问题,因此我编写了一个用于重启OSD的Shell脚本,并存储在下面的GitHub中。