1、用户权限管理

添加用户1:

ceph auth add: 此命令是添加用户的规范方法。它会创建用户、生成密钥,并添加所有指定的能力.

$ ceph auth add client.tom mon ‘allow r’ osd ‘allow rwx  pool=mytest’

解释:添加一个tom用户,对mon有读取权限,对mypool池的osd有读、写、调用的权限。

验证key,查看用户当前权限:

$ ceph auth get client.tom [client.tom] key = AQDfjCdhj4MHDRAATDTHrxZ7shHUB4S+GHXf0w== caps mon = “allow r” caps osd = “allow rwx pool=mytest” exported keyring for client.tom

ceph 授权和使能

ceph 基于使能/能力(Capabilities,简称 caps )来描述用户可针对 MON/OSD 或 MDS 使用的授 权范围或级别。 通用的语法格式:daemon-type ‘allow caps’ […] 能力一览表:

 r:向用户授予读取权限。访问监视器(mon)以检索 CRUSH 运行图时需具有此能力。

w:向用户授予针对对象的写入权限。

x:授予用户调用类方法(包括读取和写入)的能力,以及在监视器中执行 auth 操作的能 力。*:授予用户对特定守护进程/存储池的读取、写入和执行权限,以及执行管理命令的能力 class-read:授予用户调用类读取方法的能力,属于是 x 能力的子集。 class-write:授予用户调用类写入方法的能力,属于是 x 能力的子集。

profile osd:授予用户以某个 OSD 身份连接到其他 OSD 或监视器的权限。授予 OSD 权限, 使 OSD 能够处理复制检测信号流量和状态报告(获取 OSD 的状态信息)。 profile mds:授予用户以某个 MDS 身份连接到其他 MDS 或监视器的权限。 profile bootstrap-osd:授予用户引导 OSD 的权限(初始化 OSD 并将 OSD 加入 ceph 集群),授 权给部署工具,使其在引导 OSD 时有权添加密钥。 profile bootstrap-mds:授予用户引导元数据服务器的权限,授权部署工具权限,使其在引导 元数据服务器时有权添加密钥。

 

MON 能力:

包括 r/w/x 和 allow profile cap(ceph 的运行图) 例如: mon ‘allow rwx’ mon ‘allow profile osd’

OSD 能力:

 包括 r、w、x、class-read、class-write(类读取))和 profile osd(类写入),另外 OSD 能力还允 许进行存储池和名称空间设置。 osd ‘allow capability’ [pool=poolname] [namespace=namespace-name] MDS 能力:

只需要 allow 或空都表示允许。 mds ‘allow’

 

添加用户2:

ceph auth get-or-create 此命令是创建用户较为常见的方式之一,它会返回包含用户名(在方 括号中)和密钥的密钥文,如果该用户已存在,此命令只以密钥文件格式返回用户名和密钥, 还可以使用 -o 指定文件名选项将输出保存到某个文件。

ceph auth get-or-create client.jack mon ‘allow r’ osd ‘allow rwx pool=mytest’

 

删除用户

ceph auth del TYPE.ID,其中 TYPE 是 client、osd、mon 或 mds 之一,ID 是用 户名或守护进程的 ID。

ceph auth del client.tom

通过文件恢复误删用户

#导出 keyring 至指定文件

root@ceph-deploy:~#  ceph auth get client.user1 -o ceph.client.user1.keyring

exported keyring for client.user1

从 keyring 文件恢复用户认证信息

ceph auth del client.user1 #演示误删除用户

ceph auth import -i ceph.client.user1.keyring #导入用户

 

授权流程

每个 mon 节点都可以对客户端进行身份认证并分发秘钥,因此多个 mon 节点就不存在单点 故障和认证性能瓶颈 mon 节点会返回用于身份认证的数据结构,其中包含获取 ceph 服务时用到的 session key, session key 通 过 客 户 端 秘 钥 进 行 加 密 , 秘 钥 是 在 客 户 端 提 前 配 置 好 的 , /etc/ceph/ceph.client.admin.keyring 客户端使用 session key 向 mon 请求所需要的服务,mon 向客户端提供一个 tiket,用于向 实际处理数据的 OSD 等服务验证客户端身份,MON 和 OSD 共享同一个 secret,因此 OSD 会信任所有 MON 发放的 tiket tiket 存在有效期 注意: CephX 身份验证功能仅限制在 Ceph 的各组件之间,不能扩展到其他非 ceph 组件 Ceph 只负责认证授权,不能解决数据传输的加密问题

 

2、挂载rbd

创建rbd

ceph osd pool create myrbd1 64 64 #创建存储池,指定 pg 和 pgp 的数量,pgp 是对存在于 pg 的数据进行组合存储,pgp 通常等于 pg 的值

ceph-admin@ceph-deploy:~$ ceph osd pool create  myrbd1  32 32 pool ‘myrbd1’ created ceph-admin@ceph-deploy:~$ ceph osd pool application enable myrbd1 rbd #对存储池启用 RBD 功能 enabled application ‘rbd’ on pool ‘myrbd1’ ceph-admin@ceph-deploy:~$ rbd pool init -p myrbd1 #通过 RBD 命令对存储池初始化

rbd 存储池并不能直接用于块设备,而是需要事先在其中按需创建映像(image), 并把映像文件作为块设备使用,rbd 命令可用于创建、查看及删除块设备相在的映像(image), 以及克隆映像、创建快照、将映像回滚到快照和查看快照等管理操作,例如,下面的命令能 够创建一个名为 myimg1 的映像:

$ rbd create myimg1 –size 5G –pool myrbd1

$ rbd create myimg2 –size 3G –pool myrbd1 –image-format 2 –image-feature layering #后续步骤会使用 myimg2 ,由于 centos 系统内核较低无法挂载使用,因此只开启部分特性。 除了 layering 其他特性需要高版本内核支持

查看指定 rdb 的信息

ceph-admin@ceph-deploy:~$ rbd –image myimg1 –pool myrbd1 info rbd image ‘myimg1’:        size 5 GiB in 1280 objects        order 22 (4 MiB objects)        snapshot_count: 0        id: 2cf4ddac57095        block_name_prefix: rbd_data.2cf4ddac57095        format: 2        features: layering, exclusive-lock, object-map, fast-diff, deep-flatten        op_features:        flags:        create_timestamp: Mon Aug 23 21:24:59 2021        access_timestamp: Mon Aug 23 21:24:59 2021        modify_timestamp: Mon Aug 23 21:24:59 2021 ceph-admin@ceph-deploy:~$ rbd –image myimg2 –pool myrbd1 info rbd image ‘myimg2’:        size 3 GiB in 768 objects        order 22 (4 MiB objects)        snapshot_count: 0        id: 2cf5063fe8e5d        block_name_prefix: rbd_data.2cf5063fe8e5d        format: 2        features: layering        op_features:        flags:        create_timestamp: Mon Aug 23 21:25:18 2021        access_timestamp: Mon Aug 23 21:25:18 2021        modify_timestamp: Mon Aug 23 21:25:18 2021

 

 

客户端使用块存储

在客户端安装 ceph-common

客户端服务器配置 yum 源及 ceph 认证文件:

#配置 yum 源:

# yum install epel-release

 # yum install https://mirrors.aliyun.com/ceph/rpm-octopus/el7/noarch/ceph-release-1-1.el7.noarch.rpm -y

#yum install ceph-common

#从部署服务器同步认证文件:

 [ceph@ceph-deploy ceph-cluster]$ scp ceph.conf ceph.client.admin.keyring root@172.31.6.201:/etc/ceph/

客户端映射 img

[root@nano ~]#  rbd -p myrbd1 map myimg2 /dev/rbd0 [root@nano ~]#  rbd -p myrdb1 map myimg1 rbd: sysfs write failed RBD image feature set mismatch. You can disable features unsupported by the kernel with “rbd feature disable myrdb1/myimg1 object-map fast-diff deep-flatten”. In some cases useful info is found in syslog – try “dmesg | tail”. rbd: map failed: (6) No such device or address

需要关闭下面的3个属性,才能挂载,与上文一致

rbd feature disable myrdb1/myimg1 object-map fast-diff deep-flatten

[root@nano ~]# lsblk

NAME            MAJ:MIN RM SIZE RO TYPE MOUNTPOINT

sda               8:0    0  20G  0 disk

├─sda1            8:1    0   1G  0 part /boot

└─sda2            8:2    0  19G  0 part

  ├─centos-root 253:0    0  17G  0 lvm  /

  └─centos-swap 253:1    0   2G  0 lvm  [SWAP]

rbd0            252:0    0   3G  0 disk

可以按正常的硬盘做文件系统、挂载

[root@nano ~]# fdisk  /dev/rbd0 Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table Building a new DOS disklabel with disk identifier 0xc5be4896. Command (m for help): n Partition type:   p   primary (0 primary, 0 extended, 4 free)   e   extended Select (default p): p Partition number (1-4, default 1): First sector (8192-6291455, default 8192): Using default value 8192 Last sector, +sectors or +size{K,M,G} (8192-6291455, default 6291455): Using default value 6291455 Partition 1 of type Linux and of size 3 GiB is set Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. [root@nano ~]# mkfs.ext4  /dev/rbd0p1 mke2fs 1.42.9 (28-Dec-2013) Discarding device blocks: done                             Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=1024 blocks, Stripe width=1024 blocks 196608 inodes, 785408 blocks 39270 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=805306368 24 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912 Allocating group tables: done                             Writing inode tables: done                             Creating journal (16384 blocks): done Writing superblocks and filesystem accounting information:       done [root@nano ~]# lsblk NAME            MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda               8:0    0  20G  0 disk ├─sda1            8:1    0   1G  0 part /boot └─sda2            8:2    0  19G  0 part  ├─centos-root 253:0    0  17G  0 lvm  /  └─centos-swap 253:1    0   2G  0 lvm  [SWAP] rbd0            252:0    0   3G  0 disk └─rbd0p1        252:1    0   3G  0 part [root@nano ~]# mount /dev/rbd0p1 /mnt [root@nano ~]# cd /mnt [root@nano mnt]# ls lost+found [root@nano mnt]# touch myaaa [root@nano mnt]# ls lost+found  myaaa

 

3、ceph radosgw(RGW)对象存储

 RGW 提供的是 REST 接口,客户端通过 http 与其进行交互,完成数据的增删改查等管理操作。 radosgw 用在需要使用 RESTful API 接口访问 ceph 数据的场合,因此在使用 RBD 即块存储得 场合或者使用 cephFS 的场合可以不用启用 radosgw 功能。

部署 radosgw 服务

如果是在使用 radosgw 的场合,则以下命令将 ceph-mgr1 服务器部署为 RGW 主机:

root@ubuntu-ceph1:~#  apt-cache madison radosgw

root@ubuntu-ceph1:~#  apt install radosgw=16.2.5-1bionic

ceph-admin@ceph-deploy:~/ceph-cluster$ ceph-deploy –overwrite-conf rgw create ubuntu-ceph1

验证:

http://192.168.202.142:7480

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

验证 radosgw 存储池:

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

4、删除存储池

如果把存储池删除会导致把存储池内的数据全部删除,因此 ceph 为了防止误删除存储池设 置了两个机制来防止误删除操作。 第一个机制是 NODELETE 标志,需要设置为 false 但是默认就是 false 了

如果设置为了 true 就表示不能删除。

root@ubuntu-ceph1:~# ceph osd pool get mybrd  nodelete

nodelete: false

集群范围的配置参数 mon allow pool delete,默认值为 false,即监视器不允许 删除存储池,可以在特定场合使用 tell 指令临时设置为(true)允许删除,在删除指定的 pool 之后再重新设置为 false

root@ubuntu-ceph1:~# ceph tell mon.* injectargs –mon-allow-pool-delete=true

root@ubuntu-ceph1:~# ceph osd pool rm  mybrd  mybrd  –yes-i-really-really-mean-it

pool ‘mybrd’ removed

root@ubuntu-ceph1:~# ceph tell mon.* injectargs –mon-allow-pool-delete=false

5、Ceph-FS 文件存储

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

部署 MDS 服务:

在指定的 ceph-mds 服务器部署 ceph-mds 服务,可以和其它服务器混用(如 ceph-mon、

ceph-mgr)

Ubuntu:

root@ubuntu-ceph1:~# apt-cache madison ceph-mds

root@ubuntu-ceph1:~#  apt install ceph-mds=16.2.5-1bionic

部署:

ceph-admin@ceph-deploy:~/ceph-cluster$ ceph-deploy mds create  ubuntu-ceph1

 

验证 MDS 服务

MDS 服务目前还无法正常使用,需要为 MDS 创建存储池用于保存 MDS 的数据。

$ ceph mds stat

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 #当前为备用状态,需要分配 pool 才可以使用。

 

创建 CephFS metadata 和 data 存储池

 

ceph-admin@ceph-deploy:~/ceph-cluster$ ceph osd pool create cephfs-metadata 32 32 ceph-admin@ceph-deploy:~/ceph-cluster$ ceph osd pool create cephfs-data 64 64 ceph-admin@ceph-deploy:~/ceph-cluster$ ceph pg ls -by-pool cephfs-data | awk  print  ‘{$1,$2,$115}’ ceph-admin@ceph-deploy:~/ceph-cluster$ ceph fs new mycephfs cephfs-metadata cephfs-data new fs with metadata pool 11 and data pool 12 ceph-admin@ceph-deploy:~/ceph-cluster$ ceph fs ls name: mycephfs, metadata pool: cephfs-metadata, data pools: [cephfs-data ] ceph-admin@ceph-deploy:~/ceph-cluster$ ceph fs status mycephfs mycephfs – 0 clients ======== RANK  STATE       MDS          ACTIVITY     DNS    INOS   DIRS   CAPS   0    active  ubuntu-ceph1  Reqs:    0 /s    10     13     12      0         POOL         TYPE     USED  AVAIL   cephfs-metadata  metadata  96.0k   189G    cephfs-data      data       0    189G   MDS version: ceph version 16.2.5 (0883bdea7337b95e4b611c768c0279868462204a) pacific (stable)

验证 cepfFS 服务状态:

ceph-admin@ceph-deploy:~/ceph-cluster$ ceph mds stat

mycephfs:1 {0=ubuntu-ceph1=up:active}

 

客户端挂载 cephFS:

 在 ceph 的客户端测试 cephfs 的挂载,需要指定 mon 节点的 6789 端口:

ceph-admin@ceph-deploy:~/ceph-cluster$ cat ceph.client.admin.keyring

[client.admin]

key = AQAuHCJhpr2nLhAAaJqMjViYIVOK8KZ3fjgm+g==

caps mds = “allow *”

caps mgr = “allow *”

caps mon = “allow *”

caps osd = “allow *”

#ubuntu 及 centos client 挂载(内核版本 2.6.34 在 3.6.34 及以上):

mount -t ceph 192.168.202.142:6789:/     /mnt -o name=admin,secret=AQAuHCJhpr2nLhAAaJqMjViYIVOK8KZ3fjgm+g==

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

数据写入验证:

dd if=/dev/zero  of=/mnt/cephfs-testfile bs=4M count=25

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

验证 ceph 存储池数据空间

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

mds高可用

root@ubuntu-ceph1:~# apt-cache madison ceph-mds

root@ubuntu-ceph1:~#  apt install ceph-mds=16.2.5-1bionic

ceph-admin@ceph-deploy:~/ceph-cluster$ ceph-deploy mds create ubuntu-ceph2

ceph-admin@ceph-deploy:~/ceph-cluster$ ceph-deploy mds create ubuntu-ceph3

ceph-admin@ceph-deploy:~/ceph-cluster$ ceph mds stat

mycephfs:1 {0=ubuntu-ceph1=up:active} 2 up:standby

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

ceph fs status

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

ceph fs get mycephfs

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

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

ceph fs set mycephfs max_mds 2 #设置同时活跃的主 mds 最大值为 2。

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=