ceph资源池Pool管理与三大接口的部署

2023年 10月 12日 287.3k 0

1.pool池的部署

上面我们已经完成了 Ceph 集群的部署,但是我们如何向 Ceph 中存储数据呢?首先我们需要在 Ceph 中定义一个 Pool 资源池。Pool 是 Ceph 中存储 Object 对象抽象概念。我们可以将其理解为 Ceph 存储上划分的逻辑分区,Pool 由多个 PG 组成;而 PG 通过 CRUSH 算法映射到不同的 OSD 上;同时 Pool 可以设置副本 size 大小,默认副本数量为 3。

Ceph 客户端向 monitor 请求集群的状态,并向 Pool 中写入数据,数据根据 PGs 的数量,通过 CRUSH 算法将其映射到不同的 OSD 节点上,实现数据的存储。 这里我们可以把 Pool 理解为存储 Object 数据的逻辑单元;当然,当前集群没有资源池,因此需要进行定义。

具体操作

1.创建一个pool资源池,其名字为 mypool,PGs 数量设置为 64,设置 PGs 的同时还需要设置 PGP(通常PGs和PGP的值是相同的):

PG (Placement Group),pg 是一个虚拟的概念,用于存放 object,PGP(Placement Group for Placement purpose),相当于是 pg 存放的一种 osd 排列组合

cd /etc/ceph

ceph osd pool create mypool 64 64

image.png

2.查看集群 Pool 信息

ceph osd pool ls    或    rados lspools
ceph osd lspools

image.png

3.查看资源池副本的数量

ceph osd pool get mypool size

image.png

4.查看PG 和 PGP 数量

ceph osd pool get mypool pg_num
ceph osd pool get mypool pgp_num

image.png

5.修改 pg_num 和 pgp_num 的数量为 128

ceph osd pool set mypool pg_num 128
ceph osd pool set mypool pgp_num 128

ceph osd pool get mypool pg_num
ceph osd pool get mypool pgp_num

image.png

image.png

6.修改 Pool 副本数量为 2

ceph osd pool set mypool size 2

ceph osd pool get mypool size

image.png

7.修改默认副本数为2

vim ceph.conf
......
osd_pool_default_size = 2

ceph-deploy --overwrite-conf config push node01 node02 node03

image.png

image.png

image.png

8.删除pool资源池

1)删除存储池命令存在数据丢失的风险,Ceph 默认禁止此类操作,需要管理员先在 ceph.conf 配置文件中开启支持删除存储池的操作
vim ceph.conf
......
[mon]
mon allow pool delete = true

image.png

推送 ceph.conf 配置文件给所有 mon 节点
ceph-deploy --overwrite-conf config push node01 node02 node03

image.png

所有 mon 节点重启 ceph-mon 服务
systemctl restart ceph-mon.target

image.png

执行删除 Pool 命令
ceph osd pool rm lzq1 lzq1 --yes-i-really-really-mean-it

image.png

2.创建 CephFS 文件系统 MDS 接口

1.在管理节点创建mds服务

cd /etc/ceph
ceph-deploy mds create node01 node02 node03

image.png

2.查看各个节点的 mds 服务

ssh root@node01 systemctl status ceph-mds@node01
ssh root@node02 systemctl status ceph-mds@node02
ssh root@node03 systemctl status ceph-mds@node03

image.png

3.在管理节点创建存储池,启用 ceph 文件系统

ceph 文件系统至少需要两个 rados 池,一个用于存储数据,一个用于存储元数据。此时数据池就类似于文件系统的共享目录。

ceph osd pool create cephfs_data 128					
#创建数据Pool

ceph osd pool create cephfs_metadata 128				
#创建元数据Pool

image.png

4.创建 cephfs接口名称

命令格式:ceph fs new   

ceph fs new mycephfs cephfs_metadata cephfs_data		

#启用ceph,元数据Pool在前,数据Pool在后

image.png

5.查看mds状态,一个up,其余两个待命,目前的工作的是node01上的mds服务

image.png

6.创建用户

语法格式:ceph fs authorize    client.    rw

#账户为 client.zhangsan,用户 name 为 zhangsan,zhangsan 对ceph文件系统的 / 根目录(注意不是操作系统的根目录)有读写权限
ceph fs authorize mycephfs client.lzq / rw | tee /etc/ceph/zhangsan.keyring

# 账户为 client.lisi,用户 name 为 lisi,lisi 对文件系统的 / 根目录只有读权限,对文件系统的根目录的子目录 /test 有读写权限
ceph fs authorize mycephfs client.yhy / r /lzq rw | tee /etc/ceph/lisi.keyring

image.png

image.png

  • 到客户端中要在public网络中,在客户端创建工作目录
  • mkdir /etc/ceph
    

    image.png

    8.在ceph 的管理节点给客户端拷贝 ceph 的配置文件 ceph.conf 和账号的秘钥环文件 lzq.keyring、yhy.keyring

    scp ceph.conf lzq.keyring  yhy.keyring client:/etc/ceph
    

    image.png

    9.在客户端安装ceph软件包

    cd /opt
    wget https://download.ceph.com/rpm-nautilus/el7/noarch/ceph-release-1-1.el7.noarch.rpm --no-check-certificate
    rpm -ivh ceph-release-1-1.el7.noarch.rpm
    yum install -y ceph 
    
    rpm -qa | grep ceph
    

    image.png

    image.png

    10.在客户端制作秘钥文件

    cd /etc/ceph
    ceph-authtool -n client.lzq -p lzq.keyring > lzq.key	
    #把 lzq 用户的秘钥导出到 lzq.keyl
    
    ceph-authtool -n client.yhy -p yhy.keyring > yhy.key
    #把 yhy 用户的秘钥导出到 yhy.key
    

    11.客户端进行挂载

    方式一:基于内核

    语法格式:
    mount -t ceph node01:6789,node02:6789,node03:6789:/    -o name=,secret=
    
    mount -t ceph node01:6789,node02:6789,node03:6789:/    -o name=,secretfile=
    
    
    

    image.png

    如果这边无法挂载的话我们需要重启每个node服务器的osd进程

    image.png

    12.我们在我们挂载的文件夹中写文件测试权限

    image.png

    13.我们将yhy用户也进行挂载

    mount -t ceph node01:6789,node02:6789,node03:6789:/ /data/yhy -o name=yhy,secretfile=/etc/ceph/yhy.key
    

    image.png

    14.测试我们yhy用户的权限大小

    image.png

    image.png

    15.基于fuse工具进行挂载

    在 ceph 的管理节点给客户端拷贝 ceph 的配置文件 ceph.conf 和账号的秘钥环文件 zhangsan.keyring、lisi.keyring
    scp ceph.client.admin.keyring root@client:/etc/ceph
    

    image.png

    在客户端安装 ceph-fuse
    yum install -y ceph-fuse
    

    image.png

    ceph-fuse -m node01:6789,node02:6789,node03:6789 /data/kgc/
    

    image.png

    image.png

    image.png

    3. 创建 Ceph 块存储系统 RBD 接口

    在服务端上配置RBD

    1.在管理服务器创建一个名为rbd-demo 的专门用于 RBD 的存储池

    ceph osd pool create rbd-demo 64 64
    

    image.png

    2、将存储池转换为 RBD 模式

    ceph osd pool application enable rbd-demo rbd
    

    image.png

    3、初始化存储池

    rbd pool init -p rbd-demo			
    # -p 等同于 --pool
    

    4.创建镜像

    rbd create -p rbd-demo --image rbd-demo1.img --size 10G
    
    可简写为:
    rbd create rbd-demo/rbd-demo2.img --size 10G
    

    image.png

  • 镜像管理
  • 查看存储池下存在哪些镜像
    
    rbd ls -l -p rbd-demo
    

    image.png

    查看镜像的详细信息
    rbd info -p rbd-demo --image rbd-demo1.img
    

    image.png

    修改镜像大小
    
    rbd resize -p rbd-demo --image rbd-demo1.img --size 20G
    
    rbd info -p rbd-demo --image rbd-demo1.img
    

    image.png

    删除镜像
    #直接删除镜像
    rbd rm -p rbd-demo --image rbd-demo2.img
    rbd remove rbd-demo/rbd-demo2.img
    
    #推荐使用 trash 命令,这个命令删除是将镜像移动至回收站,如果想找回还可以恢复
    rbd trash move rbd-demo/rbd-demo1.img
    
    rbd ls -l -p rbd-demo
    
    rbd trash list -p rbd-demo
    20bfb6fc6e86c rbd-demo1.img
    
    rbd trash restore rbd-demo/20bfb6fc6e86c
    
    rbd ls -p rbd-demo -l
    

    image.png

    .在客户端使用RBD

    本例主要是使用Linux客户端挂载RBD镜像为本地磁盘使用。开始之前需要在所需要客户端节点上面安装ceph-common软件包,因为客户端需要调用rbd命令将RBD镜像映射到本地当作一块普通硬盘使用。并还需要把ceph.conf配置文件和授权keyring文件复制到对应的节点。

    1.在管理节点创建并授权一个用户可访问指定的 RBD 存储池
    #示例,指定用户标识为client.osd-mount,对另对OSD有所有的权限,对Mon有只读的权限

    ceph auth get-or-create client.osd-mount osd "allow * pool=rbd-demo" mon "allow r" > /etc/ceph/ceph.client.osd-mount.keyring
    

    image.png

    2.修改RBD镜像特性,CentOS7默认情况下只支持layering和striping特性,需要将其它的特性关闭

    rbd feature disable rbd-demo/rbd-demo1.img object-map,fast-diff,deep-flatten
    

    image.png

    3.将用户的keyring文件和ceph.conf文件发送到客户端的/etc/ceph目录下

    scp ceph.client.osd-mount.keyring ceph.conf root@client:/etc/ceph
    

    image.png

    4.在linux客户端操作

    安装 ceph-common 软件包
    yum install -y ceph-common
    

    image.png

    5.执行客户端映射

    cd /etc/ceph
    rbd map rbd-demo/rbd-demo1.img --keyring /etc/ceph/ceph.client.osd-mount.keyring --user osd-mount
    
    #查看映射
    rbd showmapped
    rbd device list
    

    image.png

    6.格式化并挂载,就可以正常使用了

    mkfs.xfs /dev/rbd0
    
    mkdir -p /data/lzq
    mount /dev/rbd0 /data/lzq
    

    image.png

    image.png

    7.在线扩容

    在管理节点调整镜像的大小
    rbd resize rbd-demo/rbd-demo1.img --size 30G
    

    image.png

    在客户端刷新设备文件
    xfs_growfs /dev/rbd0		
    #刷新xfs文件系统容量
    
    resize2fs /dev/rbd0			
    #刷新ext4类型文件系统容量
    

    image.png

    8.快照管理

    对 rbd 镜像进行快照,可以保留镜像的状态历史,另外还可以利用快照的分层技术,通过将快照克隆为新的镜像使用。

    在客户端写入文件
    [root@client ceph]#echo 1111 > /data/lzq/11
    [root@client ceph]#echo 222 > /data/lzq/22
    [root@client ceph]#echo 233 > /data/lzq/33
    

    image.png

    在管理节点对镜像创建快照
    rbd snap create --pool rbd-demo --image rbd-demo1.img --snap demo1_snap1
    
    可简写为:
    rbd snap create rbd-demo/rbd-demo1.img@demo1_snap1
    
    //列出指定镜像所有快照
    rbd snap list rbd-demo/rbd-demo1.img
    

    image.png

    9.回滚镜像到指定

    #在客户端操作
    rm -rf /data/lzq/*
    umount /data/lzq
    rbd unmap rbd-demo/rbd-demo1.img
    

    image.png

    在管理节点操作
    rbd snap rollback rbd-demo/rbd-demo1.img@demo1_snap1
    

    image.png

    在我们的客户端进行重新挂载
    rbd map rbd-demo/rbd-demo1.img --keyring /etc/ceph/ceph.client.osd-mount.keyring --user osd-mount
    mount /dev/rbd0 /data/lzq
    ls /data/lzq				#发现数据还原回来了
    

    image.png

    10.删除快照

    #删除指定快照:
    rbd snap rm rbd-demo/rbd-demo1.img@demo1_snap1
    
    #删除所有快照:
    rbd snap purge rbd-demo/rbd-demo1.img
    

    image.png

    11.快照的分层

    快照分层支持用快照的克隆生成新镜像,这种镜像与直接创建的镜像几乎完全一样,支持镜像的所有操作。唯一不同的是克隆镜像引用了一个只读的上游快照,而且此快照必须要设置保护模式。

    将上游快照设置为保护模式:
    
    rbd snap create rbd-demo/rbd-demo1.img@demo1_snap666
    
    rbd snap protect rbd-demo/rbd-demo1.img@demo1_snap666
    

    image.png

    克隆快照为新的镜像
    rbd clone rbd-demo/rbd-demo1.img@demo1_snap666 --dest rbd-demo/rbd-demo666.img
    
    rbd ls -p rbd-demo
    

    image.png

    命令查看克隆完成后快照的子镜像
    rbd children rbd-demo/rbd-demo1.img@demo1_snap666
    

    image.png

    12.快照展平

    通常情况下通过快照克隆而得到的镜像会保留对父快照的引用,这时候不可以删除该父快照,否则会有影响。

    如果要删除快照但想保留其子镜像,必须先展平其子镜像,展平的时间取决于镜像的大小
    
    展平子镜像
    rbd flatten rbd-demo/rbd-demo666.img
    
    取消快照保护
    rbd snap unprotect rbd-demo/rbd-demo1.img@demo1_snap666
    
    删除快照
    rbd snap rm rbd-demo/rbd-demo1.img@demo1_snap666
    
    rbd ls -l -p rbd-demo
    

    image.png

    13.镜像的导出导入

    卸载客户端挂载,并取消映射
    umount /data/bb
    rbd unmap rbd-demo/rbd-demo1.img
    

    image.png

    在管理端操作
    导出镜像
    rbd export rbd-demo/rbd-demo1.img  /opt/rbd-demo1.img
    

    image.png

    清除镜像下的所有快照,并删除镜像
    rbd snap purge rbd-demo/rbd-demo1.img
    rbd rm rbd-demo/rbd-demo1.img
    
    rbd ls -l -p rbd-demo
    

    image.png

    导入镜像
    rbd import /opt/rbd-demo1.img  rbd-demo/rbd-demo1.img
    
    rbd ls -l -p rbd-demo
    

    image.png

    4.创建 Ceph 对象存储系统 RGW 接口

    4.1对象存储的概念

    对象存储(object storage)是非结构数据的存储方法,对象存储中每一条数据都作为单独的对象存储,拥有唯一的地址来识别数据对象,通常用于云计算环境中。
    不同于其他数据存储方法,基于对象的存储不使用目录树。

    4.2 部署流程

    1.创建 RGW 接口
    如果需要使用到类似 S3 或者 Swift 接口时候才需要部署/创建 RadosGW 接口,RadosGW 通常作为对象存储(Object Storage)使用,类于阿里云OSS。

    在管理节点创建一个 RGW 守护进程(生产环境下此进程一般需要高可用,后续介绍)
    cd /etc/ceph
    ceph-deploy rgw create node01
    
    ceph -s
    

    image.png

    image.png

    2.要在 Civetweb 上启用SSL,首先需要一个证书,在 rgw 节点生成证书

    生成CA证书私钥:
    openssl genrsa -out civetweb.key 2048
    

    image.png

    生成CA证书公钥:
    openssl req -new -x509 -key civetweb.key -out civetweb.crt -days 3650 -subj "/CN=192.168.223.101"
    

    image.png

    将生成的证书合并为pem
    cat civetweb.key civetweb.crt > /etc/ceph/civetweb.pem
    

    image.png

    3.修改我们的ceph配置文件

    vim ceph.conf
    ......
    [client.rgw.node01]
    rgw_host = node01
    rgw_frontends = "civetweb port=80+443s ssl_certificate=/etc/ceph/civetweb.pem num_threads=500 request_timeout_ms=60000"
    

    image.png

    4.将我们的配置文件同步到node01,node02,node03上面

    ceph-deploy --overwrite-conf config push node01 node02 node03
    
    

    image.png

    将证书发送给node01
    scp civetweb.pem node01:`pwd`
    

    image.png

    重启服务mgr服务与radogw

    systemctl restart ceph-mgr*
    
    systemctl restart ceph-radosgw*
    

    image.png

    在 rgw 节点上查看端口
    netstat -lntp | grep -w 80
    netstat -lntp | grep 443
    

    image.png

    如果发现还是找不到端口就去管理服务器查看健康状态是否为ok

    image.png

    5.创建RadosGW 账户

    在管理节点使用 radosgw-admin 命令创建 RadosGW 账户

    radosgw-admin user create --uid="rgwuser" --display-name="rgw test user"
    
    radosgw-admin user info --uid="rgwuser"
    #这个命令可以之后进行查看
    

    image.png

    6.在客户端安装 python3、python3-pip

    yum install -y python3 python3-pip
    

    image.png

    image.png

    7.安装 boto 模块,用于测试连接 S3

    pip3 install boto
    

    image.png

    8.测试访问 S3 接口

    echo 123123 > /opt/abc.txt
    

    image.png

    9.将我们的测试脚本拖进来

    image.png

    10.修改我们的这个测试文件

    image.png

    image.png

    11.创建存储桶bucket01

    image.png

    image.png

    image.png

    image.png

    12 获得一个存储桶并查看一个bucket下的文件

    image.png

    image.png

    13.上传文件

    image.png

    image.png

    image.png

    14.上传字符串

    image.png

    image.png

    image.png

    image.png

    15.删除存储桶

    image.png

    image.png

    image.png

    image.png

    5.OSD 故障模拟与恢复

    5.1 模拟 OSD 故障

    如果 ceph 集群有上千个 osd,每天坏 2~3 个太正常了,我们可以模拟 down 掉一个 osd

    #如果 osd 守护进程正常运行,down 的 osd 会很快自恢复正常,所以需要先关闭守护进程

    在node1上操作
    ssh root@node01 systemctl stop ceph-osd@0
    

    image.png

    在管理节点中关闭osd0
    down 掉 osd
    ceph osd down 0
    
    ceph osd tree
    

    image.png

    将坏掉的 osd 踢出集群
    //方法一:
    #将 osd.0 移出集群,集群会开始自动同步数据
    ceph osd out osd.0
    

    image.png

    删除守护进程对应的账户信息
    ceph auth rm osd.0
    
    ceph auth list
    

    image.png

    删掉 osd.0
    ceph osd rm osd.0
    
    ceph osd stat
    ceph -s
    

    image.png

    5.2 把原来坏掉的 osd 修复后重新加入集群

  • 在 osd 节点node1中创建 osd,无需指定名,会按序号自动生成
    cd /etc/ceph
    
    ![image.png](https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c4d8696f79a740c1b36a042729845d80~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=606&h=237&s=16381&e=png&b=283033)
    ceph osd create
    

    2.创建账户

    ceph-authtool --create-keyring /etc/ceph/ceph.osd.0.keyring --gen-key -n osd.0 --cap mon 'allow profile osd' --cap mgr 'allow profile osd' --cap osd 'allow *'
    

    image.png

    3.导入新的账户秘钥

    ceph auth import -i /etc/ceph/ceph.osd.0.keyring
    
    ceph auth list
    

    image.png

    4.更新对应的 osd 文件夹中的密钥环文件

    ceph auth get-or-create osd.0 -o /var/lib/ceph/osd/ceph-0/keyring
    

    image.png

    5.将osd.0加入到集群当中

    #加入 crushmap
    ceph osd crush add osd.0 1.000 host=node01		
    #1.000 代表权重
    
    #加入集群
    ceph osd in osd.0
    
    ceph osd tree
    

    image.png

    6.重启 osd 守护进程

    systemctl restart ceph-osd@0
    
    ceph osd tree		
    #稍等片刻后 osd 状态为 up
    

    image.png

    如果重启失败
    报错:
    Job for ceph-osd@0.service failed because start of the service was attempted too often. See "systemctl  status ceph-osd@0.service" and "journalctl -xe" for details.
    To force a start use "systemctl reset-failed ceph-osd@0.service" followed by "systemctl start ceph-osd@0.service" again.
    
    #运行
    systemctl reset-failed ceph-osd@0.service && systemctl restart ceph-osd@0.service
    
  • 相关文章

    服务器端口转发,带你了解服务器端口转发
    服务器开放端口,服务器开放端口的步骤
    产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
    如何使用 WinGet 下载 Microsoft Store 应用
    百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
    百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

    发布评论