Ceph(二)

[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 和密钥交给用户。

cephx1

要使用Monitor进行身份验证,Client将用户名传递给Monitor,Monitor生成会话密钥并使用与用户名相关联的密钥对其进行加密。然后,Monitor将加密的凭证传输回Client。然后,客户端使用共享密钥对有效进行解密就可获取会话密钥。会话密钥标识当前会话的用户。然后,Client代表用户请求一张由会话密钥签名的凭证。Monitor生成一张凭证,用用户的秘密密钥加密它,并将其传送回客户端。client对凭证进行解密,并使用它对整个集群中的osd和元数据服务器的请求进行签名。

cephx2

cephx协议认证client机器和Ceph服务器间正在进行的通讯,二者间认证完成后的每条消息都用凭证签署过,Monitor、OSD、MDS服务器都可用此共享的密钥来校验这些消息。

cephx2

认证提供的保护位于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存储集群守护进程进行交互的应用程序等系统参与者。

cephx2

当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 #编译后的二进制文件
  1. 通过密钥环文件备份与恢复用户:

使用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块设备

  1. 创建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
  1. 创建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
  1. 客户端安装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/
  1. 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/
  1. 拉伸rbd镜像空间
cephyd@ceph-deploy:~/ceph-cluster$ rbd resize --pool webpool --image webdataimg1 --size 8G
  1. 卸载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存储集群的访问。

  1. 创建mds服务
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy mds create ceph-mgr1
  1. 创建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
  1. 创建文件系统并验证
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)
  1. 查看mds状态
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph mds stat
ydcephfs:1 {0=ceph-mgr1=up:active}
  1. 创建客户端账号
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"
  1. 同步用户和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
  1. 客户端验证
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
  1. 内核空间挂载:
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高可用

  1. 添加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
  1. 查看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)
  1. 查看当前文件系统状态
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]]
  1. 设置处于激活状态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)
  1. 高可用优化

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)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,039评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,426评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,417评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,868评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,892评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,692评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,416评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,326评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,782评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,957评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,102评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,790评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,442评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,996评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,113评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,332评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,044评论 2 355

推荐阅读更多精彩内容