cenph三大存储方式

接上续https://blog.csdn.net/qq_45817836/article/details/161082594?spm=1001.2014.3001.5502

1客户端进行连接ceph存储

创建/etc/yum.repos.d/ceph.repo文件,加入如下内容;

bash 复制代码
[ceph]
name=Ceph packages for x86_64
baseurl=http://download.ceph.com/rpm-jewel/el7/x86_64
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

[ceph-noarch]
name=Ceph noarch packages
baseurl=http://download.ceph.com/rpm-jewel/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

我的客户机是centos7(找源,换源比较复杂),如果别的9,10或者别的系统配置也许就好配置了,但是我用比较老的rbd管理器,,需要单独要下载,现在较新的版本ceph-common里面就包含rbd管理工具,如果是centos7版本就跟着该博主做吧

接着,安装RBD客户端,执行如下命令安装RBD客户端。

bash 复制代码
[root@client ceph]# yum update
[root@client ceph]# yum install epel-release centos-release-ceph-jewel.noarch
[root@client ceph]# yum install rbd-mirror

客户端安装成功之后,我们就可以使用rbd命令来创建块设备了。rbd命令可用来创建,展示、删除块设备映像,也可以克隆映像、创建快照、回滚快照、查看快照等。

拷贝认证信息到ceph客户端,这是链接到ceph的重要步骤

需要将ceph1的/usr/local/ceph/etc/目录下的 ceph.conf 和 ceph.client.admin.keyring 文件拷贝到用户主机的/etc/ceph目录下,因为只有把这些配置信息拷贝到用户主机上,用户主机才能连接上Ceph集群。

/etc/ceph 关于这个东西安装了rbd的管理器, 就会自动创建这个目录

拷贝过去

bash 复制代码
[root@ceph1 ~]# scp  /usr/local/ceph/etc/* root@192.168.20.20:/etc/ceph

ceph-s查看是否连接上

2 OK我们这样就开始第一个存储-----块存储

客户端用户主机上创建pool

bash 复制代码
[root@client ceph]# ceph osd pool create mypool 64

这里创建了一个名称为mypool的存储池,通常在创建pool之前,需要覆盖默认的pg_num,官方推荐: 若少于5个OSD, 设置pg_num为128或64。 5~10个OSD,设置pg_num为512。 10~50个OSD,设置pg_num为4096。 超过50个OSD,可以参考pgcalc计算。 这里我的集群中OSD数量是3个,所以指定的pg_num是64。

#创建rbd镜像

bash 复制代码
[root@client ceph]# rbd create --size 4096  mypool/foo

#查看创建的镜像

bash 复制代码
rbd ls mypool

这里在mypool存储池中创建了一个4G大小的rbd镜像。

、创建块设备映像

rbd镜像创建完成之后,接下来就是在用户机上挂载该Ceph块设备,可以理解为往用户机上插入硬盘:

bash 复制代码
[root@client ceph]# rbd map mypool/foo --name client.admin -m ceph1 -k /etc/ceph/ceph.client.admin.keyring

如果挂载成功的话则会输出 /dev/rbd0,也就是说此时在客户端主机执行fdisk命令就可以看到我们创建的块设备了。

此时哈,如果没有成功要是报错的话(因为我提前做过了哈)

如果是centos7版本环境,可能出现如下错误:

咋解决呢??此时,可执行rbd info mypool/foo 查看rbd支持的特性:

bash 复制代码
[root@client ceph]# rbd info mypool/foo

这是因为CentOS的3.10内核仅支持其中的layering 和 exclusive-lock,其他feature概不支持,此时需要关闭一些RBD特性。

bash 复制代码
[root@ceph-client ~]# rbd feature disable  mypool/foo object-map fast-diff deep-flatten

再看一下rbd支持的特性

看features,只剩下这两layering 和 exclusive-lock

关闭后,再次执行如下命令:

root@client ceph\]# rbd map mypool/foo --name client.admin -m ceph1 -k /etc/ceph/ceph.client.admin.keyring 成功后,执行如下命令,可以看到客户端用户主机上出现了/dev/rbd0了: ```bash disk -l|grep /dev/rbd0 ``` ![](https://i-blog.csdnimg.cn/direct/5d07bd2a913841749b3ff547f1bda464.png) 我们有这个磁盘就可以挂载使用了呗 但是要格式化,为什么呢看图 ```bash 最后,将磁盘挂载到/data目录下 [root@client ceph]# mkdir /data [root@client ceph]# mount /dev/rbd0 /data -o noatime,discard,nobarrier ``` ![](https://i-blog.csdnimg.cn/direct/546492cf35a74deca1672c140c615b6f.png) 格式化一下 ```bash mkfs.xfs /dev/rbd0 ``` ![](https://i-blog.csdnimg.cn/direct/c0a65fb2d79d450887f2f0f4d94adb78.png) 创建文件挂载 ```bash 最后,将磁盘挂载到/data目录下 [root@client ceph]# mkdir /data [root@client ceph]# mount /dev/rbd0 /data -o noatime,discard,nobarrier ``` ![](https://i-blog.csdnimg.cn/direct/01bcdc241822417388ccd36b0ed7e8bb.png) 看成果 ![](https://i-blog.csdnimg.cn/direct/a4713af1b75e4824af081f4e5dcdb461.png) 欧克欧克这样就可以正常存储了 如果磁盘大小不够用也可以扩容,至于扩容的大小就看osd主机的储存的大小了 小小扩容一个案例 ```bash rbd resize --size 8000 mypool/foo ``` ```bash [root@client ceph]# xfs_growfs -d /mnt ``` **它的作用是:将挂载在 `/mnt` 目录下的 XFS 文件系统**扩展到底层块设备的最大可用大小。 ![](https://i-blog.csdnimg.cn/direct/4f60a88631bc48fbbe6bab13664ff0cd.png) 这里扩容8g左右,其实是按需分配,不会立马就给你分配8g,当你客户机有储存需求时,会根据你的需求分配内存,最大8g. ,小小插取一个内容,我们是手动mount挂载的自盘,当虚拟机关机,或者down机的时候我们挂载的磁盘就会消失,当然了 我们可以进行永久挂载 这里是ai的,确实可用这里不我多展示,只是与平常的永久挂载有点点的小区别 ![](https://i-blog.csdnimg.cn/direct/67fd90a30cc44a318a87ec5eaa728cde.png)![](https://i-blog.csdnimg.cn/direct/83e519ca9ef448b1b80546ac9f49592f.png) 收尾工作 1取消映射rbd设备到内核 ```bash [root@client ceph]# umount /mnt [root@client ceph]# rbd unmap /dev/rbd0 ``` 2、删除镜像与存储池 ```bash [root@client ceph]# rbd rm mypool/foo [root@client ceph]# ceph osd pool delete mypool mypool --yes-i-really-really-mean-it ``` 这里删除池,必须要跟我的ceph.conf里配置的文件一样 ![](https://i-blog.csdnimg.cn/direct/b9a3b423ab7941d89783da7cb499129c.png) ![](https://i-blog.csdnimg.cn/direct/d6b6cadf166c4855b1c44f29e025e77e.png)里面有个删除pool池,欧克欧克这样ceph存储的快存储就结束了 ### 3ceph---文件存储 ![](https://i-blog.csdnimg.cn/direct/5f37b3b70617401ebeb1b91a65582f4d.png) Ceph文件系统是个POSIX兼容的文件系统,它使用Ceph存储集群来存储数据。Ceph块设备和Ceph对象存储不同的是:Ceph文件系统的运行需要ceph-mds元数据的支持,而其余两者则不需要。 ceph-mds是Ceph分布式文件系统的元数据服务器守护进程,一个或者多个ceph-mds进程协作着管理文件系统的命名空间,协调到共享OSD集群的访问。 1、创建ceph文件系统(ceph集群上操作) 首先,创建data pool,存放数据的存储池 ```bash docker exec osd ceph osd pool create cephfs_data 128 128 ``` 然后,创建metadata pool,存放元数据的存储池 ```bash [root@ceph1 etc]# docker exec osd ceph osd pool create cephfs_metadata 128 128 ``` 接着,创建cephfs文件系统(将上面两个存储池合为一个变成一个cephfs1的文件存储系统) ```bash [root@ceph1 etc]# docker exec osd ceph fs new cephfs1 cephfs_metadata cephfs_data [root@ceph1 etc]# docker exec osd ceph fs ls ``` 如果上面的128提示过大,可改小为64、32、16等尝试 ![](https://i-blog.csdnimg.cn/direct/a941e1f3c4a14ea5b19de6b6f8c39689.png) 2、客户端主机挂载ceph文件系统 首先,需要将主节点ceph1上的配置拷贝到客户端主机client上 ```bash scp -r /usr/local/ceph/etc/* client:/etc/ceph #可以这写后面那段 root@192.168.20.20:/etc/ceph 也就是我的客户机ceph文件存储地方 ``` 用第一段的前提,前提是已经在主节点ceph1上配置了客户端主机名client的host,host的配置在/etc/hosts文件中。 ![](https://i-blog.csdnimg.cn/direct/9549415a1a114b3bba6edee453263557.png) 然后,在客户端主机client上安转ceph-fuse客户端 ```bash [root@client ceph]# yum -y install ceph-fuse ``` 最后,执行挂载即可,首先创建挂载目录 ```bash [root@client ceph]# mkdir /data/mycephfs ``` 接着,将ceph文件系统挂载到指定目录下 ```bash [root@client ceph]# ceph-fuse -m ceph1:6789,ceph2:6789,ceph3:6789 /data/mycephfs ``` ![](https://i-blog.csdnimg.cn/direct/dbcf9b16226d471f9d6fca863eb90f95.png) 一开始没做hosts映射配置所以就不行 直接写ip地址就行 ![](https://i-blog.csdnimg.cn/direct/d5ed6bd4fd9e450f859dd59061f540b8.png) 这样就直接可以往mycephfs里写东西就可以 那么文件存储就可以了 ### 4ceph--对象存储 Ceph对象网关就是一个与Nginx和Apache并无特殊差别的HTTP服务器。通过这个网关入口,用户可以采用HTTP协议,通过RESTful的方式访问Ceph的对象存储。 而Ceph对象存储使用Ceph对象网关守护进程(rgw),它是个与Ceph存储集群交互的FastCGI模块。也就是说要想使用Ceph对象存储,必须先启动网关组件rgw。然后,通过AWS的S3接口或者Openstack Swift接口来操作对象网关,实现文件的上传与下载。 对象存储其实就是将文件 以对象的形式存储到存储桶中,而每个存储桶都要在特定的用户下创建。Ceph对象存储的模型如图所示: ![](https://i-blog.csdnimg.cn/direct/476addc15354409eaeff492579094641.png) **使用对象存储,首先要创建用户,然后,在该用户下创建存储桶,最后就是通过接口 向存储桶中存放文件。** 在配置RGW网关之前,首先需要检查一下网关服务是否正常。首先通过docker exec mon ceph -s 查看集群的状态是否HEALTH_OK,同时需要看看rgw组件是否正确启动,本案例,我设置的rgw端口号是20003,即地址是: http://{服务器IP}:20003,正常可以显示信息。 在ceph集群上执行如下脚本,创建网关用户: ```bash #!/bin/bash SYSTEM_ACCESS_KEY=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 20 | head -n 1) SYSTEM_SECRET_KEY=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 40 | head -n 1) docker exec rgw radosgw-admin user create --uid=rgw --display-name=rgw --access-key=$SYSTEM_ACCESS_KEY --secret=$SYSTEM_SECRET_KEY --system docker exec mon sh -c "echo $SYSTEM_ACCESS_KEY > /tmp/access_key" docker exec mon sh -c "echo $SYSTEM_ACCESS_KEY > /tmp/secret_key" docker exec mon ceph dashboard set-rgw-api-access-key -i /tmp/access_key docker exec mon ceph dashboard set-rgw-api-secret-key -i /tmp/secret_key docker exec rgw radosgw-admin user info --uid="rgw" ``` 上面的六个命令就是主要就做了两件事,分别是创建API操作用户以及打印出access-key以及secret-key。在S3中,access_key和secret_key分别扮演着用户名ID和用户密码的角色,这两个重要的参数在后面调用S3接口时需要用到。 ![](https://i-blog.csdnimg.cn/direct/f42abf30432e4c90a624ef68430752e9.png) 安装与配置s3客户端 安装S3客户端的命令很简单,我们直接通过yum的命令就可以进行安装。' ```bash [root@client ceph]# yum install -y epel-release [root@client ceph]# yum install -y s3cmd ``` '安装完S3客户端之后,就可以配置S3客户端了。配置命令为: ```bash [root@client ceph]# s3cmd --configure ``` 通过如上命令打开S3的配置文件,这里只需要输入Access Key和Secret Key,这两个就是我们前面生成的access_key和secret_key,此外需要修改如下两个配置: **Use HTTPS protocol \[Yes\]: no Test access with supplied credentials? \[Y/n\] n** ![](https://i-blog.csdnimg.cn/direct/88b9dc333fa046b898a4f4168557b3d9.png) 安装S3客户端完成后,默认会在当前用户根目录下生成隐藏的.s3cfg文件,编辑.s3cfg 文件,修改 host_base和host_bucket 两项配置,要改成我们ceph集群的rgw的地址,修改结果如下: ![](https://i-blog.csdnimg.cn/direct/3a3b6fd89c574729a5918c630a2376ad.png) host_base = ceph1:20003 host_bucket = %(bucket).ceph1:20003 ![](https://i-blog.csdnimg.cn/direct/d340c6e7cf8940b6be55270f38201692.png) 、创建存储桶 下面的命令是创建名称为first-bucket的存储桶。 ```bash [root@client ceph]# s3cmd mb s3://first-bucket ``` 接着可一通过get 和put两个命令进行拿文件放文件 ``` s3cmd put /path/to/local/file.txt s3://first-bucket/ ```

相关推荐
Bert.Cai3 小时前
Linux tee命令详解
linux·运维·服务器
宋浮檀s3 小时前
应急响应(系统日志)
linux·运维·网络安全·应急响应
Tech-Net3 小时前
推特视频怎么下载?2026最新X(Twitter)视频下载教程
经验分享·音视频·工具·视频处理·视频下载·视频下载工具·推特视频下载
老卢聊运维3 小时前
kdc-server部署kerberos认证
大数据·运维·hdfs
feasibility.4 小时前
nvidia-smi 失灵,显存凭空消失?—— NVML 驱动版本错配的记录
linux·运维·服务器·经验分享·nvidia·驱动
basketball6164 小时前
Linux sed 和 awk 命令使用方法
linux·运维·chrome
一拳一个娘娘腔4 小时前
Linux SSH免密登录:从“刷卡进门”到“刷脸通行”的完整指南
linux·运维·ssh
taocarts_bidfans6 小时前
反向海淘站点运维优化与常见技术问题排查
大数据·运维·跨境电商·独立站·反向海淘
IMPYLH6 小时前
Linux 的 whoami 命令
linux·运维·服务器·bash