100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Ceph存储的三种模式 部署MDS文件存储 RBD块存储 RGW对象存储

Ceph存储的三种模式 部署MDS文件存储 RBD块存储 RGW对象存储

时间:2021-08-21 22:29:16

相关推荐

Ceph存储的三种模式 部署MDS文件存储 RBD块存储 RGW对象存储

mds文件存储接口

服务端操作

1. 将监控节点制作成文件系统

我们这里是考虑到虚拟机环境,所以将监控节点制作成文件系统,生产环境中尽量不要这么做。

- 在管理端admin节点操作cd /etc/ceph# 必须切换到工作目录下,因为ceph认证的机制是检索当前目录下的密钥环文件ceph.bootstrap-rgw.keyringceph-deploy mds create mon01 mon02 mon03# 将mon01 mon02 mon03制作成文件系统格式- 在管理节点查看各个节点的mds服务ssh root@mon01 systemctl status ceph-mds@mon01ssh root@mon02 systemctl status ceph-mds@mon02ssh root@mon03 systemctl status ceph-mds@mon03

2. 启用Ceph文件系统

Ceph文件系统至少需要两个RADOS池,一个用于数据,一个用于元数据。

- 在管理端admin节点操作1. 创建数据pool池,将数据的大小设置为128个pgceph osd pool create cephfs_data 128# pool 'cephfs_data' created2. 创建pool池,将元数据的大小设置为128个pgceph osd pool create cephfs_metadata 128# pool 'cephfs_metadata' created3. 启用msd文件系统的pool池ceph fs new cephfs cephfs_metadata cephfs_data# 必须元数据池在前,真实数据池在后4. 查看cephfsceph fs ls# name: ceph, metadata pool: cephfs_metadata, data pools: [cephfs_data ]

3. 创建用户

在服务端创建用户,主要是为了控制客户端对ceph服务端数据存储的权限

- 在管理端admin节点操作1. 账户为celient.nana,用户name为nana,nana对文件系统的根目录(/ 不是操作系统的根目录,指的是服务端创建的文件系统的挂载点)有rw权限ceph fs authorize cephfs client.nana / rw| tee /etc/ceph/nana.keyring2. 账户为celient.tom,用户name为tom,tom对文件系统的根目录有r权限,对文件系统的根目录下子目录/test有rw权限ceph fs authorize cephfs client.tom / r /test rw| tee /etc/ceph/tom.keyring3. 查看用户对文件存储的权限ceph auth list查看ceph创建的所有用户ceph auth rm client.tom删除用户tomceph auth get client.nana查看用户nana的权限

客户端操作

切记客户端一定要在public_addr网络内

我们这里模拟管理服务器(admin节点)当作客户端访问public网络,所以客户端的部分操作我们不需要重复操作了。

生产环境中,客户端需要安装ceph软件包,还需要有配置文件以及密钥环文件

生产环境中,客户端需要有配置文件:ceph.conf还要有账号的密钥环文件:nana.keyring、tom.keyring- 在生产环境客户端需要操作1. 首先需要在客户端创建好工作目录mkdir /etc/ceph2. 在ceph的管理节点将密钥文件传给该客户端cd /etc/cephscp -r nana.keyring 1.1.1.10:/etc/cephscp -r tom.keyring 1.1.1.10:/etc/ceph3. 在ceph的管理节点将/etc/hosts文件传给客户端scp -r /etc/hosts 1.1.1.10:/etc/4. 客户端需要安装ceph软件包wget /rpm-luminous/el7/noarch/ceph-release-1-1.el7.noarch.rpmrpm -ivh ceph-release-1-1.el7.noarch.rpmyum -y install ceph

1. 客户端制作密钥文件

从密钥文件中只提取密钥内容,挂载使用

- 在客户端操作1. 将用户nana的密钥导入nana.key中ceph-authtool -n client.nana -p nana.keyring > nana.keycat nana.key# AQDg36RgQat7GhAAFRQkGubUw2ahEB4P/qAK3Q==2. 将用户tom的密钥导入tom.key中ceph-authtool -n client.tom -p tom.keyring > tom.keycat tom.key# AQBM+KRgR7GNEBAAgYrR12s+kp/VtJUdsd6URA==

2. 客户端挂载使用

- 客户端操作1. 在客户端以服务端创建用户nana的身份,将mon01,mon02,mon03挂载在本地的/opt/目录下,默认端口号6789 mount -t ceph mon01:6789,mon02:6789,mon03:6789:/ /opt/ -o name=nana,secretfile=/etc/ceph/nana.key2. 查看客户端本地的挂载点df -h# 1.1.1.4:6789,1.1.1.5:6789,1.1.1.6:6789:/ 54G0 54G 0% /opt

测试

1. 在挂载的/opt/目录下创建a.txt文件echo 123 > /opt/a.txt2. 将admin节点的密钥文件传给mon01scp nana.key root@1.1.1.4:/etc/ceph/3. 切换到mon01服务器,将mon01当作客户端,将ceph的文件系统挂载在/opt目录下,查看/opt目录下的文件内容mount -t ceph mon01:6789,mon02:6789,mon03:6789:/ /opt/ -o name=nana,secretfile=/etc/ceph/nana.key# 将ceph集群文件系统的挂载点挂载在本地的/opt/目录下ls /opt这里已经实现了文件系统的数据共享# a.txt- 测试ceph的高可用性1. 切换到mon01节点,关闭ceph集群中服务端mon01节点服务systemctl stop ceph-mds@mon012. 查看当前mfs文件系统的集群状态,还有两个节点可以使用ceph -s# mds: ceph-1/1/1 up {0=mon03=up:active}, 2 up:standby3. 在客户端mon01节点/opt/目录下创建b.txtecho 123 > /opt/b.txt4. 切换到客户端admin节点查看文件是否创建成功ls /opt# a.txt b.txt说明ceph集群的文件存储不存在nfs那种单点故障问题- 测试ceph集群的权限管理echo 123 > /opt/test/c.txtumount /opt# 卸载挂载用户nana的身份# 以tom用户的身份进行挂载,挂载到opt目录下。tom用户身份对挂载的根目录有r权限,对文件系统的根目录下子目录/test有rw权限mount -t ceph mon01:6789,mon02:6789,mon03:6789:/ /opt/ -o name=tom,secretfile=/etc/ceph/tom.keyecho 123456 > /opt/a.txt# -bash: /opt/a.txt: Permission deniedecho 123456 > /opt/test/test.txtcat /opt/test/c.txt# 123

RBD块存储接口

服务端操作

1. 创建RBD接口需要创建专门用于RBD的存储池

- 在管理端admin节点操作1. 创建一个名为kvm的普通pool池,并指定pg和pgp都为32ceph osd pool create kvm 32 32# pool 'kvm' created2. 将pool池转换为RBD模式ceph osd pool application enable kvm rbd# enabled application 'rbd' on pool 'kvm'

2. 初始化存储池

- 在管理端admin节点操作1. 初始化pool池rbd pool init -p kvm

3. 创建镜像

从pool池中划分出一块硬盘空间,这里的硬盘空间只是一个限制条件

- 在管理端admin节点操作1. 从pool池里面划分一个1G的硬盘img1rbd create --size 1G --pool kvm img1

4. 查看镜像信息

- 在管理端admin节点操作1. 查看pool池中所有划分出的硬盘空间rbd ls --pool kvm -l# NAME SIZE PARENT FMT PROT LOCK # img1 1GiB22. 指定一块硬盘空间,查看指定硬盘空间的详细信息 rbd --image img1 --pool kvm info# rbd image 'img1':#size 1GiB in 256 objects

5. 修改镜像大小

生产环境中,镜像大小一般建议只增不减!!!缩容可能会导致数据丢失!!!

- 在管理端admin节点操作1. 将pool池中的硬盘img1大小修改为5个Grbd resize --pool kvm --image img1 --size 5G# Resizing image: 100% complete...done.2. 缩减镜像的大小必须要加一个选项--allow-shrinkrbd resize --pool kvm --image img1 --size 2G --allow-shrink# Resizing image: 100% complete...done

6. 删除镜像

推荐使用trash命令,这个命令删除是将镜像移动到回收站,如果想找回还可以恢复。

如果使用remove或者rm都可以直接删除镜像,通常情况不建议直接删除镜像,直接删除镜像不可恢复!!!

- 在管理端admin节点操作方式一: 将镜像放入回收站,数据可恢复rbd trash move kvm/img1将镜像放入回收站rbd trash list --pool kvm查看kvm放入回收站的硬盘# 10e66b8b4567 img1rbd trash restore kvm/10e66b8b4567恢复kvm放入回收站的硬盘 方式二: 直接删除镜像,不推荐!!!rbd remove kvm/img2# Removing image: 100% complete...done.

7. 创建用户

在ceph集群,在管理节点创建并授权一个用户可访问指定的rdb存储池,这里指定存储池为kvm。

- 在管理端admin节点操作1. 创建并授权一个用户osd-mount可访问指定的rdb存储池kvmceph auth get-or-create client.osd-mount osd "allow * pool=kvm" mon "allow r" > /etc/ceph/ceph.client.osd-mount.keyring# 创建或者获取账号密钥,密钥名字为osd-mount。对存储池kvm具备所有权限,对mon节点具备读权限。# 追加到/etc/ceph/ceph.client.osd-mount.keyring文件中。2. 查看密钥文件的内容 cat ceph.client.osd-mount.keyring# [client.osd-mount]# key = AQB/EqVg37WmMxAA2NOXhlqpduXUmLRv8sHdnA==3. 关闭RBD镜像特性,默认情况下只支持layering和striping特性,需要将其他的特性关闭,否则客户端无法正常使用rbd feature disable kvm/img1 object-map, fast-diff, deep-flatten

客户端操作

切记客户端一定要在public_addr网络内

我们这里模拟管理服务器(admin节点)当作客户端访问public网络,所以客户端的部分操作我们不需要重复操作了。

生产环境中,客户端需要安装ceph软件包,还需要有配置文件以及密钥环文件

- 生产环境中,需要将服务端的这些目录和文件推送给客户端ssh root@1.1.1.10 mkdir /etc/cephscp /etc/ceph/ceph.client.osd-mount.keyring root@1.1.1.10:/etc/cephscp /etc/ceph/ceph.conf root@1.1.1.10:/etc/ceph

1. 安装ceph-common软件包

- 在客户端操作yum -y install ceph-common 注意:安装ceph-common软件包推荐使用软件包源和Ceph集群源相同,软件版本一致。

2. 执行客户端映射

- 在客户端操作# 注意用户名为 osd-mount1. 将存储池kvm中的硬盘img1进行映射,映射的过程中需要指定密钥环文件,指定用户名osd-mountcd /etc/cephrbd map --pool kvm --image img1 --keyring /etc/ceph/ceph.client.osd-mount.keyring --user osd-mount# /dev/rbd0

3. 查看/断开映射

- 在客户端操作1. 查看映射过来的裸盘rbd showmapped# id pool image snap device # 0 kvm img1 - /dev/rbd0 2. 解除映射rbd unmap kvm/img1rbd unmap -o force kvm/img1# 强制解除

4. 格式化并挂载

- 在客户端操作1. 将映射的硬盘/dev/rbd0格式化成xfs的文件系统 mkfs.xfs /dev/rbd0 2. 挂载使用格式化的文件系统mount /dev/rbd0 /mnt/

快照功能

查看快照

1. 查看快照rbd snap list kvm/img1# SNAPID NAME SIZE TIMESTAMP#4 img1_snap1 1GiB Thu May 20 00:11:41 2. 查看快照json格式输出rbd snap list kvm/img1 --format json --pretty-format

限制快照数

1. 限制镜像可创建的快照数rbd snap limit set kvm/img1 --limit 32. 解除限制rbd snap limit clear kvm/img1

删除快照

1. 删除指定快照rbd snap rm kvm/img1@img1_snap12. 删除所有快照rbd snap rm kvm/img1

快照克隆

1. 在服务端ceph集群中重新创建一个快照,并将重新创建的快照克隆一个kvm/img3rbd snap create kvm/img1@img1_snap666rbd snap protect kvm/img1@img1_snap666rbd clone kvm/img1@img1_snap666 --dest kvm/img32. 在客户端测试umount /mnt# 卸载之前的挂载rbd map --pool kvm --image img3 --keyring /etc/ceph/ceph.client.osd-mount.keyring --user osd-mount# 将克隆好的快照kvm/img3映射到客户端# /dev/rbd1mount /dev/rbd1 /mnt# 挂载客户端ls /mnt## a.txt

快照展平

通常情况下通过克隆而得到的镜像会保留对父快照的引用,这时候不可以删除该父快照,否则会有影响

rbd snap rm kvm/img1@img1_snap666报错信息如下# Removing snap: 0% complete...failed.# rbd: snapshot 'img1_snap666' is protected from removal.# -05-20 00:46:38.171161 7f698cd12d40 -1 librbd::Operations: snapshot is protected

如果响应删除快照但是想保留其子镜像,必须先展平其子镜像,展开的时间取决于镜像的大小。

1. 展平子镜像rbd flatten kvm/img3# Image flatten: 100% complete...done.2. 取消快照保护rbd snap unprotect kvm/img1@img1_snap6663. 删除快照rbd snap rm kvm/img1@img1_snap666# Removing snap: 100% complete...done.4. 查看镜像bd ls --pool kvm -lkvm/img3依然存在# NAME SIZE PARENT FMT PROT LOCK # img1 5GiB2excl # img1@img1_snap1 1GiB2 # img3 5GiB2

测试

验证快照

1. 在客户端写入文件echo 123 > /mnt/a.txt2. 在服务端ceph集群中对镜像做快照rbd snap create kvm/img1@img1_snap1在服务端ceph集群中对镜像做快照3. 在客户端删除文件rm -rf /mnt/a.txt4. 在客户端卸载挂载,断开映射umount /mnt rbd unmap kvm/img15. 在服务端ceph集群中恢复快照rbd snap rollback kvm/img1@img1_snap16. 客户端重新映射并挂载rbd map --pool kvm --image img1 --keyring /etc/ceph/ceph.client.osd-mount.keyring --user osd-mountmount /dev/rbd0 /mnt7. 查看数据还原ls /mnt # a.txt

验证ceph在线扩容

1. 重启一个客户端终端,执行一个脚本while true;do echo 111 >> /mnt/a.txt;sleep 1;done2. 在服务端ceph集群中调整ceph集群的大小rbd resize --pool kvm --image img1 --size 5G3. 在客户端执行下述命令resize2fs /dev/rbd0xfs_growfs /dev/rbd04. 查看扩容后的硬盘空间大小df -h查看文件系统扩容后的大小# /dev/rbd05.0G 34M 5.0G 1% /mnt

RGW对象存储接口

大多数对象存储的核心资源类型大同小异,如亚马逊S3̵、OpenStack Swift与RadosGW。这其中S3与Swift互不兼容,而RadosGW兼容S3与Swift。RadosGW为了兼容S3与Swift,Ceph在RadosGW集群的基础上提供了RGW(Rados GateWay)数据抽象层和管理层,它可以原生兼容S3和Swift的应用程序结构(API)。

S3和Swift他们可基于http或者https完成数据交换,由RadosGW内建的Civeweb提供服务,它还可以支持主流的Web服务器程序以代理的形式接收用户请求,在转发至RadoGW进程,这些代理服务器包括nginx、haproxy等。

RGW的功能依赖于对象网关守护进程实现,负责向客户端提供REST API接口。出于冗余负载均衡的需求,一个Ceph集群上通常不止一个RadoGW守护进程。在云计算环境中还会在多个Ceph集群中定义出多个Zone,这些Zone之间通过同步实现冗余功能,在本地环境中通常不需要Zone。

服务端操作

1. 创建radosgw接口

如果使用搭配类似S3或者Swift接口的时候才需要部署/创建radosgw接口,RadosGW通常作为对象存储使用。

一般生产环境中rgw守护进程需要部署高可用

- 在管理端admin节点操作1. 创建RadosGW(Rados GateWay)守护进程,可以创建在集群任何节点cd /etc/cephceph-deploy rgw create mon022. 查看RadosGW守护进程创建成功后,默认情况下自动创建的一系列用于RadosGW的存储池ceph osd pool ls# .rgw.root# default.rgw.control控制器信息# default.rgw.meta记录元数据# default.rgw.log日志信息3. 默认情况下RadosGW会监听7480号端口,在创建完成后日志会有显示。我们也可以在浏览器输入mon02的ip地址加端口号查看(192.168.70.5:7480)。curl http://mon02:7480# url http://mon02:7480# <?xml version="1.0" encoding="UTF-8"?><ListAllMyBucketsResult xmlns="/doc/-03-01/"><Owner><ID>anonymous</ID><DisplayName></DisplayName></Owner><Buckets></Buckets></ListAllMyBucketsResult>[root@admin ceph]#

2. 更改监听端口号

RadosGW守护进程内部由Civeweb(公民网)实现,通过对Civeweb的配置可以完成对RadosGW的基本管理。Civeweb默认监听在7480端口并提供http协议,如果需要修改配置需要编辑ceph.conf配置文件,在管理节点编辑ceph.conf,新增如下配置。

- 在管理端admin节点操作1. 新增配置文件内容vim /etc/ceph/ceph.conf...[client.rgw.mon02]rgw_host = mon02rgw_frontends = "civetweb port=8080 num_threads=500 request_timeout_ms=60000"2. 将管理节点的配置文件推送给其他各个节点ceph-deploy --overwrite-conf config push mon01 mon02 mon03 osd01 osd02 osd03# --overwrite-conf强制覆盖- 在mon02节点操作1. 重启radosgw守护进程服务systemctl restart ceph-radosgw.targetnetstat -an | grep 8080查看修改后的端口号# tcp 00 0.0.0.0:8080 0.0.0.0:*LISTEN

3. Http配置

要在Civetweb(公民网)上启用SSL,首先你需要一个证书,它应该与提供Ceph对象网关服务的域名相对应。

- 在mon02(rgw节点)上进行操作1. 生成CA证书私钥:civetweb.keyopenssl genrsa -out civetweb.key 20482. 生成CA证书公钥:civetweb.crtopenssl req -new -x509 -key civetweb.key -out civetweb.crt -days 3650 -subj "/CN=1.1.1.5"3. 将生成的证书合并为pemcat civetweb.key civetweb.crt > /etc/ceph/civetweb.pem4. 修改/etc/ceph/ceph.conf配置文件vim /etc/ceph/ceph.conf ...[client.rgw.mon02]rgw_host = mon02# rgw_frontends = "civetweb port=8080 num_threads=500 request_timeout_ms=60000"rgw_frontends = "civetweb port=80+443s ssl_certificate=/etc/ceph/civetweb.pem num_threads=500 request_timeout_ms=60000"# port:https端口需要在端口号后面加一个s,ssl_certificate:指定证书的路径5. 重启服务systemctl restart ceph-radosgw.targetnetstat -an |grep 443netstat -an |grep -w 80- 测试其他虚拟机输入: curl http://mon02浏览器输入:https://192.168.70.5/:443或者http://192.168.70.5/

4. 创建RadosGW用户

- 在管理端admin节点操作1. 创建Radosgw用户,可以在集群任何管理节点执行下面命令。radosgw-admin user create --uid="test" --display-name="test user"# uid:指定用户名 display-name:指定用户描述信息2. 查看用户信息radosgw-admin user info --uid="test"# "access_key": "22FB5A913HO5Z6H7WB60",# "secret_key": "j9PTtEmRVqB8ykr8N6oceV2GNqWGNtGf7nL1heu1"

客户端操作

切记客户端一定要在public_addr网络内

S3接口访问测试

我们可以直接用我们的真机进行测试,真机测试需要先安装Python。

1. 打开电脑的cmd,安装pip模块C:\Users\彭于晏>pip3 install boto2. 脚本可以放入pycharm中进行检测执行,需要先下载boto s3模块# coding:utf-8import sslimport boto.s3.connectionfrom boto.s3.key import Keytry:_create_unverified_https_context = ssl._create_unverified_contextexcept AttributeError:passelse:ssl._create_default_https_context = _create_unverified_https_context# test用户的keys信息access_key = "22FB5A913HO5Z6H7WB60"secret_key = "j9PTtEmRVqB8ykr8N6oceV2GNqWGNtGf7nL1heu1"# rgw的ip与端口host = "1.1.1.5"port = 443# 如果使用443端口,下述链接应设置is_secure=True# port = 80 # 如果使用80端口,下述连接应设置is_secure=Falseconn = boto.connect_s3(aws_access_key_id=access_key,aws_secret_access_key=secret_key,host=host,port=port,is_secure=True,validate_certs=False,calling_format=boto.s3.connection.OrdinaryCallingFormat())# 创建存储桶conn.create_bucket(bucket_name='bucket01')conn.create_bucket(bucket_name='bucket02')# 获得一个存储桶bucket1 = conn.get_bucket('bucket01')bucket2 = conn.get_bucket('bucket02')# 判断是否存在,不存在返回Noneexists = conn.lookup('bucket01')print(exists)exists = conn.lookup('bucket02')print(exists)# 查看bucket存储桶下的内容print(list(bucket1.list()))print(list(bucket2.list()))# 向S3存储数据,数据来源可以是file、stream或者string# 上传文件bucket1 = conn.get_bucket('bucket01')key = Key(bucket=bucket1, name='myfile') # name的值的数据是keykey.set_contents_from_filename(r'D:\课件\venv\nana.txt')print(key.get_contents_as_string()) # 读取s3中文件的内容,返回string即文件nana.txt的内容# 上传字符串bucket1 = conn.get_bucket('bucket01') # 如果之前已经获取过对象,此处不需要重复获取k = Key(bucket1)k.key = 'xxx'k.set_contents_from_string('lala is happy')print(k.get_contents_as_string())# 删除一个存储桶,在删除存储桶本身时必须删除该存储桶内的所有keybucket1 = conn.get_bucket('bucket01')for key in bucket1:key.delete()bucket1.delete()# bucket1.get_all_keys()[0].delete() # 删除某一个key# 迭代遍历buckets和keysfor bucket in conn:for key in bucket:print(key.name,key.get_contents_as_string())# 判断文件加中是否有文件的方法bucket1 = conn.get_bucket('bucket01')res = bucket1.get_all_keys()if len(res) > 0:print("有内容")else:print("空文件")

RadosGW负载均衡

RadosGW负载均衡+高可用的架构如下

在RadosGW前面加一层代理,同时还可以使用keepalived做高可用代理后端地址为RadosGW主机的IP+PORT,可以起多个RadosGW进程在不同的主机,这样就实现了负载均衡+高可用这时候HTTPS证书需要配置在前端代理,在使用s3cmd --configure的时候在"HTTP Proxy name"这里需要填写代理服务器访问的域名。在ceph.conf配置文件内不需要指定rgw_dns_name选项,配置为HTTP即可。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。