Ceph分布式存储系统实战操作演示

1)块存储使用(RDB )

图片[1]-Ceph分布式存储系统实战操作演示-不念博客

1、 使用 create 创建 pool 池

ceph osd lspools

# 创建
ceph osd pool create ceph-demo 64 64

# 创建命令时需要指定PG、PGP数量,还可以指定复制模型还是纠删码模型,副本数量等等
# osd pool create <pool> [<pg_num:int>] [<pgp_num:int>] [replicated|erasure] [<erasure_code_  create pool profile>] [<rule>] [<expected_num_objects:int>] [<size:int>] [<pg_num_min:int>] [on|off| warn] [<target_size_bytes:int>] [<target_size_ratio:float>]

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

获取 pool 池属性信息,可以重新设置,有很多参数,都可以如下设置

# 1、获取 pg 个数
ceph osd pool get ceph-demo pg_num

# 2、获取 pgp 个数
ceph osd pool get ceph-demo pgp_num

# 3、获取副本数
ceph osd pool get ceph-demo size

# 4、获取使用模型
ceph osd pool get ceph-demo crush_rule

# 5、设置副本数
ceph osd pool set ceph-demo size 2

# 6、设置 pg 数量
ceph osd pool set ceph-demo pg_num 128

# 7、设置 pgp 数量
ceph osd pool set ceph-demo pgp_num 128

2、需要初始化 pool

rbd pool init ceph-demo

3、创建 rbd 块设备

# 查看 块设备
rbd -p ceph-demo ls
# 【方式一】创建块设备
rbd create -p ceph-demo --image rbd-demo.img --size 10G
# 【方式二】创建块设备
rbd create ceph-demo/rbd-demo2.img --size 10G
# 查看 块设备
rbd -p ceph-demo ls

4、查看块设备信息

rbd info ceph-demo/rbd-demo2.img

5、删除块设备

rbd rm -p ceph-demo --image rbd-demo2.img

6、设备挂载

由于没有虚拟机进行挂载,所以需要使用内核 map 进行挂载;

rbd map ceph-demo/rbd-demo.img

[root@local-168-182-130 ceph]# rbd map ceph-demo/rbd-demo.img
rbd: sysfs write failed
RBD image feature set mismatch. You can disable features unsupported by the kernel with “rbd feature disable ceph-demo/rbd-demo.img object-map fast-diff deep-flatten”.
In some cases useful info is found in syslog – try “dmesg | tail”.
rbd: map failed: (6) No such device or address

映射的过程当中出现错误,这是因为 Centos7 当中不支持这几个特性,我们可以在创建时指定 features 。

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

rbd feature disable ceph-demo/rbd-demo.img exclusive-lock

再次挂载,挂载成功

rbd map ceph-demo/rbd-demo.img

查看设备列表

rbd device list

通过fdisk 查看设备列表

fdisk -l

使用 rbd 设备

# 格式化
mkfs.ext4 /dev/rbd0
# 创建挂载目录
mkdir /mnt/rbd-demo
# 挂载
mount /dev/rbd0 /mnt/rbd-demo/

7、块设备扩容

设备可以扩容,也可以缩容,但不建议使用缩容,有可能产生数据丢失。

# 扩容
rbd resize ceph-demo/rbd-demo.img --size 10G
# 查看
rbd -p ceph-demo info --image rbd-demo.img
# 也可以通过lsblk查看
lsblk

8、卸载

umount /mnt/rbd-demo

2)文件系统使用(CephFS)

图片[2]-Ceph分布式存储系统实战操作演示-不念博客

1、查看ceph文件系统

ceph fs ls

2、创建存储池

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

# 创建命令时需要指定PG、PGP数量,还可以指定复制模型还是纠删码模型,副本数量等等
# osd pool create <pool> [<pg_num:int>] [<pgp_num:int>] [replicated|erasure] [<erasure_code_  create pool profile>] [<rule>] [<expected_num_objects:int>] [<size:int>] [<pg_num_min:int>] [on|off| warn] [<target_size_bytes:int>] [<target_size_ratio:float>]

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

3、创建文件系统

ceph fs new 128 cephfs_metadata cephfs_data

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

4、查看存储池配额

ceph osd pool get-quota cephfs_metadata

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

【1】创建挂载点

mkdir /mnt/mycephfs

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

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

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

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

【3】挂载

# Ceph 存储集群默认需要认证,所以挂载时需要指定用户名 name 和创建密钥文件一节中创建的密钥文件 secretfile ,例如:
# mount -t ceph {ip-address-of-monitor}:6789:/ /mnt/mycephfs
mount -t ceph 192.168.182.130:6789:/ /mnt/mycephfs -o name=admin,secretfile=/etc/ceph/admin.secret
图片[3]-Ceph分布式存储系统实战操作演示-不念博客

【4】卸载

umount /mnt/mycephfs

6、常用命令

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

3)对象存储使用(RGW)

rados 是和Ceph的对象存储集群(RADOS),Ceph的分布式文件系统的一部分进行交互是一种实用工具。

图片[4]-Ceph分布式存储系统实战操作演示-不念博客

1、查看ceph集群中有多少个pool

rados lspools
# 同  ceph osd pool ls 输出结果一致

2、显示整个系统使用率

rados df

3、创建一个pool

ceph osd pool create test

4、创建一个对象object

rados create test-object -p test

5、查看对象文件

rados -p test ls

6、删除一个对象

rados rm test-object -p test

7、通过api接口使用 Ceph 存储存储

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

官方文档:https://docs.ceph.com/en/latest/api/#ceph-restful-api

这里使用radosgw-admin,radosgw-admin 是 RADOS 网关用户管理工具,可用于创建和修改用户。

【1】创建 S3 网关用户

radosgw-admin user create --uid="rgwuser" --display-name="This is first rgw test user"

info

{
    "user_id": "rgwuser",
    "display_name": "This is first rgw test user",
    "email": "",
    "suspended": 0,
    "max_buckets": 1000,
    "subusers": [],
    "keys": [
        {
            "user": "rgwuser",
            "access_key": "48AIAPCYK7S4X9P72VOW",
            "secret_key": "oC5qKL0BMMzUJHAS76rQAwIoJh4s6NwTnLklnQYX"
        }
    ],
    "swift_keys": [],
    "caps": [],
    "op_mask": "read, write, delete",
    "default_placement": "",
    "default_storage_class": "",
    "placement_tags": [],
    "bucket_quota": {
        "enabled": false,
        "check_on_raw": false,
        "max_size": -1,
        "max_size_kb": 0,
        "max_objects": -1
    },
    "user_quota": {
        "enabled": false,
        "check_on_raw": false,
        "max_size": -1,
        "max_size_kb": 0,
        "max_objects": -1
    },
    "temp_url_keys": [],
    "type": "rgw",
    "mfa_ids": []
}

图片[5]-Ceph分布式存储系统实战操作演示-不念博客

【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 = '48AIAPCYK7S4X9P72VOW'
secret_key = 'oC5qKL0BMMzUJHAS76rQAwIoJh4s6NwTnLklnQYX'
conn = boto.connect_s3(
    aws_access_key_id = access_key,
    aws_secret_access_key = secret_key,
    host = 'local-168-182-130', 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,打印名称和创建时间。

图片[6]-Ceph分布式存储系统实战操作演示-不念博客

【3】创建 Swift 用户

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

info

{
    "user_id": "rgwuser",
    "display_name": "This is first rgw test user",
    "email": "",
    "suspended": 0,
    "max_buckets": 1000,
    "subusers": [
        {
            "id": "rgwuser:swift",
            "permissions": "full-control"
        }
    ],
    "keys": [
        {
            "user": "rgwuser",
            "access_key": "48AIAPCYK7S4X9P72VOW",
            "secret_key": "oC5qKL0BMMzUJHAS76rQAwIoJh4s6NwTnLklnQYX"
        }
    ],
    "swift_keys": [
        {
            "user": "rgwuser:swift",
            "secret_key": "6bgDOAsosiD28M0eE8U1N5sZeGyrhqB1ca3uDtI2"
        }
    ],
    "caps": [],
    "op_mask": "read, write, delete",
    "default_placement": "",
    "default_storage_class": "",
    "placement_tags": [],
    "bucket_quota": {
        "enabled": false,
        "check_on_raw": false,
        "max_size": -1,
        "max_size_kb": 0,
        "max_objects": -1
    },
    "user_quota": {
        "enabled": false,
        "check_on_raw": false,
        "max_size": -1,
        "max_size_kb": 0,
        "max_objects": -1
    },
    "temp_url_keys": [],
    "type": "rgw",
    "mfa_ids": []
}

【4】创建密钥

radosgw-admin key create --subuser=rgwuser:swift --key-type=swift --gen-secret

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

info

{
    "user_id": "rgwuser",
    "display_name": "This is first rgw test user",
    "email": "",
    "suspended": 0,
    "max_buckets": 1000,
    "subusers": [
        {
            "id": "rgwuser:swift",
            "permissions": "full-control"
        }
    ],
    "keys": [
        {
            "user": "rgwuser",
            "access_key": "48AIAPCYK7S4X9P72VOW",
            "secret_key": "oC5qKL0BMMzUJHAS76rQAwIoJh4s6NwTnLklnQYX"
        }
    ],
    "swift_keys": [
        {
            "user": "rgwuser:swift",
            "secret_key": "AVThl3FGiVQW3VepkQl4Wsoyq9lbPlLlpKhXLhtR"
        }
    ],
    "caps": [],
    "op_mask": "read, write, delete",
    "default_placement": "",
    "default_storage_class": "",
    "placement_tags": [],
    "bucket_quota": {
        "enabled": false,
        "check_on_raw": false,
        "max_size": -1,
        "max_size_kb": 0,
        "max_objects": -1
    },
    "user_quota": {
        "enabled": false,
        "check_on_raw": false,
        "max_size": -1,
        "max_size_kb": 0,
        "max_objects": -1
    },
    "temp_url_keys": [],
    "type": "rgw",
    "mfa_ids": []
}

【5】测试访问 Swift 接口

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

#测试
swift -A http://192.168.182.130/auth/1.0 -U rgwuser:swift -K 'AVThl3FGiVQW3VepkQl4Wsoyq9lbPlLlpKhXLhtR' list
图片[7]-Ceph分布式存储系统实战操作演示-不念博客

【5】S3相关操作

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

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

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

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

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

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

一般是通过api接口使用对象存储,这里只是演示了一个非常简单的示例。

© 版权声明
THE END