ceph 块存储

次文档是和上一篇ceph-deploy部署ceph文档链接写的,环境都是一个环境

1       Ceph 客户端配置

 

1.1   安装ceph包

1.1.1  检查内核是否支撑RBC(10.0.23.130 用于安装客户端)

 

1.1.2  安装ceph客户端

Cat /etc/yum.repos.d/ceph.repo

[ceph]

name=ceph

baseurl=https://mirrors.aliyun.com/ceph/rpm-luminous/el7/x86_64/

gpgcheck=0

priority=0

[ceph-noarch]

name=cephnoarch

baseurl=https://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch/

gpgcheck=0

priority=0

[ceph-source]

name=Ceph source packages

baseurl=https://mirrors.aliyun.com/ceph/rpm-luminous/el7/SRPMS

enabled=0

gpgcheck=1

type=rpm-md

gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc

priority=1

 

[root@k8s-master ~]# yum install -y ceph  #装ceph为的是装rbd命令

1.1.3  创建用户(在ceph服务端创建10.0.23.133)

1.1.3.1        创建ceph块客户端用户名和认证密钥

[cephadmin@ceph-1 my-cluster]$ ceph auth get-or-create client.rbd mon 'allow r' osd 'allow class-read object_prefix rbd_children,allow rwx pool=rbd'|tee ./ceph.client.rbd.keyring

 

1.1.4  客户端配置

1.1.4.1.1       拷贝密钥文件和配置文件到客户端

[cephadmin@ceph-1 my-cluster]$ scp ceph.client.rbd.keyring /etc/ceph/ceph.conf  root@10.0.23.130:/etc/ceph

到客户端10.0.23.130上查看:

 

在客户端执行ceph –s报错需要执行用户名

[root@k8s-master ~]# ceph -s --name client.rbd

 

 

 

1.2   创建块设备及客户端映射

1.2.1  创建块设备(ceph server上操作)

默认创建块设备,会直接创建在rbd  池中,但使用deploy安装后,该rbd池并没有创建。

 

 

 

1.2.2  创建块设备默认池(ceph server上操作)

  $ ceph osd lspools                      //查看集群存储池

$ ceph osd pool create rbd 64 #创建 名为rbd的池 指定pg为64

 

 

确定pg_num  取值是强制性的,因为不能自动计算。下面是几个常用的值(总的pg):

•       少于5个OSD 时可把pg_num设置为 128

•       OSD 数量在5 到10个时,可把   pg_num   设置为512

•       OSD 数量在10到   50个时,可把pg_num 设置为4096

•       OSD 数量大于50时,你得理解权衡方法、以及如何自己计算pg_num 取值

1.2.3  创建块设备(客户端操作)

可以在服务端创建也可以在客户端创建,已经给客户端权限,我这里在客户端操作

rbd create rbd1 --size 2048 --name client.rbd #创建大小3G的 rbd1块设备

 

查看创建的块设备

rbd ls --name client.rbd

 

也可以指定池查看

rbd ls -p rbd -n client.rbd

 

列表形式查看

rbd list -n client.rbd

 

查看块设备的详细信息

rbd --image rbd1 info --name client.rbd

 

1.2.4  映射块设备(客户端操作)

1.2.4.1        映射介绍

映射到客户端,会报错

rbd map --image rbd1 --name client.rbd

 

  • layering:  分层支持
  • exclusive-lock: 排它锁定支持
  • object-map:     对象映射支持(需要排它锁定(exclusive-lock))
  • deep-flatten:   快照扁平化支持(snapshot     flatten      support)
  • fast-diff:   快速差异计算(需要        object-map)

 

     使用krbd(内核rbd)的客户端进行快速diff计算(需要对象映射),我们将无法在CentOS内核3.10上 映射块设备映像,因为该内核不支持对象映射(object-map)、深平(deep-flatten)和快速diff(fastdiff)(在内核4.9中引入了支持)。为了解决这个问题,我们将禁用不支持的特性,有几个选项可以 做到这一点

禁用的三种方法:

²  动态禁用

rbd feature  disable rbd1 exclusive-lock object-map deep-flatten fast-diff  --name client.rbd

²  创建RBD镜像时,之启用分层特性

Rbd create rbd1 –size 2048 –image-feature Layering –name client.rbd

²  Ceph配置文件中禁用

Rbd_default_reatures = 1

 

因我们已经创建了池 rbd1 所以使用动态禁用

1.2.4.2        动态禁用块设备的特性

[root@k8s-master ~]# rbd feature  disable rbd1 exclusive-lock object-map deep-flatten fast-diff --name client.rbd

再次映射,看到映射的设备

[root@k8s-master ~]# rbd map --image rbd1 --name client.rbd

 

 

 查看映射关系

[root@k8s-master ~]# rbd showmapped --name client.rbd

 

 

 

 

 1.2.4.3        创建文件系统并挂载

格式化:

[root@k8s-master ~]# mkfs.xfs /dev/rbd0

 

 

 

创建挂载点:

[root@k8s-master ~]# mkdir  /ceph-dsik1

Mount挂载:

[root@k8s-master ~]# mkdir  /ceph-dsik1

[root@k8s-master ~]# mount /dev/rbd0 /ceph-dsik1

 

 

写数据测试

[root@k8s-master ~]# dd if=/dev/zero of=/ceph-dsik1/testfiel count=100 bs=1M

 

1.2.4.4        做成服务,开机自动挂载

vim /usr/local/bin/rbd-mount

#!/bin/bash

#池名称存储块设备映射的位置

#!/bin/bash

#池名称存储块设备映射的位置

export poolname=rbd

#磁盘映射名称

export rbdimage=rbd1

#mount directory

export mountpoint=/ceph-dsik1

#image mount  / umount 和pool作为参数从systemd服务传递

if [ "$1" == "m" ];then

  modprobe rbd

  rbd feature  disable $rbdimage  object-map deep-flatten fast-diff

  rbd map  $rbdimage --id  rbd --keyring /etc/ceph/ceph.client.rbd.keyring

  mkdir -p $mountpoint

  mount /dev/rbd/$poolname/$rbdimage $mountpoint

 

fi

if [ "$1" == "u" ]; then

  umount $mountpoint

  rbd unmap /dev/rbd/$poolname/$rbdname

 

fi

~   

[root@k8s-master ceph-dsik1]# chmod  +x /usr/local/bin/rbd-mount

 

配置服务脚本

[root@k8s-master ceph-dsik1]# vim /usr/lib/systemd/system/rbd-mount.service

[Unit]

Description=RADOS block device mapping for $rbdimage in pool $poolname

Conflicts=shutdown.target

Wants=network-online.target

After=NetworkManager-wait-online.service

[Service]

Type=oneshot

RemainAfterExit=yes

ExecStart=/usr/local/bin/rdb-mount m

ExecStop=/usr/local/bin/rdb-mount u

[Install]

 

[root@k8s-master ceph-dsik1]# systemctl daemon-reload

[root@k8s-master ceph-dsik1]# systemctl enable rdb-mount.service

 

 

注意: 先测试一下服务是否可用,不要冒然的重启主机测试

posted @ 2021-02-24 12:57  春天的风情  阅读(209)  评论(0编辑  收藏  举报