[TOC]
三、Cephx 认证
为识别用户并防止中间人攻击,Ceph用cephx认证系统来认证用户和守护进程。
注: cephx协议不解决传输加密(如SSL/TLS)、或者存储加密问题。
Cephx用共享密钥来认证,Client和Monitor集群各自都有client密钥的副本。这样的认证协议使双方不用提供密钥就能相互认证,就是说集群确信用户拥有密钥、而且用户相信集群有密钥的副本。
Ceph的一个关键可伸缩性特性是避免Ceph对象存储的集中接口,这就要求Ceph client必须能够直接与osd交互。Ceph通过cephx认证系统保护数据,它也认证运行Ceph client的用户。
3.1 授权流程
用户通过Ceph client与Monitor联系,每个Monitor都可以对用户进行身份认证并分发秘钥,因此多个Monitor节点就不存在单点故障和认证性能瓶颈。Monitor会返回用于身份认证的数据结构,其中包含获取ceph服务时用到的session key,session key通过client秘钥进行加密,秘钥是在cleint提前配置好的,/etc/ceph/ceph.client.admin.keyring。client使用session key向Monitor请求所需要的服务,Monitor向client提供一个tiket,用于向实际处理数据的OSD等服务验证客户端身份,MON和OSD共享同一个secret,因此OSD会信任所有MON发放的tikettiket存在有效期
3.2 访问流程
要使用cephx,管理员必须先设置好用户。在下面的图解里,client.admin用户从命令行调用ceph auth get-or-create-key 来生成一个用户及其密钥,Ceph的认证子系统生成了用户名和密钥、副本存到Monitor然后把此用户的密钥回传给client.admin用户,也就是说client和Monitor共享着相同的密钥
注: client.admin 用户必须以安全方式把此用户 ID 和密钥交给用户。
要使用Monitor进行身份验证,Client将用户名传递给Monitor,Monitor生成会话密钥并使用与用户名相关联的密钥对其进行加密。然后,Monitor将加密的凭证传输回Client。然后,客户端使用共享密钥对有效进行解密就可获取会话密钥。会话密钥标识当前会话的用户。然后,Client代表用户请求一张由会话密钥签名的凭证。Monitor生成一张凭证,用用户的秘密密钥加密它,并将其传送回客户端。client对凭证进行解密,并使用它对整个集群中的osd和元数据服务器的请求进行签名。
cephx协议认证client机器和Ceph服务器间正在进行的通讯,二者间认证完成后的每条消息都用凭证签署过,Monitor、OSD、MDS服务器都可用此共享的密钥来校验这些消息。
认证提供的保护位于Ceph 客户端和服务器间,没有扩展到Ceph客户端之外。如果用户从远程主机访问Ceph客户端, Ceph认证就不管用了,它不会影响到用户主机和客户端主机间的通讯。
3.3 Cephx配置
cephx协议已默认开启。
执行以下步骤在禁用身份验证的集群上启用cephx。如果您(或您的部署实用程序)已经生成了密钥,则可以跳过与生成密钥相关的步骤。
1. 创建一个client.admin密钥,并为您的client保存密钥的副本
ceph auth get-or-create client.admin mon 'allow *' mds 'allow *' mgr 'allow *' osd 'allow *' -o /etc/ceph/ceph.client.admin.keyring
注: 此命令会覆盖任何存在的 /etc/ceph/client.admin.keyring 文件,如果部署工具已经完成此步骤,千万别再执行此命令。多加小心!
2. 创建monitor集群所需的密钥环、并给它们生成密钥。
ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'
3. 把Monitor密钥环复制到ceph.mon.keyring文件,再把此文件复制到各monitor的mon data目录下。比如要把它复制给名为ceph集群的mon.a,用此命令:
cp /tmp/ceph.mon.keyring /var/lib/ceph/mon/ceph-a/keyring
4. 为每个MGR生成密钥,{$id}是MGR编号:
ceph auth get-or-create mgr.{$id} mon 'allow profile mgr' mds 'allow *' osd 'allow *' -o /var/lib/ceph/mgr/ceph-{$id}/keyring
5. 为每个OSD生成密钥,{$id}是OSD编号:
ceph auth get-or-create osd.{$id} mon 'allow rwx' osd 'allow *' -o /var/lib/ceph/osd/ceph-{$id}/keyring
6. 为每个MDS生成密钥,{$id}是MDS的标识字母:
ceph auth get-or-create mds.{$id} mon 'allow rwx' osd 'allow *' mds 'allow *' mgr 'allow profile mds' -o /var/lib/ceph/mds/ceph-{$id}/keyring
7. 把以下配置加入Ceph配置文件的[global]段下以启用cephx认证:
auth cluster required = cephx
auth service required = cephx
auth client required = cephx
8. 启动或重启Ceph集群
禁用CEPHX
1. 把下列配置加入Ceph配置文件的[global]段下即可禁用cephx认证:
auth cluster required = none
auth service required = none
auth client required = none
2. 启动或重启Ceph集群
3.4 用户管理
本节描述了Ceph客户端用户及其在Ceph存储集群中的认证和授权。用户可以是个人,也可以是使用Ceph客户机与Ceph存储集群守护进程进行交互的应用程序等系统参与者。
当Ceph在启用身份验证和授权(默认情况下启用)的情况下运行时,您必须指定一个用户名和一个包含指定用户的密钥的密匙环(通常通过命令行)。如果不指定用户名,Ceph将使用client。默认用户名为Admin。如果您没有指定一个keyring, Ceph将通过Ceph配置中的keyring设置查找一个keyring。例如,如果您在不指定用户或密匙环的情况下执行ceph health命令:
ceph health
Ceph这样解释这个命令:
ceph -n client.admin --keyring=/etc/ceph/ceph.client.admin.keyring health
ceph基于使能/能力(Capabilities,简称caps)来描述用户可针对MON/OSD或MDS使用的授权范围或级别。
通用的语法格式:{daemon-type} '{cap-spec}[, {cap-spec} ...]'
能力一览表:
r:授予用户读权限,需要它才能获取CRUSH图
w:授予用户写对象的权限。
x:授予用户调用类方法(包括读取和写入)的能力,以及在监视器中执行auth操作的能力。
*:授予用户对特定守护进程/存储池的读取、写入和执行权限,以及执行管理命令的能力
class-read:授予用户调用类读取方法的能力,属于是x能力的子集。
class-write:授予用户调用类写入方法的能力,属于是x能力的子集。
profile osd:授权用户以OSD身份连接其它OSD或监视器。授予OSD们允许其它OSD处理复制、心跳流量和状态报告。
profile mds:授予用户以某个MDS身份连接到其他MDS或监视器的权限。
profile bootstrap-osd:授权一用户自举引导一OSD。授予部署工具,像ceph-disk、ceph-deploy等等,这样它们在自举引导OSD时就有权限增加密钥了。
profile bootstrap-mds:授权一用户自举引导一元数据服务器。授予像 ceph-deploy 一样的部署工具,这样它们在自举引导元数据服务器时就有权限增加密钥了。
Monitor能力:
包括r/w/x和profile {name}
mon 'allow {access-spec} [network {network/prefix}]'
mon 'profile {name}'
例如:mon 'allow rwx' mon 'allow profile osd'
OSD能力:
包括r、w、x、class-read、class-write(类读取))和profileosd(类写入),另外OSD能力还允许进行存储池和名称空间设置。
osd 'allowc apability' [pool=poolname] [namespace=namespace-name]
MGR能力:
mgr 'allow rwx'
MDS能力:
只需要allow或空都表示允许。
mds 'allow'
列出用户
cephyd@ceph-deploy:~$ sudo ceph auth ls
可以结合使用-o 文件名选项和ceph auth list将输出保存到某个文件。
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth ls -o ceph.key
添加用户
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth add client.yd mon 'allow r' osd 'allow rwx pool=ydpool'
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth get client.yd
[client.yd]
key = AQD85yVhu4agORAAxuxlXlEMmfsYzWoQ3t129w==
caps mon = "allow r"
caps osd = "allow rwx pool=ydpool"
exported keyring for client.yd
ceph auth get-or-create
ceph auth get-or-create 此命令是创建用户较为常见的方式之一,它会返回包含用户名(在方括号中)和密钥的密钥文,如果该用户已存在,此命令只以密钥文件格式返回用户名和密钥,还可以使用 -o 指定文件名选项将输出保存到某个文件。
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth get-or-create client.yda mon 'allow r' osd 'allow rwx pool=ydpool'
[client.yda]
key = AQAZ7SVh3tt0JhAAjvBxwuoxthhqWX+0X8v2NA==
ceph auth get-or-create-key:
此命令是创建用户并仅返回用户密钥,对于只需要密钥的客户端(例如 libvirt),此命令非 常有用。如果该用户已存在,此命令只返回密钥。您可以使用 -o 文件名选项将输出保存到 某个文件。 创建客户端用户时,可以创建不具有能力的用户。不具有能力的用户可以进行身份验证,但 不能执行其他操作,此类客户端无法从监视器检索集群地图,但是,如果希望稍后再添加能 力,可以使用 ceph auth caps 命令创建一个不具有能力的用户。 典型的用户至少对 Ceph monitor 具有读取功能,并对 Ceph OSD 具有读取和写入功能。此 外,用户的 OSD 权限通常限制为只能访问特定的存储池。
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth get-or-create-key client.yda mon 'allow r' osd 'allow rwx pool=ydpool'
AQAZ7SVh3tt0JhAAjvBxwuoxthhqWX+0X8v2NA==
ceph auth print-key:
只获取单个指定用户的key信息
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth print-key client.yda
AQAZ7SVh3tt0JhAAjvBxwuoxthhqWX+0X8v2NA==
ceph auth caps:
使用 ceph auth caps 命令可以指定用户以及更改该用户的能力,设置新能力会完全覆盖当前的能力,因此要加上之前的用户已经拥有的能和新的能力,如果看当前能力,可以运行 ceph auth get USERTYPE.USERID,如果要添加能力,使用以下格式时还需要指定现有能力:
root # ceph auth caps USERTYPE.USERID daemon 'allow [r|w|x|*|...] \ [pool=pool-name] [namespace=namespace-name]' [daemon 'allow [r|w|x|*|...] \ [pool=pool-name] [namespace=namespace-name]']
例如:
查看当前用户权限:
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth get client.yda
[client.yda]
key = AQAZ7SVh3tt0JhAAjvBxwuoxthhqWX+0X8v2NA==
caps mon = "allow r"
caps osd = "allow rwx pool=ydpool"
exported keyring for client.yda
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth caps client.yda mon 'allow r' osd 'allow rw pool=ydpool'
updated caps for client.yda
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth get client.yda
[client.yda]
key = AQAZ7SVh3tt0JhAAjvBxwuoxthhqWX+0X8v2NA==
caps mon = "allow r"
caps osd = "allow rw pool=ydpool"
exported keyring for client.yda
ceph auth del:
要删除用户使用ceph auth del TYPE.ID,其中TYPE是client、osd、mon或mds之一,ID是用户名或守护进程的 ID。
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth del client.yda
3.5 密钥环管理
ceph的密钥环是一个保存了secrets、keys、certificates并且能够让客户端通认证访问ceph的keyring file(集合文件),一个keyring file可以保存一个或者多个认证信息,每一个key都有一个实体名称加权限,类型为:{client、mon、mds、osd}.name
当客户端访问ceph集群时,ceph会使用以下四个密钥环文件预设置密钥环设置:
/etc/ceph/<$cluster name>.<user $type>.<user $id>.keyring #保存单个用户的keyring
/etc/ceph/cluster.keyring #保存多个用户的keyring
/etc/ceph/keyring #未定义集群名称的多个用户的keyring
/etc/ceph/keyring.bin #编译后的二进制文件
- 通过密钥环文件备份与恢复用户:
使用ceph auth add等命令添加的用户还需要额外使用ceph-authtool命令为其创建用户密钥环文件。
创建keyring文件命令格式:ceph-authtool --create-keyring FILE
将用户信息导出至keyring文件,对用户信息进行备份。
1. 创建用户
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth get-or-create client.user mon 'allow r' osd 'allow * pool=ydpool'
[client.user]
key = AQCWEiZhxcFGDxAAOkf/oVn0f7ooAEKbzntarA==
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth get client.user
[client.user]
key = AQCWEiZhxcFGDxAAOkf/oVn0f7ooAEKbzntarA==
caps mon = "allow r"
caps osd = "allow * pool=ydpool"
exported keyring for client.user
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph-authtool --create-keyring ceph.client.user.keyring
creating ceph.client.user.keyring
cephyd@ceph-deploy:~/ceph-cluster$ sudo cat ceph.client.user.keyring
cephyd@ceph-deploy:~/ceph-cluster$ sudo file ceph.client.user.keyring
ceph.client.user.keyring: empty
2. 导出keyring到指定文件
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth get client.user -o ceph.client.user.keyring
exported keyring for client.user
cephyd@ceph-deploy:~/ceph-cluster$ sudo cat ceph.client.user.keyring
[client.user]
key = AQCWEiZhxcFGDxAAOkf/oVn0f7ooAEKbzntarA==
caps mon = "allow r"
caps osd = "allow * pool=ydpool"
在创建包含单个用户的密钥环时,通常建议使用ceph集群名称、用户类型和用户名及keyring来命名,并将其保存在/etc/ceph目录中。例如为client.user用户创建ceph.client.user1.keyring。
从keyring文件恢复用户认证信息
可以使用ceph auth import -i 指定keyring文件并导入到ceph:
cephyd@ceph-deploy:~/ceph-cluster$ sudo cat ceph.client.user.keyring
[client.user]
key = AQCWEiZhxcFGDxAAOkf/oVn0f7ooAEKbzntarA==
caps mon = "allow r"
caps osd = "allow * pool=ydpool"
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth del client.user
updated
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth get client.user
Error ENOENT: failed to find client.user in keyring
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth import -i ceph.client.user.keyring
imported keyring
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth get client.user
[client.user]
key = AQCWEiZhxcFGDxAAOkf/oVn0f7ooAEKbzntarA==
caps mon = "allow r"
caps osd = "allow * pool=ydpool"
exported keyring for client.user
密钥环文件多用户:一个keyring文件中可以包含多个不同用户的认证文件。
将多用户导出至密钥环:
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph-authtool --create-keyring ceph.client.yduser.keyring
creating ceph.client.yduser.keyring
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph-authtool ./ceph.client.yduser.keyring --import-keyring ./ceph.client.admin.keyring
importing contents of ./ceph.client.admin.keyring into ./ceph.client.yduser.keyring
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph-authtool -l ./ceph.client.yduser.keyring
[client.admin]
key = AQDQ1xhh9xhvGRAAikpHkft8EoYRQeLxaTuUbw==
caps mds = "allow *"
caps mgr = "allow *"
caps mon = "allow *"
caps osd = "allow *"
cephyd@ceph-deploy:~/ceph-cluster$ aut
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph-authtool ./ceph.client.yduser.keyring --import-keyring ./ceph.client.user.keyring
importing contents of ./ceph.client.user.keyring into ./ceph.client.yduser.keyring
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph-authtool -l ./ceph.client.yduser.keyring
[client.admin]
key = AQDQ1xhh9xhvGRAAikpHkft8EoYRQeLxaTuUbw==
caps mds = "allow *"
caps mgr = "allow *"
caps mon = "allow *"
caps osd = "allow *"
[client.user]
key = AQCWEiZhxcFGDxAAOkf/oVn0f7ooAEKbzntarA==
caps mon = "allow r"
caps osd = "allow * pool=ydpool"
四、RDB块设备
- 创建pool并启用rbd/初始化rbd
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph osd pool create webpool 32 32
pool 'webpool' created
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph osd pool ls
device_health_metrics
ydpool
ydrbd1
webpool
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph osd pool application enable webpool rbd
enabled application 'rbd' on pool 'webpool'
cephyd@ceph-deploy:~/ceph-cluster$ sudo rbd pool init -p webpool
- 创建img镜像
cephyd@ceph-deploy:~/ceph-cluster$ sudo rbd create webdataimg1 --size 3G -p webpool --image-format 2 --image-feature layering
cephyd@ceph-deploy:~/ceph-cluster$ sudo rbd create webdataimg2 --size 5G -p webpool --image-format 2 --image-feature layering
cephyd@ceph-deploy:~/ceph-cluster$ sudo rbd ls -p webpool
webdataimg1
webdataimg2
cephyd@ceph-deploy:~/ceph-cluster$ sudo rbd ls -p webpool -l
NAME SIZE PARENT FMT PROT LOCK
webdataimg1 3 GiB 2
webdataimg2 5 GiB 2
查看img详细信息
cephyd@ceph-deploy:~/ceph-cluster$ sudo rbd --image webdataimg1 -p webpool info
rbd image 'webdataimg1':
size 3 GiB in 768 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: 1677947bac76
block_name_prefix: rbd_data.1677947bac76
format: 2
features: layering
op_features:
flags:
create_timestamp: Thu Aug 26 11:19:55 2021
access_timestamp: Thu Aug 26 11:19:55 2021
modify_timestamp: Thu Aug 26 11:19:55 2021
cephyd@ceph-deploy:~/ceph-cluster$ sudo rbd --image webdataimg2 -p webpool info
rbd image 'webdataimg2':
size 5 GiB in 1280 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: 1680b1ce0101
block_name_prefix: rbd_data.1680b1ce0101
format: 2
features: layering
op_features:
flags:
create_timestamp: Thu Aug 26 11:20:15 2021
access_timestamp: Thu Aug 26 11:20:15 2021
modify_timestamp: Thu Aug 26 11:20:15 2021
- 客户端安装ceph
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy install ceph-client1
ceph目录同步并同步
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy admin ceph-clients
远程拷贝yd用户和ceph.conf文件
cephyd@ceph-deploy:~/ceph-cluster$ sudo scp ceph.client.yd.keyring ceph.conf root@ceph-client1:/etc/ceph/
- client端操作:
验证权限
root@ceph-client1:~# ceph --user yd -s
使用普通用户权限映射
root@ceph-client1:~# rbd --id yd -p webpool device map webdataimg1
格式化并挂载
root@ceph-client1:~# mkfs.ext4 /dev/rbd3
root@ceph-client1:~# mkdir /data3
root@ceph-client1:~# mount /dev/rbd0 /data3/
测试:
root@ceph-client1:~# rbd showmapped
root@ceph-client1:~# cp /var/log/messages /data3/
- 拉伸rbd镜像空间
cephyd@ceph-deploy:~/ceph-cluster$ rbd resize --pool webpool --image webdataimg1 --size 8G
- 卸载rbd
root@ceph-client1:~# rbd showmapped
root@ceph-client1:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
rbd0 251:0 0 8G 0 disk
vda 252:0 0 40G 0 disk
└─vda1 252:1 0 40G 0 part /
root@ceph-client1:~# sudo rbd --id yd -p webpool device unmap webdataimg1
root@ceph-client1:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 252:0 0 40G 0 disk
└─vda1 252:1 0 40G 0 part /
五、 CephFS 文件系统
CephFS即ceph filesystem,可以实现文件系统共享功能,客户端通过ceph协议挂载并使用ceph集群作为数据存储服务器。CephFS需要运行Meta Data Services(MDS)服务,其守护进程为ceph-mds,ceph-mds进程管理与cephFS上存储的文件相关的元数据,并协调对ceph存储集群的访问。
- 创建mds服务
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy mds create ceph-mgr1
- 创建CephFS metadata和data存储池:
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph osd pool create ydcephfsmetadata 32 32
pool 'ydcephfsmetadata' created
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph osd pool create ydcephfsdata 64 64
pool 'ydcephfsdata' created
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph -s
cluster:
id: 003cb89b-8812-4172-a327-6a774c687c6c
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph-mon1,ceph-mon2,ceph-mon3 (age 10d)
mgr: ceph-mgr1(active, since 11d), standbys: ceph-mgr2
osd: 6 osds: 6 up (since 10d), 6 in (since 10d)
data:
pools: 6 pools, 225 pgs
objects: 143 objects, 454 MiB
usage: 2.8 GiB used, 117 GiB / 120 GiB avail
pgs: 225 active+clean
- 创建文件系统并验证
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph fs new ydcephfs ydcephfsmetadata ydcephfsdata
new fs with metadata pool 5 and data pool 6
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph fs ls
name: ydcephfs, metadata pool: ydcephfsmetadata, data pools: [ydcephfsdata ]
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph fs status ydcephfs
ydcephfs - 0 clients
========
RANK STATE MDS ACTIVITY DNS INOS DIRS CAPS
0 active ceph-mgr1 Reqs: 0 /s 10 13 12 0
POOL TYPE USED AVAIL
ydcephfsmetadata metadata 96.0k 36.7G
ydcephfsdata data 0 36.7G
MDS version: ceph version 16.2.5 (0883bdea7337b95e4b611c768c0279868462204a) pacific (stable)
- 查看mds状态
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph mds stat
ydcephfs:1 {0=ceph-mgr1=up:active}
- 创建客户端账号
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth add client.ydfs mon 'allow r' mds 'allow rw' osd 'allow rwx pool=ydcephfsdata'
added key for client.ydfs
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth get client.ydfs
[client.ydfs]
key = AQCKdSdhwMr1FxAAWVYckHtTT7FwlOSccw+iOA==
caps mds = "allow rw"
caps mon = "allow r"
caps osd = "allow rwx pool=ydcephfsdata"
exported keyring for client.ydfs
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph-authtool --create-keyring ceph.client.ydfs.keyring
creating ceph.client.ydfs.keyring
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth get client.ydfs -o ceph.client.ydfs.keyring
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth print-key client.ydfs > ydfs.key
cephyd@ceph-deploy:~/ceph-cluster$ sudo cat ceph.client.ydfs.keyring
[client.ydfs]
key = AQCKdSdhwMr1FxAAWVYckHtTT7FwlOSccw+iOA==
caps mds = "allow rw"
caps mon = "allow r"
caps osd = "allow rwx pool=ydcephfsdata"
- 同步用户和ceph.conf至客户端
cephyd@ceph-deploy:~/ceph-cluster$ sudo scp ydfs.key ceph.client.ydfs.keyring ceph.conf root@ceph-client1:/etc/ceph/
ceph.client.ydfs.keyring 100% 149 285.8KB/s 00:00
ceph.conf 100% 267 677.0KB/s 00:00
- 客户端验证
root@ceph-client1:~# ceph --id ydfs -s
cluster:
id: 003cb89b-8812-4172-a327-6a774c687c6c
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph-mon1,ceph-mon2,ceph-mon3 (age 10d)
mgr: ceph-mgr1(active, since 11d), standbys: ceph-mgr2
mds: 1/1 daemons up
osd: 6 osds: 6 up (since 10d), 6 in (since 10d)
data:
volumes: 1/1 healthy
pools: 6 pools, 225 pgs
objects: 165 objects, 454 MiB
usage: 2.8 GiB used, 117 GiB / 120 GiB avail
pgs: 225 active+clean
- 内核空间挂载:
root@ceph-client1:~# mount -t ceph 172.26.128.90:6789,172.26.128.91:6789,172.26.128.92:6789:/ /datafs -o name=ydfs,secretfile=/etc/ceph/ydfs.key
root@ceph-client1:~# df -h
Filesystem Size Used Avail Use% Mounted on
udev 921M 0 921M 0% /dev
tmpfs 189M 2.9M 187M 2% /run
/dev/vda1 40G 4.3G 34G 12% /
tmpfs 945M 0 945M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 945M 0 945M 0% /sys/fs/cgroup
tmpfs 189M 0 189M 0% /run/user/0
172.26.128.90:6789,172.26.128.91:6789,172.26.128.92:6789:/ 37G 0 37G 0% /datafs
root@ceph-client1:~# cp /var/log/auth.log /datafs/
root@ceph-client1:~# dd if=/dev/zero of=/datafs/testfile bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.0515362 s, 2.0 GB/s
六 MDS高可用
- 添加MDS服务器:
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy mds create ceph-mgr2
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy mds create ceph-mon2
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy mds create ceph-mon3
- 查看mds集群当前的状态
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph mds stat
ydcephfs:1 {0=ceph-mgr1=up:active} 3 up:standby
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph fs status
ydcephfs - 1 clients
========
RANK STATE MDS ACTIVITY DNS INOS DIRS CAPS
0 active ceph-mgr1 Reqs: 0 /s 12 15 12 3
POOL TYPE USED AVAIL
ydcephfsmetadata metadata 168k 36.4G
ydcephfsdata data 300M 36.4G
STANDBY MDS
ceph-mon2
ceph-mgr2
ceph-mon3
MDS version: ceph version 16.2.5 (0883bdea7337b95e4b611c768c0279868462204a) pacific (stable)
- 查看当前文件系统状态
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph fs get ydcephfs
Filesystem 'ydcephfs' (1)
fs_name ydcephfs
epoch 4
flags 12
created 2021-08-26T19:01:38.448604+0800
modified 2021-08-26T19:01:39.454954+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,8=no anchor table,9=file layout v2,10=snaprealm v2}
max_mds 1
in 0
up {0=14710}
failed
damaged
stopped
data_pools [6]
metadata_pool 5
inline_data disabled
balancer
standby_count_wanted 1
[mds.ceph-mgr1{0:14710} state up:active seq 184 addr [v2:172.26.128.93:6802/3875272528,v1:172.26.128.93:6803/3875272528]]
- 设置处于激活状态mds的数量:
目前有四个mds服务器,但是有一个主三个备,可以优化一下部署架构,设置为为两主两备。
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph fs set ydcephfs max_mds 2
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph fs status
ydcephfs - 1 clients
========
RANK STATE MDS ACTIVITY DNS INOS DIRS CAPS
0 active ceph-mgr1 Reqs: 0 /s 12 15 12 3
1 active ceph-mon3 Reqs: 0 /s 10 13 11 0
POOL TYPE USED AVAIL
ydcephfsmetadata metadata 240k 36.4G
ydcephfsdata data 300M 36.4G
STANDBY MDS
ceph-mon2
ceph-mgr2
MDS version: ceph version 16.2.5 (0883bdea7337b95e4b611c768c0279868462204a) pacific (stable)
- 高可用优化
MDS高可用优化: 目前的状态是ceph-mgr1和ceph-mon3分别是active状态,ceph-mon2和 ceph-mgr2分别处于standby状态,现在可以将ceph-mgr2设置为ceph-mgr1的standby,将ceph-mon2设置为ceph-mon3的standby,以实现每个主都有一个固定备份角色的结构,则修改配置文件如下:
cephyd@ceph-deploy:~/ceph-cluster$ cat ceph.conf
[global]
fsid = 003cb89b-8812-4172-a327-6a774c687c6c
public_network = 172.26.128.0/20
cluster_network = 172.26.128.0/20
mon_initial_members = ceph-mon1
mon_host = 172.26.128.90
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
[mds.ceph-mgr1]
mds_standby_for_name = ceph-mgr2
mds_standby_replay = true
[mds.ceph-mon2]
mds_standby_for_name = ceph-mon3
mds_standby_replay = true
分发配置文件
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy --overwrite-conf config push ceph-mon1
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy --overwrite-conf config push ceph-mon2
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy --overwrite-conf config push ceph-mgr1
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy --overwrite-conf config push ceph-mgr2
重启服务
cephyd@ceph-deploy:~/ceph-cluster$ ssh ceph-mon2 'sudo systemctl restart ceph-mds@ceph-mon2.service'
cephyd@ceph-deploy:~/ceph-cluster$ ssh ceph-mon3 'sudo systemctl restart ceph-mds@ceph-mon3.service'
cephyd@ceph-deploy:~/ceph-cluster$ ssh ceph-mgr1 'sudo systemctl restart ceph-mds@ceph-mgr1.service'
cephyd@ceph-deploy:~/ceph-cluster$ ssh ceph-mgr2 'sudo systemctl restart ceph-mds@ceph-mgr2.service'
查mds集群状态
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph fs status
ydcephfs - 1 clients
========
RANK STATE MDS ACTIVITY DNS INOS DIRS CAPS
0 active ceph-mon2 Reqs: 0 /s 12 15 12 1
1 active ceph-mgr2 Reqs: 0 /s 10 13 11 0
POOL TYPE USED AVAIL
ydcephfsmetadata metadata 240k 36.4G
ydcephfsdata data 300M 36.4G
STANDBY MDS
ceph-mgr1
ceph-mon3
MDS version: ceph version 16.2.5 (0883bdea7337b95e4b611c768c0279868462204a) pacific (stable)