Ceph分布式文件系统使用记录

前言

ceph文件系统分为三种模式,分别为文件系统模式、块存储模式,对象存储模式三种,下面就一一为大家介绍怎么使用

一、文件系统创建

1、创建ceph文件系统

#在创建之前可以先查看一下文件系统
ceph fs ls

在这里插入图片描述
目前是没有的

2、创建存储池

ceph osd pool create cephfs_data 128
ceph osd pool create cephfs_metadata 128

说明:命令最后的128是指定pg_num的值,这个值是不能自动计算的,需要手动赋予。一般来说,少于5个osd时,g_num可以设置为128;osd在5到10个之间,pg_num可以设置为512;osd在10到50个之间,pg_num可以设置为4096;但是osd一旦超过50个,那么就得自己计算pg_num的取值,也可以借助工具pgcalc计算,网址是https://ceph.com/pgcalc/。随着osd数量的增加,正确的pg_num取值变得更加重要,因为它显著地影响着集群的行为、以及出错时的数据持久性(即灾难性事件导致数据丢失的概率)。

3、创建文件系统

ceph fs new 128 cephfs_metadata cephfs_data

#此时再回头查看文件系统,mds节点状态
ceph fs ls
ceph mds stat

在这里插入图片描述

ceph osd pool get [存储池名称] size  //查看存储池副本数
ceph osd pool set [存储池名称] size 3  //修改存储池副本数
ceph osd lspools  //打印存储池列表
ceph osd pool create [存储池名称] [pg_num的取值]  //创建存储池
ceph osd pool rename [旧的存储池名称] [新的存储池名称]  //存储池重命名
ceph osd pool get [存储池名称] pg_num  //查看存储池的pg_num
ceph osd pool get [存储池名称] pgp_num  //查看存储池的pgp_num
ceph osd pool set [存储池名称] pg_num [pg_num的取值]  //修改存储池的pg_num值
ceph osd pool set [存储池名称] pgp_num [pgp_num的取值]  //修改存储池的pgp_num值

4、查看存储池配额

ceph osd pool get-quota cephfs_metadata

在这里插入图片描述

二、文件系统模式

1、内核驱动挂载ceph文件系统

(1)创建挂载点

mkdir /ceph

(2)获取存储密钥,如果没有前往管理节点重新复制

cat /etc/ceph/ceph.client.admin.keyring

#将存储密钥保存到/etc/ceph/admin.secret文件中:
vim /etc/ceph/admin.secret

#如果想开机挂载可以写入/etc/rc.d/rc.local文件中

在这里插入图片描述

(3)挂载

mount -t ceph 192.168.84.131:6789:/ /ceph -o name=admin,secretfile=/etc/ceph/admin.secret

在这里插入图片描述

(4)卸载

umount /ceph

在这里插入图片描述

2、用户控件挂载ceph文件系统

(1)挂载

这个方法需要安装ceph-fuse
yum install -y ceph-fuse
ceph-fuse -m 192.168.84.131:6789 /ceph

(2)卸载

fusermount -u /ceph

3、测试

挂载后写入文件,然后卸载,在其他服务器上重新挂载,验证后文件是存在的。

三、块设备存储模式

1、创建存储池

#node1操作
ceph osd lspools   查看
ceph osd pool create rbd 128

2、创建块设备

#node1
rbd create rbd1 --size 1G --image-feature layering

rbd info rbd1   #查看设备信息
--image-feature layering  开启克隆

3、映射块设备

#node2
rbd map --image rbd1

4、创建文件系统并挂载

#node2
fdisk -l /dev/rbd0
mkfs.xfs /dev/rbd0
mkdir /mnt/ceph-disk1
mount /dev/rbd0 /mnt/ceph-disk1

5、卸载

#node2
umount  /mnt/ceph-disk1 或者
fusermount -u  /mnt/ceph-disk1

6、相关操作

#取消块设备映射
rbd unmap /dev/rbd0

#列出块设备
rbd ls

#删除块设备
rbd rm rbd1

#列出块设备映射
rbd showmapped

#扩容
rbd resize --image rbd1 --size 2G

四、对象存储模式

1、安装

yum -y install ceph ceph-radosgw

2、新建 CEPH 对象网关实例

ceph-deploy rgw create node1

#查看是否启动
systemctl status [email protected]

3、修改端口

vim ceph.conf
[client.rgw.client-node]
rgw_frontends = "civetweb port=80"

#重启生效
systemctl restart [email protected]

4、配置对象网关

#创建RGW用户和keyring,在node1服务器上创建keyring:
ceph-authtool --create-keyring /data/ceph/ceph.client.radosgw.keyring

#生成ceph-radosgw服务对应的用户和key
ceph-authtool /data/ceph/ceph.client.radosgw.keyring -n client.radosgw.gateway --gen-key

#为用户添加访问权限
ceph-authtool -n client.radosgw.gateway --cap osd 'allow rwx' --cap mon 'allow rwx' /data/ceph/ceph.client.radosgw.keyring

#导入keyring到集群配置文件中
ceph -k /data/ceph/ceph.client.admin.keyring auth add client.radosgw.gateway -i /data/ceph/ceph.client.radosgw.keyring

#把集群配置文件推送到其他机子
scp /data/ceph/ceph.client.radosgw.keyring  root@node2:/etc/ceph

#node2
chmod 777   /etc/ceph/ceph.client.radosgw.keyring

5、创建资源池

#由于RGW要求专门的pool存储数据,这里手动创建这些Pool,在任意ceph节点上执行:
ceph osd pool create .rgw 128 128
ceph osd pool create .rgw.root 128 128
ceph osd pool create .rgw.control 128 128
ceph osd pool create .rgw.gc 128 128
ceph osd pool create .rgw.buckets 128 128
ceph osd pool create .rgw.buckets.index 128 128
ceph osd pool create .rgw.buckets.extra 128 128
ceph osd pool create .log 128 128
ceph osd pool create .intent-log 128 128
ceph osd pool create .usage 128 128
ceph osd pool create .users 128 128
ceph osd pool create .users.email 128 128
ceph osd pool create .users.swift 128 128
ceph osd pool create .users.uid 128 128

#列出pool信息确认全部成功创建
rados lspools

#确保集群健康,使用ceph -s命令查看检查集群健康情况,一般新建很多pool的时候集群容易出现异常,这样即使我们后面启动了网关,也无法使用

6、RGW配置

#在node1服务器/data/ceph/ceph.conf上添加以下内容
#host需要与hostname对应,其他默认即可。
vim ceph.conf
[client.radosgw.gateway]
rgw frontends=fastcgi socket_port=9000 socket_host=0.0.0.0
host=node1
keyring=/data/ceph/ceph.client.radosgw.keyring
log file=/var/log/radosgw/client.radosgw.gateway.log
rgw socket path=/var/run/ceph/ceph.radosgw.gateway.fastcgi.sock
rgw print continue=false
rgw content length compat = true

#新建日志目录
mkdir -p /var/log/radosgw
chown 777 /var/log/radosgw
chown 777 /var/run/ceph

#把配置分发到其他服务器
cd /data/ceph
ceph-deploy --overwrite-conf config push node1 node2


#新建 Ceph 对象网关实例,在admin管理节点工作目录创建一个 Ceph rgw 实例,一旦对象网关开始运行,我们就可以通过 http://node1地址访问。

#进入ceph-deploy的目录中,使用命令
ceph-deploy --overwrite-conf rgw create node1

#使用命令测试
curl http://192.168.84.131

在这里插入图片描述

7、使用 Ceph 对象网关

为了使用 Ceph SGW REST 接口, 我们需要为 S3 接口初始化一个 Ceph 对象网关用户. 然后为 Swif接口新建一个子用户,最后就可以通过创建的用户访问对象网关验证了。

(1)创建 S3 网关用户

#我们需要创建一个 RADOSGW 用户并且赋予访问权限,才可以正常访问 RGW,Ceph 提供了 radosgw-admin 命令行很方便完成。
#使用命令如下:
radosgw-admin user create --uid="rgwuser" --display-name="This is first rgw test user"

在这里插入图片描述
注意:返回的 Json 值中,我们要记住两个 access_key 和 secret_key 值,因为下边我们测试访问 S3 接口时需要使用。

(2)测试访问 S3 接口

#参照官方文档,我们需要编写一个 Python 测试脚本,该脚本将会连接 radosgw,然后新建一个新的 bucket 再列出所有的 buckets。脚本变量 aws_access_key_id 和 aws_secret_access_key 的值就是上边返回值中的 access_key 和 secret_key。

#首先,我们需要安装 python-boto 包,用于测试连接 S3。:
yum install python-boto -y

然后,编写 python 测试脚本。
cat s3.py
#!/usr/bin/python

import boto
import boto.s3.connection
access_key = 'GME3AGROXXAKJUWB994L'
secret_key = 'JoPVmK4z0ZRXwK8dtaJGjUFkrBNux2mEt59oVKvL'
conn = boto.connect_s3(
    aws_access_key_id = access_key,
    aws_secret_access_key = secret_key,
    host = 'node1', port=80,
    is_secure=False,
    calling_format = boto.s3.connection.OrdinaryCallingFormat(),
)
bucket = conn.create_bucket('my-first-s3-bucket')
for bucket in conn.get_all_buckets():
        print "{name}\t{created}".format(
                name = bucket.name,
                created = bucket.creation_date,
)

在这里插入图片描述

注意:这里使用了python-boto 包,使用认证信息连接 S3,然后创建了一个 my-first-s3-bucket 的 bucket,最后列出所有已创建的 bucket,打印名称和创建时间

(3)创建 Swift 用户

#要通过 Swift 访问对象网关,需要 Swift 用户,我们创建subuser作为子用户。
radosgw-admin subuser create --uid=rgwuser --subuser=rgwuser:swift --access=full

#创建密钥
radosgw-admin key create --subuser=rgwuser:swift --key-type=swift --gen-secret

#注意:返回的 Json 值中,我们要记住swift_keys中的secret_key 因为下边我们测试访问 Swift 接口时需要使用。secret_key以第二条命令为准

(4)测试访问 Swift 接口

#注意,以下命令需要python环境和可用的pip服务。
yum install python-pip -y
pip install --upgrade python-swiftclient

#测试
swift -A http://192.168.84.131/auth/1.0 -U rgwuser:swift -K 'dcBunsBSpaVBDCcV1ZNZS5bA4iMZFfk3zYYXAQG1' list

在这里插入图片描述
密钥 Key 为上边返回值中的 secret_key

(3)S3相关操作

#删除S3用户
radosgw-admin  user rm --uid=rgwuser

#权限调整,允许rgwuser读写users信息:
radosgw-admin caps add --uid=rgwuser --caps="users=*"

#允许admin读写所有的usage信息
radosgw-admin caps add --uid=rgwuser --caps="usage=read,write"

#删除swift子用户
radosgw-admin subuser rm  --subuser=rgwuser:swift

#列出当前系统下所有的bucket信息
radosgw-admin bucket list

#查看具体某个BUCKET属性
radosgw-admin bucket stats --bucket=my-first-s3-bucket

#删除数据
#!/usr/bin/python

import boto
import boto.s3.connection
access_key = 'GME3AGROXXAKJUWB994L'
secret_key = 'JoPVmK4z0ZRXwK8dtaJGjUFkrBNux2mEt59oVKvL'
conn = boto.connect_s3(
    aws_access_key_id = access_key,
    aws_secret_access_key = secret_key,
    host = 'node1', port=80,
    is_secure=False,
    calling_format = boto.s3.connection.OrdinaryCallingFormat(),
)
bucket = conn.delete_bucket('my-first-s3-bucket')
for bucket in conn.get_all_buckets():
        print "{name}\t{created}".format(
                name = bucket.name,
                created = bucket.creation_date,
)


结语

以上就是对ceph如何使用的记录,希望对大家有所帮助,大家有问题可以私信我。

Guess you like

Origin blog.csdn.net/qq_37837432/article/details/121593308