joeの小窝

Loading...

ceph实验(复习)

ceph复习

  • 主要就是怕忘记了学习的东西

  • ceph存储数据的流程

  • 读取数据的流程

  • ceph的优点

  • ceph基本概念

    • mon,mds,mgr等

    • 存储池,纠删池

    • ceph认证授权

    • rbd,cephfs,rgw

实验

存储池的创建

rbd设备的创建

  • 干什么的

    • 就是提供在存储池里面封装成一个磁盘

    • 映射到客户端上为一个硬盘

    • 格式化挂载使用即可

  • 流程

    • 创建一个存储池,初始化rbd池,将这个存储池成为rbd池

    • 创建用户,使用rbd设备的权限

    • 创建rbd块,指定大小即可

    • 客户端映射块设备

    • 格式化,挂载使用,开机自启服务

  • 首先就是rbd是一个虚拟出来的设备

  • 映射到客户端上面是一个硬盘,格式化文件系统,挂载使用

[root@ceph01 ceph]# ceph osd pool create rbd_data
pool 'rbd_data' created
[root@ceph01 ceph]# ceph osd pool application enable rbd_data rbd
enabled application 'rbd' on pool 'rbd_data'

# 初始化rbd存储池,这个存储池就变成了rbd设备了
[root@ceph01 ceph]# rbd pool init rbd_data

# 创建使用rbd设备的权限
# mon "profile rbd"  赋予mon的rbd角色权限
# osd "profile rbd"  赋予osd的rbd角色权限

[root@ceph01 ~]# ceph auth caps client.test1 mon "profile rbd" osd "profile rbd"
updated caps for client.test1

# 导出密钥文件
[root@ceph01 ~]# ceph auth get client.test1 -o ceph.client.test1.keyring
exported keyring for client.test1

  • 创建rbd块
[root@ceph03 ceph]# rbd create -p rbd_data test --id test1 --size 1G --image-
format 2 --image-feature layering

# rbd_data存储池里面创建了一个rbd块
[root@ceph01 ~]# rbd ls -p rbd_data
test

# 查看存储池里面的数据
[root@ceph01 ~]# rados -p rbd_data ls
rbd_id.test   # test块的id
rbd_directory
rbd_info
rbd_header.2a94498eda47b  # 以后存储在test块设备的信息都是以这个开头

# rbd块的详细信息
[root@ceph01 ~]# rbd info rbd_data/test
rbd image 'test':
	size 1 GiB in 256 objects
	order 22 (4 MiB objects)
	snapshot_count: 0
	id: 2a94498eda47b
	block_name_prefix: rbd_data.2a94498eda47b
	format: 2
	features: layering
	op_features: 
	flags: 
	create_timestamp: Thu Mar 19 21:36:27 2026
	access_timestamp: Thu Mar 19 21:36:27 2026
	modify_timestamp: Thu Mar 19 21:36:27 2026


  • 映射到客户端上
[root@ceph03 ceph]# rbd map  --id test1 rbd_data/test
/dev/rbd0

[root@ceph03 ceph]# mkfs -t xfs /dev/rbd0 

[root@ceph03 /]# mkdir rbd
[root@ceph03 /]# mount /dev/rbd0 /rbd/
[root@ceph03 /]# echo 123 > /rbd/123.txt
[root@ceph03 /]# cat /rbd/123.txt 
123

[root@ceph01 ~]# rados -p rbd_data ls 
rbd_data.2a94498eda47b.00000000000000c0
rbd_data.2a94498eda47b.00000000000000a0
rbd_id.test
rbd_directory
rbd_data.2a94498eda47b.0000000000000020
rbd_data.2a94498eda47b.0000000000000000
rbd_info
rbd_header.2a94498eda47b
rbd_data.2a94498eda47b.0000000000000060
rbd_data.2a94498eda47b.0000000000000040
rbd_data.2a94498eda47b.0000000000000080
rbd_data.2a94498eda47b.00000000000000e0
rbd_data.2a94498eda47b.00000000000000ff

  • 取消映射
# 查看映射信息
rbd showmapped 

[root@ceph03 /]# rbd unmap rbd_data/test

rbd -p rbd_data rm test

ceph提供文件系统

  • 2个存储池,一个是cephfs_metadata 这个是存储元数据信息的,一个是cephfs_data 这个是存储对象数据的
ceph osd pool create  cephfs_metadata
ceph osd pool create  cephfs_data

ceph osd pool application enable cephfs_data cephfs
ceph osd pool application enable cephfs_metadata cephfs


  • 创建cephfs文件系统
# 前面是元数据存储池,后面一个是对象存储数据池
ceph fs new mycephfs cephfs_metadata cephfs_data

# 查看cephfs存储池
[root@ceph01 ~]# ceph fs ls 
name: mycephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]

  • 为mycephfs创建一个mds服务器
ceph orch  apply mds mycephfs --placement="1"

[root@ceph01 ~]# ceph orch ps  | grep mds
mds.mycephfs.ceph01.tiobsp  ceph01               running (21m)    65s ago  21m    29.1M        -  16.2.13  e08a45948779  139be803897a  

  • 这样的话,ceph就能对外提供cephfs文件系统存储了
# 没有指定大小的话,默认使用所有osd空间
[root@ceph01 ~]# ceph fs status 
mycephfs - 0 clients
========
RANK  STATE            MDS               ACTIVITY     DNS    INOS   DIRS   CAPS  
 0    active  mycephfs.ceph01.tiobsp  Reqs:    0 /s    12     15     13      0   
      POOL         TYPE     USED  AVAIL  
cephfs_metadata  metadata  36.0k  28.4G  
  cephfs_data      data    4096   28.4G  
MDS version: ceph version 16.2.13 (5378749ba6be3a0868b51803968ee9cde4833a3e) pacific (stable)

  • 客户端的配置,创建使用cephfs的用户
# 用户为cephfs
ceph auth get-or-create client.cephfs mon "allow r" mds "allow *" osd "allow rw pool=cephfs_metadata,allow rw pool=cephfs_data"
  • 还需要secretfile文件和keyring文件
# keyring文件
ceph auth get client.cephfs -o ceph.client.cephfs.keyring

# secretfile文件
[root@ceph01 ~]# cat cephfs.key 
AQASDslpXHpvMxAAcJt9drXBYidXeFWIabO84w==

  • 创建挂载点和挂载
mkdir /cephfs

# 任意一个mon地址即可 
# 默认的cephfs路径就是 mon:/ ,将这个挂载到挂载点上面去
mount -t ceph -o name=cephfs,secretfile=/root/cephfs.key 192.168.50.30:/ /cephfs

# 永久挂载
192.168.50.20:/  /cephfs  ceph defaults,_netdev,name=cephfs,secretfile=/root/cephfs.key 0 0


# 写入数据到里面

# 存储池cephfs_data 里面就有数据了

  • 权限补充,就是还可以挂载根目录下面的子目录
# 创建用户并配置只能访问/nas目录,其他的目录不能访问,挂载
[root@ceph01 ~]# ceph fs authorize mycephfs client.use01 /nas rwps

# 创建keyring文件和secretfile文件

# 在上面挂载的/cephfs里面创建一个nas目录

mkdir /cephfs/nas

# 挂载
[root@ceph01 cephfs]# mount -t ceph -o name=user01,secretfile=/root/user01.key 192.168.50.30:/nas /nas/



  • 查看cephfs使用情况
# 2个客户端进行了挂载

[root@ceph01 cephfs]# ceph fs status 
mycephfs - 2 clients
========
RANK  STATE            MDS               ACTIVITY     DNS    INOS   DIRS   CAPS  
 0    active  mycephfs.ceph01.tiobsp  Reqs:    0 /s    12     15     13      4   
      POOL         TYPE     USED  AVAIL  
cephfs_metadata  metadata  36.0k  28.4G  
  cephfs_data      data    4096   28.4G  
MDS version: ceph version 16.2.13 (5378749ba6be3a0868b51803968ee9cde4833a3e) pacific (stable)

  • 怎么删除cephfs呢?

    • 取消挂载

    • 标记cephfs不可用

    • 删除mds进程(可选的),标记为不可用话,mds进程会自动退出的

    • 删除cephfs文件系统

    • 删除2个存储池

# 取消挂载
[root@ceph01 ~]# umount  /cephfs 
[root@ceph01 ~]# umount  /nas 

# 先删除mds进程

# 先标记这个cephfs 为故障的状态,这样的话,mds元数据服务器不会提供服务
[root@ceph01 /]# ceph fs fail mycephfs
mycephfs marked not joinable; MDS cannot join the cluster. All MDS ranks marked failed.

# 删除mds元数据服务器进程
[root@ceph01 ~]# ceph orch rm mds.mycephfs

# 删除mycephfs文件系统
[root@ceph01 ~]# ceph fs rm mycephfs --yes-i-really-mean-it
[root@ceph01 ~]# ceph fs ls 
No filesystems enabled

# 删除2个存储池即可

[root@ceph01 /]# ceph osd pool  delete  cephfs_metadata cephfs_metadata --yes-i-really-really-mean-it
pool 'cephfs_metadata' removed

[root@ceph01 /]# ceph osd pool delete cephfs_data cephfs_data --yes-i-really-really-mean-it
pool 'cephfs_data' removed

ceph提供rgw存储

  • 对象存储里面主要存储的是图片,视频,镜像文件这些数据

  • 在对象存储里面的概念有一个是桶,所有的对象都是存储在桶里面的

  • 在ceph里面的概念是有一个pg,所有的对象都是存储在pg里面,不冲突的,不同的方向上

  • 可以通过http请求访问到

  • rgw的图,流程

  • 创建rgw就是一个外部的访问入口

  • bucket的创建是rgw客户端创建的,

1、创建realm,zonegroup,zone

  • 在ceph集群中创建的第一个realm,会自动设置为默认realm
[root@ceph01 ~]# radosgw-admin realm create --rgw-realm=for_swift
{
    "id": "c1c55981-26a7-4455-a4b7-fa3dff47b50b",
    "name": "for_swift",
    "current_period": "9839121e-908f-44ce-8e3c-eb651b652937",
    "epoch": 1  # 版本号,后面修改后,这个会变更的
}

# 这个就是默认的
[root@ceph01 ~]# radosgw-admin realm list --default
{
    "default_info": "c1c55981-26a7-4455-a4b7-fa3dff47b50b",
    "realms": [
        "for_swift"
    ]
}

  • 创建zonegroup
[root@ceph01 ~]# radosgw-admin zonegroup create --rgw-realm for_swift --rgw-zonegroup for_swift
{
    "id": "6d925ae9-4d4e-4801-8c4c-b6226f7f50c2",
    "name": "for_swift",
    "api_name": "for_swift",
    "is_master": "false",
    "endpoints": [],
    "hostnames": [],
    "hostnames_s3website": [],
    "master_zone": "",
    "zones": [],
    "placement_targets": [],
    "default_placement": "",
    "realm_id": "c1c55981-26a7-4455-a4b7-fa3dff47b50b",
    "sync_policy": {
        "groups": []
    }
}


# 修改这个为默认的zonegroup和主zonegrpup

[root@ceph01 ~]# radosgw-admin zonegroup modify --rgw-realm for_swift --rgw-zonegroup for_swift --default --master
{
    "id": "6d925ae9-4d4e-4801-8c4c-b6226f7f50c2",
    "name": "for_swift",
    "api_name": "for_swift",
    "is_master": "true",
    "endpoints": [],
    "hostnames": [],
    "hostnames_s3website": [],
    "master_zone": "",
    "zones": [],
    "placement_targets": [],
    "default_placement": "",
    "realm_id": "c1c55981-26a7-4455-a4b7-fa3dff47b50b",
    "sync_policy": {
        "groups": []
    }
}


# 这个默认的,只是针对的命令查看是默认的

  • 创建zone
[root@ceph01 ~]# radosgw-admin zone create --rgw-realm for_swift --rgw-zonegroup for_swift --rgw-zone for_swift --master --default

2、更新配置

  • 上面的操作创建了realm,zonegroup,zone,存储池也创建一些
[root@ceph01 ~]# ceph osd pool ls
device_health_metrics
.rgw.root

  • 更新配置,realm中创建了zonegroup中创建了zone
[root@ceph01 ~]# radosgw-admin period update --commit --rgw-realm for_swift

# 发现版本号变更为2了
[root@ceph01 ~]# radosgw-admin realm get 
{
    "id": "c1c55981-26a7-4455-a4b7-fa3dff47b50b",
    "name": "for_swift",
    "current_period": "222f548b-5f0c-42f4-a74c-573c57900250",
    "epoch": 2
}

  • 再次查看存储池
# 发现创建了很多的存储池

[root@ceph01 ~]# ceph osd pool ls
device_health_metrics
.rgw.root
default.rgw.log
default.rgw.control
default.rgw.meta
for_swift.rgw.log
for_swift.rgw.control
for_swift.rgw.meta

3、创建rgw

  • 单节点创建rgw,可以不需要绑定realm,zonegroup,zone,多节点集群同步的需要绑定
# 创建一个rgw,叫做for_swift
# 默认监听在80端口上
[root@ceph01 ~]# ceph orch apply rgw for_swift --placement="1"
Scheduled rgw.for_swift update...
[root@ceph01 ~]# ceph orch ps | grep rgw
rgw.for_swift.ceph01.xsqjcu  ceph01  *:80         running (4s)      0s ago   4s    53.7M        -  16.2.13    e08a45948779  c1ea1e8bbded  

  • 测试,看有没有返回值
[root@ceph01 ~]# curl 192.168.50.30
<?xml version="1.0" encoding="UTF-8"?><ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Owner><ID>anonymous</ID><DisplayName></DisplayName></Owner><Buckets></Buckets></ListAllMyBucketsResult>[root@ceph01 ~]# 

4、创建用户

[root@ceph01 ~]# radosgw-admin user create --uid=testuser --display-name=testuser

# 展示的信息,有ak,sk,这个是s3用户的,swift用户不能使用
    "keys": [
        {
            "user": "testuser",
            "access_key": "IFV7Z1O2K4WIC6WE8HRY",
            "secret_key": "FBO1xhVV0qDhIQB6k75DtuYyW8SPzHkBfMZTWY89"
        }
    ],

  • 创建子用户,swift用户
# uid 主用户
# subuser 主用户:子用户
[root@ceph01 ~]# radosgw-admin subuser create --uid=testuser --subuser testuser:swift

# 里面有swift_keys的信息

    "swift_keys": [
        {
            "user": "testuser:swift",
            "secret_key": "m9RyAAnMirveEInubp5eBkxZDYtRa83a1zl4SeH0"
        }
    ],

  • 授予子用户权限
[root@ceph01 ~]# radosgw-admin subuser modify --uid=testuser --subuser testuser:swift --access full

# 信息显示完全控制的权限
    "subusers": [
        {
            "id": "testuser:swift",
            "permissions": "full-control"
        }
    ],

yum -y install python3-pip

# 安装swift客户端工具
pip install python-swiftclient -i https://pypi.tuna.tsinghua.edu.cn/simple

5、测试子用户

  • 测试权限
# 可以正常访问rgw
[root@ceph01 ~]# swift -A http://192.168.50.30/auth/1.0 -U 'testuser:swift' -K m9RyAAnMirveEInubp5eBkxZDYtRa83a1zl4SeH0 stat -v --insecure
                                 StorageURL: http://192.168.50.30/swift/v1
                                 Auth Token: AUTH_rgwtk0e00000074657374757365723a7377696674925e7b47564c624331a7d76958c1bb0b13c6a81892c0128610b4265b49e71effcea64ee5
                                    Account: v1
                                 Containers: 0
                                    Objects: 0
                                      Bytes: 0
   Containers in policy "default-placement": 0
      Objects in policy "default-placement": 0
        Bytes in policy "default-placement": 0
Objects in policy "default-placement-bytes": 0
  Bytes in policy "default-placement-bytes": 0
                                X-Timestamp: 1775654321.20167
                X-Account-Bytes-Used-Actual: 0
                                 X-Trans-Id: tx00000a6a99b64f78e5256-0069d655b1-14984-for_swift
                     X-Openstack-Request-Id: tx00000a6a99b64f78e5256-0069d655b1-14984-for_swift
                              Accept-Ranges: bytes
                               Content-Type: text/plain; charset=utf-8
                                 Connection: Keep-Alive

1、创建桶

[root@ceph01 ~]# swift -A http://192.168.50.30/auth/1.0 -U 'testuser:swift' -K m9RyAAnMirveEInubp5eBkxZDYtRa83a1zl4SeH0 post hosts

# 列出桶
[root@ceph01 ~]# swift -A http://192.168.50.30/auth/1.0 -U 'testuser:swift' -K m9RyAAnMirveEInubp5eBkxZDYtRa83a1zl4SeH0 list
hosts

2、上传对象

[root@ceph01 ~]# swift -A http://192.168.50.30/auth/1.0 -U 'testuser:swift' -K m9RyAAnMirveEInubp5eBkxZDYtRa83a1zl4SeH0 upload hosts /etc/hosts
etc/hosts

# 查看桶里面的内容
[root@ceph01 ~]# swift -A http://192.168.50.30/auth/1.0 -U 'testuser:swift' -K m9RyAAnMirveEInubp5eBkxZDYtRa83a1zl4SeH0 list hosts
etc/hosts

3、使用s3协议

  • 使用S3-Compatible Storage 这个类型

总结

  • rbd,客户端只需要这个ceph.client.keyring和ceph.conf文件,rgw也是这样的

  • cephfs的话,还需要key文件,很多

posted @ 2026-03-18 21:10  乔的港口  阅读(7)  评论(0)    收藏  举报