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"
}
],
-
https://blog.csdn.net/m0_73950916/article/details/144300009?spm=1011.2415.3001.5331
-
客户端安装ceph-common,使用cephadm这个脚本,添加yum源
-
客户端操作ceph集群
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文件,很多

浙公网安备 33010602011771号