热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

Ceph使用—CephFS

一、CephFS介绍cephFS即cephfilesystem,可以实现文件系统共享功能(POSIX标准),客户端通过ceph协议挂载并使用ceph集群作为数据存储服务器,http

一、CephFS介绍

ceph FS 即 ceph filesystem, 可以实现文件系统共享功能(POSIX 标准), 客户端通过 ceph协议挂载并使用 ceph 集群作为数据存储服务器, http://docs.ceph.org.cn/cephfs/。
Ceph FS 需要运行 Meta Data Services(MDS)服务, 其守护进程为 ceph-mds, ceph-mds进程管理与 cephFS 上存储的文件相关的元数据, 并协调对 ceph 存储集群的访问。

     在 linux 系统使用 ls 等操作查看某个目录下的文件的时候, 会有保存在磁盘上的分区表记录文件的名称、 创建日期、 大小、 inode 及存储位置等元数据信息, 在 cephfs 由于数据是被打散为若干个离散的 object 进行分布式存储, 因此并没有统一保存文件的元数据, 而且将文件的元数据保存到一个单独的存储出 matedata pool, 但是客户端并不能直接访问matedata pool 中的元数据信息, 而是在读写数的时候有 MDS(matadata server)进行处理,读数据的时候有 MDS从 matedata pool加载元数据然后缓存在内存(用于后期快速响应其它客户端的请求)并返回给客户端, 写数据的时候有 MDS 缓存在内存并同步到 matedata pool。

 cephfs 的 mds 的数据结构类似于 linux 系统的根形目录结构及 nginx 中的缓存目录分层一样.


二、cephfs使用

如果要使用 cephFS, 需要部署 cephfs 服务。

Ubuntu:
root@ceph
-mgr1:~# apt-cache madison ceph-mds
root@ceph
-mgr1:~# apt install ceph-mds
Centos:
[root@ceph
-mgr1 ~]# yum install ceph-mds
cephadmin@ceph-deploy:~/ceph-cluster$ ceph
-deploy mds create ceph-mgr1

创建 CephFS metadata 和 data 存储池

使用 CephFS 之前需要事先于集群中创建一个文件系统, 并为其分别指定元数据和数据相关的存储池。 下面创建一个名为 cephfs 的文件系统用于测试, 它使用 cephfs-metadata 为元数据存储池, 使用 cephfs-data 为数据存储池

[cephadmin@ceph-deploy ceph-cluster]$ ceph osd pool create cephfs-metadata 32 32
[cephadmin@ceph
-deploy ceph-cluster]$ ceph osd pool create cephfs-data 64 64
cephadmin@ceph
-deploy:~/ceph-cluster$ ceph df
--- RAW STORAGE ---
CLASS SIZE AVAIL USED RAW USED
%RAW USED
hdd
900 GiB 898 GiB 2.3 GiB 2.3 GiB 0.26
TOTAL
900 GiB 898 GiB 2.3 GiB 2.3 GiB 0.26

--- POOLS ---
POOL ID PGS STORED OBJECTS USED
%USED MAX AVAIL
device_health_metrics
1 1 0 B 0 0 B 0 284 GiB
myrbd1
2 64 10 MiB 18 31 MiB 0 284 GiB
.rgw.root
3 32 1.3 KiB 4 48 KiB 0 284 GiB
default.rgw.log 4 32 3.6 KiB 209 408 KiB 0 284 GiB
default.rgw.control 5 32 0 B 8 0 B 0 284 GiB
default.rgw.meta 6 8 0 B 0 0 B 0 284 GiB
cephfs
-metadata 7 32 32 KiB 23 192 KiB 0 284 GiB
cephfs-data 8 64 373 KiB 1 1.1 MiB 0 284
GiB
mypool
12 64 2.6 KiB 3 24 KiB 0 284 GiB
rbd
-data1 13 32 171 MiB 74 515 MiB 0.06 284 GiB
cephadmin@ceph
-deploy:~/ceph-cluster$

创建 cephFS 并验证

ceph-deploy ceph-cluster]$ ceph fs new mycephfs cephfs-metadata
cephfs
-data
cephadmin@ceph
-deploy:~/ceph-cluster$ ceph fs ls
name: mycephfs, metadata pool: cephfs
-metadata, data pools: [cephfs-data ]
cephadmin@ceph
-deploy:~/ceph-cluster$
cephadmin@ceph
-deploy:~/ceph-cluster$ ceph fs status mycephfs #查看指定cephfs状况

验证 cepfFS 服务状态

cephadmin@ceph-deploy:~/ceph-cluster$ ceph mds stat
mycephfs:
1 {0=ceph-mgr1=up:active}
cephadmin@ceph
-deploy:~/ceph-cluster$

创建客户端账户

cephadmin@ceph-deploy:~/ceph-cluster$ ceph auth add client.cephfs mon 'allow r' mds 'allow rw' osd 'allow rwx pool=cephfs-data'
added key
for client.cephfs
cephadmin@ceph
-deploy:~/ceph-cluster$
cephadmin@ceph
-deploy:~/ceph-cluster$ ceph auth get client.cephfs
[client.cephfs]
key
= AQAd7UJjV7WdERAAQwzc+s/z49zXl9zZ1zHiMg==
caps mds
= "allow rw"
caps mon
= "allow r"
caps osd
= "allow rwx pool=cephfs-data"
exported keyring
for client.cephfs
cephadmin@ceph
-deploy:~/ceph-cluster$
cephadmin@ceph
-deploy:~/ceph-cluster$
cephadmin@ceph
-deploy:~/ceph-cluster$ ceph auth get client.cephfs -o ceph.client.cephfs.keyring
exported keyring
for client.cephfs
cephadmin@ceph
-deploy:~/ceph-cluster$
cephadmin@ceph
-deploy:~/ceph-cluster$ ceph auth print-key client.cephfs > cephfs.key
cephadmin@ceph
-deploy:~/ceph-cluster$
cephadmin@ceph
-deploy:~/ceph-cluster$
cephadmin@ceph
-deploy:~/ceph-cluster$ cat ceph.client.cephfs.keyring
[client.cephfs]
key
= AQAd7UJjV7WdERAAQwzc+s/z49zXl9zZ1zHiMg==
caps mds
= "allow rw"
caps mon
= "allow r"
caps osd
= "allow rwx pool=cephfs-data"
cephadmin@ceph
-deploy:~/ceph-cluster$
cephadmin@ceph
-deploy:~/ceph-cluster$ cat cephfs.key
AQAd7UJjV7WdERAAQwzc
+s/z49zXl9zZ1zHiMg==
cephadmin@ceph-deploy:~/ceph-cluster$
cephadmin@ceph
-deploy:~/ceph-cluster$

安装 ceph 客户端

[root@ceph-client-test ~]# yum install epel-release -y
[root@ceph-client-test ~]# yum install https://mirrors.aliyun.com/ceph/rpm-octopus/el7/noarch/ceph-release-1-1.el7.noarch.rpm -y
[root@ceph
-client-test ~]# yum install ceph-common -y

同步客户端认证文件

cephadmin@ceph-deploy:~/ceph-cluster$ scp ceph.client.cephfs.keyring cephfs.key root@172.16.88.60:/etc/ceph/
cephadmin@ceph
-deploy:~/ceph-cluster$ scp ceph.client.cephfs.keyring cephfs.key root@172.16.88.61:/etc/ceph/

客户端验证权限


三、内核空间挂载 ceph-fs

客户端挂载有两种方式, 一是内核空间一是用户空间, 内核空间挂载需要内核支持 ceph 模块, 用户空间挂载需要安装 ceph-fuse

[root@ceph-client-test ~]# mkdir /cephfs-data
[root@ceph
-client-test ~]# mount -t ceph 172.16.88.101:6789,172.16.88.102:6789,172.16.88.103:6789:/ /cephfs-data -o name=cephfs,secretfile=/etc/ceph/cephfs.key

验证写入数据

[root@ceph-client-test ~]# cp /var/log/messages /cephfs-data/
[root@ceph
-client-test ~]# cd /cephfs-data/
[root@ceph
-client-test cephfs-data]# ll -h
total 115K
-rw------- 1 root root 115K Oct 10 00:06 messages
[root@ceph
-client-test cephfs-data]# dd if=/dev/zero of=/cephfs-data/testfile bs=3M count=100
100+0 records in
100+0 records out
314572800 bytes (315 MB) copied, 0.595602 s, 528 MB/s
[root@ceph
-client-test cephfs-data]#
[root@ceph
-client-test cephfs-data]# ll -h
total 301M
-rw------- 1 root root 115K Oct 10 00:06 messages
-rw-r--r-- 1 root root 300M Oct 10 00:12 testfile
[root@ceph
-client-test cephfs-data]#

客户端通过 key 挂载

[root@ceph-client-test ~]# tail /etc/ceph/cephfs.key
AQAd7UJjV7WdERAAQwzc
+s/z49zXl9zZ1zHiMg==
[root@ceph-client-test ~]#
[root@ceph
-client-test ~]# umount /cephfs-data
[root@ceph
-client-test ~]# df -h
Filesystem Size Used Avail Use
% Mounted on
devtmpfs
3.9G 0 3.9G 0% /dev
tmpfs
3.9G 0 3.9G 0% /dev/shm
tmpfs
3.9G 8.6M 3.9G 1% /run
tmpfs
3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 49G 2.9G 47G 6% /
/dev/vda1 497M 186M 311M 38% /boot
overlay 49G
2.9G 47G 6% /var/lib/docker/overlay2/0dd0923ceae9c5b1db6dbf822857dcff521923fbd741f01a4bcdf4d9f76144ed/merged
/dev/rbd0 3.0G 529M 2.5G 18% /data
tmpfs 783M
0 783M 0% /run/user/0
[root@ceph
-client-test ~]# mount -t ceph 172.16.88.101:6789,172.16.88.102:6789,172.16.88.103:6789:/ /cephfs-data -o name=cephfs,secret=AQAd7UJjV7WdERAAQwzc+s/z49zXl9zZ1zHiMg==
[root@ceph
-client-test ~]# df -h
Filesystem Size Used Avail Use
% Mounted on
devtmpfs
3.9G 0 3.9G 0% /dev
tmpfs
3.9G 0 3.9G 0% /dev/shm
tmpfs
3.9G 8.6M 3.9G 1% /run
tmpfs
3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 49G 2.9G 47G 6% /
/dev/vda1 497M 186M 311M 38% /boot
overlay 49G
2.9G 47G 6% /var/lib/docker/overlay2/0dd0923ceae9c5b1db6dbf822857dcff521923fbd741f01a4bcdf4d9f76144ed/merged
/dev/rbd0 3.0G 529M 2.5G 18% /data
tmpfs 783M
0 783M 0% /run/user/0
172.16.88.101:6789,172.16.88.102:6789,172.16.88.103:6789:/ 284G 0 284G 0% /cephfs-data
[root@ceph
-client-test ~]#

测试写入数据

[root@ceph-client-test ~]# cp /etc/yum.repos.d/epel.repo /cephfs-data/
[root@ceph
-client-test ~]# cd /cephfs-data/
[root@ceph
-client-test cephfs-data]# ll -h
total 301M
-rw-r--r-- 1 root root 664 Oct 10 00:13 epel.repo
-rw------- 1 root root 115K Oct 10 00:06 messages
-rw-r--r-- 1 root root 300M Oct 10 00:12 testfile
[root@ceph
-client-test cephfs-data]# stat -f /cephfs-data/ #查看挂载点状态信息
File:
"/cephfs-data/"
ID: f6f39718aa80a4cc Namelen:
255 Type: ceph
Block size:
4194304 Fundamental block size: 4194304
Blocks: Total:
72583 Free: 72508 Available: 72508
Inodes: Total:
76 Free: -1
[root@ceph
-client-test cephfs-data]#

开机挂载

[root@ceph-client-test ~]# echo "172.16.88.101:6789,172.16.88.102:6789,172.16.88.103:6789:/ /cephfs-data ceph defaults,name=cephfs,secretfile=/etc/ceph/cephfs.key,_netdev 0 0" >> /etc/fstab
[root@ceph
-client-test ~]# cat /etc/fstab
#
#
/etc/fstab
# Created by anaconda on Mon Jul
25 22:02:01 2022
#
# Accessible filesystems, by reference, are maintained under
'/dev/disk'
# See man pages fstab(
5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID
=123706e7-5065-4568-91c8-91cee867c393 /boot xfs defaults 0 0
172.16.88.101:6789,172.16.88.102:6789,172.16.88.103:6789:/ /cephfs-data ceph defaults,name=cephfs,secretfile=/etc/ceph/cephfs.key,_netdev 0 0
[root@ceph
-client-test ~]# mount -a
[root@ceph
-client-test ~]#

客户端模块

客户端内核加载 ceph.ko 模块挂载 cephfs 文件系统


四、用户空间挂载 ceph-fs

如果内核本较低而没有 ceph 模块, 那么可以安装 ceph-fuse 挂载, 但是推荐使用内核模块挂载

安装 ceph-fuse

http://docs.ceph.org.cn/man/8/ceph-fuse/
在一台新的客户端或还原快照, 然后安装 ceph-fuse

[root@ceph-test-03 ~]# yum install epel-release -y
[root@ceph
-test-03 ~]# yum install https://mirrors.aliyun.com/ceph/rpm-octopus/el7/noarch/ceph-release-1-1.el7.noarch.rpm -y
[root@ceph-test-03 ~]# yum install ceph-fuse ceph-common -y

同步认证及配置文件

cephadmin@ceph-deploy:~/ceph-cluster$ scp ceph.conf ceph.client.cephfs.keyring cephfs.key root@172.16.88.62:/etc/ceph/
The authenticity of host
'172.16.88.62 (172.16.88.62)' can't be established.
ECDSA key fingerprint is SHA256:iRdgjq2HzptlZRnI0NPqeOWjjyRO3/NjOyfMglqhylo.
Are you sure you want to
continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added
'172.16.88.62' (ECDSA) to the list of known hosts.
root@
172.16.88.62's password:
ceph.conf 100% 315 185.5KB/s 00:00
ceph.client.cephfs.keyring
100% 150 135.7KB/s 00:00
cephfs.key
100% 40 40.5KB/s 00:00
cephadmin@ceph
-deploy:~/ceph-cluster$

通过 ceph-fuse 挂载 ceph

[root@ceph-test-03 ~]# mkdir /data
[root@ceph
-test-03 ~]# ceph-fuse --name client.cephfs -m 172.16.88.101:6789,172.16.88.102:6789,172.16.88.103:6789 /data
2022-10-10T00:32:04.285+0800 7fd19d419080 -1 init, newargv = 0x560a37427490 newargc=9
ceph
-fuse[23723]: starting ceph client
ceph
-fuse[23723]: starting fuse
[root@ceph
-test-03 ~]# df -Th
Filesystem Type Size Used Avail Use
% Mounted on
devtmpfs devtmpfs
1.9G 0 1.9G 0% /dev
tmpfs tmpfs
1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs
1.9G 8.5M 1.9G 1% /run
tmpfs tmpfs
1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/rl-root xfs 49G 2.5G 47G 6% /
/dev/vda1 xfs 495M 178M 318M 36% /boot
tmpfs tmpfs 374M
0 374M 0% /run/user/0
ceph
-fuse fuse.ceph-fuse 284G 300M 284G 1% /data
[root@ceph
-test-03 ~]#
[root@ceph
-test-03 ~]#
[root@ceph
-test-03 ~]# cd /data
[root@ceph
-test-03 data]# dd if=/dev/zero of=./ceph-fuse-data bs=5M count=100
100+0 records in
100+0 records out
524288000 bytes (524 MB, 500 MiB) copied, 15.4936 s, 33.8 MB/s
[root@ceph
-test-03 data]#
[root@ceph
-test-03 data]# ll -h
total 801M
-rw-r--r-- 1 root root 500M Oct 10 00:34 ceph-fuse-data
-rw-r--r-- 1 root root 664 Oct 10 00:13 epel.repo
-rw------- 1 root root 115K Oct 10 00:06 messages
-rw-r--r-- 1 root root 300M Oct 10 00:12 testfile
[root@ceph
-test-03 data]#

开机挂载,指定用户会自动根据用户名称加载授权文件及配置文件 ceph.conf

[root@ceph-test-03 data]# echo "none /data fuse.ceph ceph.id=cephfs,ceph.cOnf=/etc/ceph/ceph.conf,_netdev,defaults 0 0" >> /etc/fstab
[root@ceph
-test-03 data]# cat /etc/fstab
#
#
/etc/fstab
# Created by anaconda on Mon Jul
25 13:16:35 2022
#
# Accessible filesystems, by reference, are maintained under
'/dev/disk/'.
# See man pages fstab(
5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing
this file, run 'systemctl daemon-reload' to update systemd
# units generated
from this file.
#
/dev/mapper/rl-root / xfs defaults 0 0
UUID
=13f7d819-4093-4969-941e-49ccb65c8595 /boot xfs defaults 0 0
none /data fuse.ceph ceph.id=cephfs,ceph.cOnf=/etc/ceph/ceph.conf,_netdev,defaults 0 0

[root@ceph
-test-03 data]#
[root@ceph
-test-03 ~]# umount /data
[root@ceph
-test-03 ~]# mount -a
ceph
-fuse[23798]: starting ceph client
2022-10-10T00:42:32.829+0800 7fa596dfe080 -1 init, newargv = 0x7fa580001110 newargc=11
ceph
-fuse[23798]: starting fuse
[root@ceph
-test-03 ~]#

五、ceph mds 高可用

     Ceph mds(metadata service)作为 ceph 的访问入口, 需要实现高性能及数据备份,而 MDS支持多 MDS 结构, 甚至还能实现类似于 redis cluster 的多主从结构, 以实现 MDS 服务的高性能和高可用, 假设启动 4 个 MDS 进程, 设置最大 max_mds 为 2, 这时候有 2 个MDS 成为主节点, 另外的两个 2 个 MDS 作为备份节点。 

设置每个主节点专用的备份 MDS, 也就是如果此主节点出现问题马上切换到另个 MDS 接管主 MDS 并继续对外提供元数据读写, 设置备份 MDS 的常用选项如下。



  • mds_standby_replay: 值为 true 或 false, true 表示开启 replay 模式, 这种模式下主 MDS内的数量将实时与从 MDS 同步, 如果主宕机, 从可以快速的切换。 如果为 false 只有宕机的时候才去同步数据, 这样会有一段时间的中断。

  • mds_standby_for_name: 设置当前 MDS 进程只用于备份于指定名称的 MDS。

  • mds_standby_for_rank: 设置当前 MDS 进程只用于备份于哪个 Rank((上级节点), 通常为Rank 编号。 另外在存在多个 CephFS 文件系统中, 还可以使用 mds_standby_for_fscid 参数来为指定不同的文件系统。

  • mds_standby_for_fscid: 指定 CephFS 文件系统 ID, 需要联合 mds_standby_for_rank 生效, 如果设置 mds_standby_for_rank, 那么就是用于指定文件系统的指定 Rank, 如果没有设置, 就是指定文件系统的所有 Rank。

查看当前 mds 服务器状态

[root@ceph-deploy ~]# ceph mds stat
mycephfs:
1 {0=ceph-mgr1=up:active}
[root@ceph
-deploy ~]#

添加 MDS 服务器
将 ceph-mgr2 和 ceph-mon2 和 ceph-mon3 作为 mds 服务角色添加至 ceph 集群, 最后实两主两备的 mds 高可用和高性能结构。

#mds 服务器安装 ceph-mds 服务
[root@ceph
-mgr2 ~]# apt install ceph-mds -y
[root@ceph
-mon2 ~]# apt install ceph-mds -y
[root@ceph
-mon3 ~]# apt install ceph-mds -y
#添加 mds 服务器
[cephadmin@ceph
-deploy ceph-cluster]$ ceph-deploy mds create ceph-mgr2
[cephadmin@ceph
-deploy ceph-cluster]$ ceph-deploy mds create ceph-mon2
[cephadmin@ceph
-deploy ceph-cluster]$ ceph-deploy mds create ceph-mon3
#验证 mds 服务器当前状态:
cephadmin@ceph
-deploy:~/ceph-cluster$ ceph mds stat
mycephfs:
1 {0=ceph-mgr1=up:active} 3 up:standby
cephadmin@ceph
-deploy:~/ceph-cluster$

操作过程

cephadmin@ceph-deploy:~/ceph-cluster$ ceph-deploy mds create ceph-mgr2
[ceph_deploy.conf][DEBUG ] found configuration file at:
/home/cephadmin/.cephdeploy.conf
[ceph_deploy.cli][INFO ] Invoked (
2.1.0): /usr/local/bin/ceph-deploy mds create ceph-mgr2
[ceph_deploy.cli][INFO ] ceph
-deploy options:
[ceph_deploy.cli][INFO ] verbose : False
[ceph_deploy.cli][INFO ] quiet : False
[ceph_deploy.cli][INFO ] username : None
[ceph_deploy.cli][INFO ] overwrite_conf : False
[ceph_deploy.cli][INFO ] ceph_conf : None
[ceph_deploy.cli][INFO ] cluster : ceph
[ceph_deploy.cli][INFO ] subcommand : create
[ceph_deploy.cli][INFO ] cd_conf :
object at 0x7fdbc0419100>
[ceph_deploy.cli][INFO ] default_release : False
[ceph_deploy.cli][INFO ] func :
0x7fdbc0451160>
[ceph_deploy.cli][INFO ] mds : [(
'ceph-mgr2', 'ceph-mgr2')]
[ceph_deploy.mds][DEBUG ] Deploying mds, cluster ceph hosts ceph
-mgr2:ceph-mgr2
[ceph
-mgr2][DEBUG ] connection detected need for sudo
[ceph
-mgr2][DEBUG ] connected to host: ceph-mgr2
[ceph_deploy.mds][INFO ] Distro info: ubuntu
20.04 focal
[ceph_deploy.mds][DEBUG ] remote host will use systemd
[ceph_deploy.mds][DEBUG ] deploying mds bootstrap to ceph
-mgr2
[ceph
-mgr2][INFO ] Running command: sudo ceph --cluster ceph --name client.bootstrap-mds --keyring /var/lib/ceph/bootstrap-mds/ceph.keyring auth get-or-create mds.ceph-mgr2 osd allow rwx mds allow mon allow profile mds -o /var/lib/ceph/mds/ceph-ceph-mgr2/keyring
[ceph
-mgr2][INFO ] Running command: sudo systemctl enable ceph-mds@ceph-mgr2
[ceph
-mgr2][WARNIN] Created symlink /etc/systemd/system/ceph-mds.target.wants/ceph-mds@ceph-mgr2.service → /lib/systemd/system/ceph-mds@.service.
[ceph
-mgr2][INFO ] Running command: sudo systemctl start ceph-mds@ceph-mgr2
[ceph
-mgr2][INFO ] Running command: sudo systemctl enable ceph.target
cephadmin@ceph
-deploy:~/ceph-cluster$
cephadmin@ceph
-deploy:~/ceph-cluster$
cephadmin@ceph
-deploy:~/ceph-cluster$ ceph-deploy mds create ceph-mon2
[ceph_deploy.conf][DEBUG ] found configuration file at:
/home/cephadmin/.cephdeploy.conf
[ceph_deploy.cli][INFO ] Invoked (
2.1.0): /usr/local/bin/ceph-deploy mds create ceph-mon2
[ceph_deploy.cli][INFO ] ceph
-deploy options:
[ceph_deploy.cli][INFO ] verbose : False
[ceph_deploy.cli][INFO ] quiet : False
[ceph_deploy.cli][INFO ] username : None
[ceph_deploy.cli][INFO ] overwrite_conf : False
[ceph_deploy.cli][INFO ] ceph_conf : None
[ceph_deploy.cli][INFO ] cluster : ceph
[ceph_deploy.cli][INFO ] subcommand : create
[ceph_deploy.cli][INFO ] cd_conf :
object at 0x7f32f13ab100>
[ceph_deploy.cli][INFO ] default_release : False
[ceph_deploy.cli][INFO ] func :
0x7f32f13e3160>
[ceph_deploy.cli][INFO ] mds : [(
'ceph-mon2', 'ceph-mon2')]
[ceph_deploy.mds][DEBUG ] Deploying mds, cluster ceph hosts ceph
-mon2:ceph-mon2
[ceph
-mon2][DEBUG ] connection detected need for sudo
[ceph
-mon2][DEBUG ] connected to host: ceph-mon2
[ceph_deploy.mds][INFO ] Distro info: ubuntu
20.04 focal
[ceph_deploy.mds][DEBUG ] remote host will use systemd
[ceph_deploy.mds][DEBUG ] deploying mds bootstrap to ceph
-mon2
[ceph
-mon2][WARNIN] mds keyring does not exist yet, creating one
[ceph
-mon2][INFO ] Running command: sudo ceph --cluster ceph --name client.bootstrap-mds --keyring /var/lib/ceph/bootstrap-mds/ceph.keyring auth get-or-create mds.ceph-mon2 osd allow rwx mds allow mon allow profile mds -o /var/lib/ceph/mds/ceph-ceph-mon2/keyring
[ceph
-mon2][INFO ] Running command: sudo systemctl enable ceph-mds@ceph-mon2
[ceph
-mon2][WARNIN] Created symlink /etc/systemd/system/ceph-mds.target.wants/ceph-mds@ceph-mon2.service → /lib/systemd/system/ceph-mds@.service.
[ceph
-mon2][INFO ] Running command: sudo systemctl start ceph-mds@ceph-mon2
[ceph
-mon2][INFO ] Running command: sudo systemctl enable ceph.target
cephadmin@ceph
-deploy:~/ceph-cluster$
cephadmin@ceph
-deploy:~/ceph-cluster$ ceph-deploy mds create ceph-mon3
[ceph_deploy.conf][DEBUG ] found configuration file at:
/home/cephadmin/.cephdeploy.conf
[ceph_deploy.cli][INFO ] Invoked (
2.1.0): /usr/local/bin/ceph-deploy mds create ceph-mon3
[ceph_deploy.cli][INFO ] ceph
-deploy options:
[ceph_deploy.cli][INFO ] verbose : False
[ceph_deploy.cli][INFO ] quiet : False
[ceph_deploy.cli][INFO ] username : None
[ceph_deploy.cli][INFO ] overwrite_conf : False
[ceph_deploy.cli][INFO ] ceph_conf : None
[ceph_deploy.cli][INFO ] cluster : ceph
[ceph_deploy.cli][INFO ] subcommand : create
[ceph_deploy.cli][INFO ] cd_conf :
object at 0x7f1a63be10d0>
[ceph_deploy.cli][INFO ] default_release : False
[ceph_deploy.cli][INFO ] func :
0x7f1a63c1b160>
[ceph_deploy.cli][INFO ] mds : [(
'ceph-mon3', 'ceph-mon3')]
[ceph_deploy.mds][DEBUG ] Deploying mds, cluster ceph hosts ceph
-mon3:ceph-mon3
[ceph
-mon3][DEBUG ] connection detected need for sudo
[ceph
-mon3][DEBUG ] connected to host: ceph-mon3
[ceph_deploy.mds][INFO ] Distro info: ubuntu
20.04 focal
[ceph_deploy.mds][DEBUG ] remote host will use systemd
[ceph_deploy.mds][DEBUG ] deploying mds bootstrap to ceph
-mon3
[ceph
-mon3][WARNIN] mds keyring does not exist yet, creating one
[ceph
-mon3][INFO ] Running command: sudo ceph --cluster ceph --name client.bootstrap-mds --keyring /var/lib/ceph/bootstrap-mds/ceph.keyring auth get-or-create mds.ceph-mon3 osd allow rwx mds allow mon allow profile mds -o /var/lib/ceph/mds/ceph-ceph-mon3/keyring
[ceph
-mon3][INFO ] Running command: sudo systemctl enable ceph-mds@ceph-mon3
[ceph
-mon3][WARNIN] Created symlink /etc/systemd/system/ceph-mds.target.wants/ceph-mds@ceph-mon3.service → /lib/systemd/system/ceph-mds@.service.
[ceph
-mon3][INFO ] Running command: sudo systemctl start ceph-mds@ceph-mon3
[ceph
-mon3][INFO ] Running command: sudo systemctl enable ceph.target
cephadmin@ceph
-deploy:~/ceph-cluster$
cephadmin@ceph
-deploy:~/ceph-cluster$
cephadmin@ceph
-deploy:~/ceph-cluster$ ceph mds stat
mycephfs:
1 {0=ceph-mgr1=up:active} 3 up:standby
cephadmin@ceph
-deploy:~/ceph-cluster$

View Code

验证 ceph 集群当前状态
当前处于激活状态的 mds 服务器有一台, 处于备份状态的 mds 服务器有三台。

cephadmin@ceph-deploy:~/ceph-cluster$ ceph fs status

当前的文件系统状态

cephadmin@ceph-deploy:~/ceph-cluster$ ceph fs get mycephfs
Filesystem
'mycephfs' (1)
fs_name mycephfs
epoch
4
flags
12
created
2022-10-07T11:58:44.065065+0800
modified
2022-10-07T11:58:45.078402+0800
tableserver
0
root
0
session_timeout
60
session_autoclose
300
max_file_size
1099511627776
required_client_features {}
last_failure
0
last_failure_osd_epoch
0
compat compat
={},rocompat={},incompat={1=base v0.20,2=client writeable ranges,3=default file layouts on dirs,4=dir inode in separate object,5=mds uses versioned encoding,6=dirfrag is stored in omap,7=mds uses inline data,8=no anchor table,9=file layout v2,10=snaprealm v2}
max_mds
1
in 0
up {
0=34364}
failed
damaged
stopped
data_pools [
8]
metadata_pool
7
inline_data disabled
balancer
standby_count_wanted
1
[mds.ceph
-mgr1{0:34364} state up:active seq 120 addr [v2:172.16.88.111:6802/91792027,v1:172.16.88.111:6803/91792027] compat {c=[1],r=[1],i=[7ff]}]
cephadmin@ceph
-deploy:~/ceph-cluster$

设置处于激活状态 mds 的数量

目前有四个 mds 服务器, 但是有一个主三个备, 可以优化一下部署架构, 设置为为两主两备。

[cephadmin@ceph-deploy ceph-cluster]$ ceph fs set mycephfs max_mds 2 #设置同时活跃的主 mds 最大值为 2


六、MDS 高可用优化

目前的状态是 ceph-mgr1 和 ceph-mon2 分别是 active 状态, ceph-mon3 和 ceph-mgr2分别处于 standby 状态, 现在可以将 ceph-mgr2 设置为 ceph-mgr1 的 standby, 将ceph-mon3 设置为 ceph-mon2 的 standby, 以实现每个主都有一个固定备份角色的结构,则修改配置文件如下:

cephadmin@ceph-deploy:~/ceph-cluster$ vim ceph.conf
cephadmin@ceph
-deploy:~/ceph-cluster$ cat ceph.conf
[
global]
fsid
= 8dc32c41-121c-49df-9554-dfb7deb8c975
public_network
= 172.16.88.0/24
cluster_network
= 192.168.122.0/24
mon_initial_members
= ceph-mon1,ceph-mon2,ceph-mon3
mon_host
= 172.16.88.101,172.16.88.102,172.16.88.103
auth_cluster_required
= cephx
auth_service_required
= cephx
auth_client_required
= cephx
mon clock drift allowed
= 2
mon clock drift warn backoff
= 30
[mds.ceph-mgr2]
mds_standby_for_name = ceph-mgr1
mds_standby_replay = true
[mds.ceph-mgr1]
mds_standby_for_name = ceph-mgr2
mds_standby_replay = true
[mds.ceph-mon3]
mds_standby_for_name = ceph-mon2
mds_standby_replay = true
[mds.ceph-mon2]
mds_standby_for_name = ceph-mon3
mds_standby_replay = true

cephadmin@ceph
-deploy:~/ceph-cluster$

分发配置文件并重启 mds 服务

#分发配置文件保证各 mds 服务重启有效
ceph
-deploy --overwrite-conf config push ceph-mon1
ceph
-deploy --overwrite-conf config push ceph-mon2
ceph
-deploy --overwrite-conf config push ceph-mon3
ceph
-deploy --overwrite-conf config push ceph-mgr1
ceph
-deploy --overwrite-conf config push ceph-mgr2
[root@ceph
-mon2 ~]# systemctl restart ceph-mds@ceph-mon2.service
[root@ceph
-mon3 ~]# systemctl restart ceph-mds@ceph-mon3.service
[root@ceph
-mgr2 ~]# systemctl restart ceph-mds@ceph-mgr2.service
[root@ceph
-mgr1 ~]# systemctl restart ceph-mds@ceph-mgr1.service

ceph 集群 mds 高可用状态

查看 active standby 对应关系

[cephadmin@ceph-deploy ceph-cluster]$ ceph fs get mycephfs


七、通过 ganesha 将 cephfs 导出为 NFS

通过 ganesha cephfs 通过 NFS 协议共享使用。
https://www.server-world.info/en/note?os=Ubuntu_20.04&p=ceph15&f=8


服务端配置

mgr 节点配置, 并提前 mgr 在准备好 ceph.conf ceph.client.admin.keyring 认证文件:

cephadmin@ceph-deploy:~/ceph-cluster$ sudo scp ceph.client.admin.keyring 172.31.6.104:/etc/ceph/
[root@ceph
-mgr1 ~]# ll -h /etc/ceph/
total 20K
drwxr
-xr-x 2 root root 4.0K Oct 10 21:46 ./
drwxr
-xr-x 112 root root 4.0K Oct 7 11:14 ../
-rw------- 1 root root 151 Oct 10 20:28 ceph.client.admin.keyring
-rw-r--r-- 1 root root 681 Oct 10 21:46 ceph.conf
-rw-r--r-- 1 root root 92 Jul 22 01:38 rbdmap
-rw------- 1 root root 0 Oct 4 22:49 tmpqbicc8w7
[root@ceph
-mgr1 ~]# apt install nfs-ganesha-ceph -y
[root@ceph
-mgr1 ganesha]# vi ganesha.conf
[root@ceph
-mgr1 ganesha]# cat ganesha.conf
# create
new
NFS_CORE_PARAM {
# disable NLM
Enable_NLM
= false;
# disable RQUOTA (not suported on CephFS)
Enable_RQUOTA
= false;
# NFS protocol
Protocols
= 4;
}
EXPORT_DEFAULTS {
#
default access mode
Access_Type
= RW;
}
EXPORT {
# uniq ID
Export_Id
= 1;
# mount path of CephFS
Path
= "/";
FSAL {
name
= CEPH;
# hostname or IP address of
this Node
hostname
="172.16.88.111";
}
#setting
for root Squash
Squash
="No_root_squash";
# NFSv4 Pseudo path
Pseudo
="/magedu";
# allowed security options
SecType
= "sys";
}
LOG {
#
default log level
Default_Log_Level
= WARN;
}
[root@ceph
-mgr1 ganesha]#
[root@ceph
-mgr1 ganesha]# systemctl restart nfs-ganesha
[root@ceph
-mgr1 ganesha]# systemctl status nfs-ganesha
● nfs
-ganesha.service - NFS-Ganesha file server
Loaded: loaded (
/lib/systemd/system/nfs-ganesha.service; enabled; vendor preset: enabled)
Active: active (running) since Mon
2022-10-10 22:09:04 CST; 8s ago
Docs: http:
//github.com/nfs-ganesha/nfs-ganesha/wiki
Process: 23309 ExecStart=/bin/bash -c ${NUMACTL} ${NUMAOPTS} /usr/bin/ganesha.nfsd ${OPTIONS} ${EPOCH} (code=exited, status=0/SUCCE>
Main PID:
23317 (ganesha.nfsd)
Tasks:
36 (limit: 4612)
Memory:
35.2M
CGroup:
/system.slice/nfs-ganesha.service
└─
23317 /usr/bin/ganesha.nfsd -L /var/log/ganesha/ganesha.log -f /etc/ganesha/ganesha.conf -N NIV_EVENT
Oct
10 22:09:04 ceph-mgr1.example.local systemd[1]: Starting NFS-Ganesha file server...
Oct
10 22:09:04 ceph-mgr1.example.local systemd[1]: Started NFS-Ganesha file server.

客户端挂载测试

[root@ceph-test-02 ~]# apt-get install nfs-common -y
[root@ceph
-test-02 ~]# mount -t nfs4 172.16.88.111:/magedu /ganesha-data
[root@ceph
-test-02 ~]# df -h
Filesystem Size Used Avail Use
% Mounted on
udev
1.9G 0 1.9G 0% /dev
tmpfs 394M
1.2M 393M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 48G 7.2G 39G 16% /
tmpfs
2.0G 0 2.0G 0% /dev/shm
tmpfs
5.0M 0 5.0M 0% /run/lock
tmpfs
2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/loop1 62M 62M 0 100% /snap/core20/1587
/dev/vda2 1.5G 205M 1.2G 15% /boot
/dev/loop0 64M 64M 0 100% /snap/core20/1623
/dev/loop2 68M 68M 0 100% /snap/lxd/21835
/dev/loop3 68M 68M 0 100% /snap/lxd/22753
/dev/loop5 48M 48M 0 100% /snap/snapd/17029
/dev/loop4 47M 47M 0 100% /snap/snapd/16292
/dev/rbd0 5.0G 33M 5.0G 1% /data
tmpfs 394M
0 394M 0% /run/user/0
172.16.88.111:/magedu 284G 800M 283G 1% /ganesha-data
[root@ceph
-test-02 ~]#
[root@ceph
-test-02 ~]# cd /ganesha-data/
[root@ceph
-test-02 ganesha-data]# touch test-{1..9}.txt
[root@ceph
-test-02 ganesha-data]# dd if=/dev/zero of=./ganesha-data bs=5M count=100
[root@ceph
-test-02 ganesha-data]# ll -h
total
1.3G
drwxr
-xr-x 2 nobody 4294967294 1.3G Oct 10 22:21 ./
drwxr
-xr-x 21 root root 4.0K Oct 10 22:16 ../
-rw-r--r-- 1 nobody 4294967294 500M Oct 10 00:34 ceph-fuse-data
-rw-r--r-- 1 nobody 4294967294 664 Oct 10 00:13 epel.repo
-rw-r--r-- 1 nobody 4294967294 500M Oct 10 22:21 ganesha-data
-rw------- 1 nobody 4294967294 115K Oct 10 00:06 messages
-rw-r--r-- 1 nobody 4294967294 0 Oct 10 22:20 test-1.txt
-rw-r--r-- 1 nobody 4294967294 0 Oct 10 22:20 test-2.txt
-rw-r--r-- 1 nobody 4294967294 0 Oct 10 22:20 test-3.txt
-rw-r--r-- 1 nobody 4294967294 0 Oct 10 22:20 test-4.txt
-rw-r--r-- 1 nobody 4294967294 0 Oct 10 22:20 test-5.txt
-rw-r--r-- 1 nobody 4294967294 0 Oct 10 22:20 test-6.txt
-rw-r--r-- 1 nobody 4294967294 0 Oct 10 22:20 test-7.txt
-rw-r--r-- 1 nobody 4294967294 0 Oct 10 22:20 test-8.txt
-rw-r--r-- 1 nobody 4294967294 0 Oct 10 22:20 test-9.txt
-rw-r--r-- 1 nobody 4294967294 300M Oct 10 00:12 testfile
[root@ceph
-test-02 ganesha-data]#

 



推荐阅读
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • 本文详细介绍了如何使用PHP检测AJAX请求,通过分析预定义服务器变量来判断请求是否来自XMLHttpRequest。此方法简单实用,适用于各种Web开发场景。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 创建第一个 MUI 移动应用项目
    本文将详细介绍如何使用 HBuilder 创建并运行一个基于 MUI 框架的移动应用项目。我们将逐步引导您完成项目的搭建、代码编写以及真机调试,帮助您快速入门移动应用开发。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 本文探讨了 RESTful API 和传统接口之间的关键差异,解释了为什么 RESTful API 在设计和实现上具有独特的优势。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 邮件(带附件,模拟文件上传,跨服务器)发送核心代码1.测试邮件发送附件接口***测试邮件发送附件*@parammultipartFile*@return*@RequestMappi ... [详细]
  • 解读MySQL查询执行计划的详细指南
    本文旨在帮助开发者和数据库管理员深入了解如何解读MySQL查询执行计划。通过详细的解析,您将掌握优化查询性能的关键技巧,了解各种访问类型和额外信息的含义。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
author-avatar
手机用户2502923495
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有