Ceph 是一个开源的分布式存储系统,包括对象存储、块设备、文件系统。它可靠性高、管理方便、伸缩性强,能够轻松应对PB、EB级别数据。Ceph 存储体系中,核心为 RADOS,它是一个高可用分布式对象存储,该模块负责对集群众多 OSD 的运行,保证存储系统的可用性。同时该模块通过 LIBRADOS 的公共库对外提供存储服务,如对象存储、块设备存储。
要使用 Ceph 存储体系中的块设备、文件系统以及对象存储,必须保证已完成 Ceph 存储集群的搭建,并且保证 Ceph 存储集群处于 active + clean 状态。这里搭建过程可以参考Centos7 Ceph 存储集群搭建 文章
Ceph 文件系统,我们一般称为 cephfs。接下来我们演示一下如何创建一个 cephfs 文件系统。注意:如果在新的节点上使用 cephfs 的话,需要通过 ceph-deploy 安装 ceph 到该节点上,这里就不在描述了,参照上边块设备第一部分安装即可。这里我还是在 admin-node 上创建文件系统。一个 Ceph 文件系统需要至少两个 RADOS 存储池,一个用于数据、一个用于元数据。接下来,我们先创建两个存储池。
$ ceph osd pool create cephfs_data 64
pool 'cephfs_data' created
$ ceph osd pool create cephfs_metadata 64
pool 'cephfs_metadata' created
创建完毕,就可以用 fs new ... 命令创建文件系统了。
$ ceph fs new cephfs cephfs_metadata cephfs_data
new fs with metadata pool 11 and data pool 10
$ ceph fs ls
name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
OK,cephfs 文件系统已经创建完毕,接下来我们看下元数据 MDS 的状态,看看是否为 active 状态。
$ ceph mds stat
e2: 0/0/1 up
有两种方式挂载,一种是使用内核驱动挂载,一种是用户空间挂载。
Ceph v0.55 及后续版本默认开启了 cephx 认证,所以在挂载时,需要指明其密钥,以便通过认证。这里的密钥环就是之前提到的 ceph.client.admin.keyring 文件。
# 复制密钥 key
$ cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
key = AQD/6ShariweMRAAkc1xN/H0ocAlpjp09z5blw==
caps mds = "allow *"
caps mon = "allow *"
caps osd = "allow *"
# 创建挂载目录
$ sudo mkdir /mnt/cephfs
# 挂载 cephfs 到该目录,并指明用户名和密钥
$ sudo mount -t ceph 10.222.77.213:6789:/ /mnt/cephfs -o name=admin,secret=AQD/6ShariweMRAAkc1xN/H0ocAlpjp09z5blw==
不过这种方式,会把密钥显示留在了 Bash 命令里面,我们可以更安全的方式从文件读取。
# 将密钥 key 保存到文件中
$ sudo vim /etc/ceph/admin.secret
AQD/6ShariweMRAAkc1xN/H0ocAlpjp09z5blw==
$ sudo mount -t ceph 10.222.77.213:6789:/ /mnt/cephfs -o name=admin,secretfile=/etc/ceph/admin.secret
很遗憾,执行报错 mount error 5 = Input/output error .这就是上边元数据 MDS 的状态那里出的问题。因为我们必须部署至少一个元数据服务器才能使用 CephFS 文件系统。接下来,我们就部署一个元数据服务器 MDS。
# 在 ceph-deploy (admin-node) 节点上执行
$ ceph-deploy mds create admin node02 node03
创建成功,我们在看一下当前集群 MDS 状态。
$ ceph mds stat
e6: 1/1/1 up {0=node0=up:active}, 1 up:standby
ok 没问题了。
$ df -h
...
10.222.77.213:6789:/ 66G 33G 33G 50% /mnt/cephfs
这里可以看到 cephfs 将两个节点 node0 和 node1 容量合并了。(我的虚拟机 node02、node03 / 根目录容量为 33 G,每个节点使用了 16G 左右。)
最后,我们在测试一下生成一个 1G 大文件,看是否自动同步到 node0 和 node1 吧!
$ sudo dd if=/dev/zero of=testfs bs=1G count=1
记录了1+0 的读入
记录了1+0 的写出
1073741824字节(1.1 GB)已复制,9.0857 秒,118 MB/秒
$ df -h
...
10.222.77.213:6789:/ 66G 36G 30G 55% /mnt/cephfs
注意: 如需卸载 cephfs 文件系统,可以使用 sudo umount /mnt/cephfs 即可。
设置开机自动挂载/etc/fstab,例如
10.100.101.82:6789,10.100.101.83:6789,10.100.101.84:6789:/ /data/WEBLOG/ ceph name=admin,secret=AQC5GxxxxxxxxxxxIhtlf/qWNGF0ZtSrzg==,_netdev 0 0
mount -a
安装ceph-fuse
##添加yum源
cat /etc/yum.repos.d/ceph.repo
[Ceph]
name=Ceph packages for $basearch
baseurl=http://download.ceph.com/rpm-jewel/el7/$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
priority=1
##添加epel-repository和Ceph存储库
sudo yum -y install epel-release
sudo rpm -Uhv http://download.ceph.com/rpm-jewel/el7/noarch/ceph-release-1-1.el7.noarch.rpm
yum -y install ceph-fuse
## 将ceph.conf和ceph.client.admin.keyring 拷贝到服务器上进行用户空间文件系统挂载
cat ceph.client.admin.keyring
[client.admin]
key = AQC5GwZbbwtcOhAAxxxWNGF0ZtSrzg==
caps mds = "allow *"
caps mon = "allow *"
caps osd = "allow *"
cat /etc/ceph/ceph.conf
[global]
fsid = b15d02d9-1595-4b75-8b51-4da7f2c3e2fd
mon_initial_members = beta-k8s-etcd-2, beta-k8s-etcd-3, beta-k8s-node-3
mon_host = xx
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd pool default size = 3
public network = 10.100.xx.0/24
mon_pg_warn_max_per_osd = 600
ceph-fuse -m 10.100.xx:6789,10.100.xx:6789,10.100.xx:6789 /mnt/
id=admin /mnt/ fuse.ceph defaults 0 0
mount -a