二十九.块存储应用案例 分布式文件系统 对象存储

client:192.168.4.10

node1 :192.168.4.11

ndoe2 :192.168.4.12

node3 :192.168.4.13

1.块存储 应用案例(真机访问)

rbd池子\镜像共享盘 块存储

Filesystem---KRBD---Kernel---ceph

要求:

Ceph创建块存储镜像

客户端安装部署ceph软件

客户端部署虚拟机

客户端创建secret

设置虚拟机配置文件,调用ceph存储

*************

]# rpm -e --nodeps xxxxxxx

当安装了更高版本软件,但是需要低版本的时候,可以卸载高版本软件包

这种卸载方式可以脱离依赖关系,在重新安装

*************

1.1 创建磁盘镜像(node1)

]# rbd create vm1-image --image-feature  layering --size 10G

]# rbd create vm2-image --image-feature  layering --size 10G

]# rbd list

vm1-image

vm2-image

]# rbd info vm1-image

]# qemu-img  info  rbd:rbd/vm1-image

image: rbd:rbd/vm1-image

file format: raw

virtual size: 10G (10737418240 bytes)

disk size: unavailable

1.2 Ceph认证账户。

Ceph默认开启用户认证,客户端需要账户才可以访问,

默认账户名称为client.admin,key是账户的密钥,

可以使用ceph auth添加新账户(案例我们使用默认账户)。

]# cat /etc/ceph/ceph.conf          //配置文件

[global]

mon_initial_members = node1, node2, node3

mon_host = 192.168.2.10,192.168.2.20,192.168.2.30

auth_cluster_required = cephx                      //开启认证

auth_service_required = cephx                      //开启认证

auth_client_required = cephx                       //开启认证

]# cat /etc/ceph/ceph.client.admin.keyring         //账户文件

[client.admin]

key = AQBTsdRapUxBKRAANXtteNUyoEmQHveb75bISg==

1.3 部署客户端环境(真机,将虚拟机部署在ceph上)

注意:这里使用真实机当客户端!

客户端需要安装ceph-common软件包,拷贝配置文件(否则不知道集群在哪),

拷贝连接密钥(否则无连接权限)。

]# yum -y  install ceph-common

]# scp 192.168.4.11:/etc/ceph/ceph.conf  /etc/ceph/

]# scp 192.168.4.11:/etc/ceph/ceph.client.admin.keyring \

/etc/ceph/

1.4 创建KVM虚拟机(虚拟化迁移)#真机操作

**********************

虚拟机存放位置:/var/lib/libvirt/images/xxx

虚拟机描述信息存放位置:/etc/libvirt/qemu/xxx.xml

]# virsh destroy xxx #关闭

]# virsh start xxx   #开启

]# virsh console xxx #远程登陆

]# virsh list --all  #查看全部虚拟机

]# virsh edit xxx    #编辑虚拟机描述信息

]# virsh secret-list #查看秘钥

]# virsh --help | grep secret

Secret (help keyword ‘secret‘)

secret-define      定义或者修改 XML 中的 secret

secret-dumpxml     XML 中的 secret 属性

secret-event       Secret Events

secret-get-value   secret 值输出

secret-list        列出 secret

secret-set-value   设定 secret 值

secret-undefine    取消定义 secret

*************************

1.4.1 图形化操作,创建虚拟机dachui

1.4.2 配置libvirt secret

]# vim secret.xml      //新建临时文件,内容如下

<secret ephemeral=‘no‘ private=‘no‘>

<usage type=‘ceph‘>

<name>client.admin secret</name>

</usage>

</secret>

#使用XML配置文件创建secret

1.4.3 生成用户信息,用户名

]# virsh secret-define --file secret.xml(生成用户信息,用户名)

732a4f12-1166-4c81-a42f-55814eb353c2  ceph client.admin secret

] virsh secret-list

UUID                                  用量

--------------------------------------------------------------------------------

732a4f12-1166-4c81-a42f-55814eb353c2  ceph client.admin secret

1.4.4 生成密码

查看client.admin账户的密码

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

[client.admin]

key = AQAUZmJcPjeHCBAAJpQCzugV8Wf6iQLckB8gNw==

生成秘钥:

]# virsh secret-set-value \

--secret 732a4f12-1166-4c81-a42f-55814eb353c2 \

--base64 AQAUZmJcPjeHCBAAJpQCzugV8Wf6iQLckB8gNw==

secret 值设定

1.4.5 虚拟机的XML配置文件

] virsh edit dachui

找到对应disk对,修改前内容如下

<disk type=‘file‘ device=‘disk‘>

<driver name=‘qemu‘ type=‘qcow2‘/>

<source file=‘/var/lib/libvirt/images/vm1.qcow2‘/>

<target dev=‘vda‘ bus=‘virtio‘/>

<address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x07‘ function=‘0x0‘/>

</disk>

修改后内容如下:

<disk type=‘network‘ device=‘disk‘>

<driver name=‘qemu‘ type=‘raw‘/>

#新加ceph磁盘的用户认证

<auth username=‘admin‘>

<secret type=‘ceph‘ uuid=‘732a4f12-1166-4c81-a42f-55814eb353c2‘/>

#生成的对应的额uuid

</auth>

<source protocol=‘rbd‘ name=‘rbd/vm1-image‘>

#ceph磁盘镜像地址

<host name=‘192.168.4.11‘ port=‘6789‘/>

</source>

<target dev=‘vda‘ bus=‘virtio‘/>

<address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x07‘ function=‘0x0‘/>

</disk>

1.4.6 打开dachui虚拟机

查看VirtLO磁盘1的虚拟路径:

源路径 rbd://192.168.4.11:6789/rbd/vm1-image

2.Ceph文件系统(虚拟机访问)

VM---Hypervisor---librbd---ceph

node4:192.168.4.14

部署MDSs节点

创建Ceph文件系统

客户端挂载文件系统

2.1 添加一台新的虚拟机,要求如下:

IP地址:192.168.4.14

主机名:node4

配置yum源(包括rhel、ceph的源)

与Client主机同步时间

node1允许无密码远程node4

2.2 部署元数据服务器

node4]# yum -y install ceph-mds

2.3 登陆node1部署节点操作

2.3.1 添加主机名解析

node1]# vim /etc/hosts

192.168.4.10  client

192.168.4.11  node1

192.168.4.12  node2

192.168.4.13  node3

192.168.4.14  node4

2.3.2 配置node4文件(node1)

node1]# cd /root/ceph-cluster

//该目录,是最早部署ceph集群时,创建的目录

cluster]# ceph-deploy mds create node4

//给nod4拷贝配置文件,启动mds服务

cluster]# ceph-deploy admin node4(一定要在cluster工作目录下)

同步配置文件和key

2.4 创建存储池

node4]# ceph osd pool create cephfs_data 128(32-64都可以,block数据盘,类似磁盘划分)

pool ‘cephfs_data‘ created

//创建存储池,对应128个PG

node4]# ceph osd pool create cephfs_metadata 128(元数据,类似格式化)

pool ‘cephfs_metadata‘ created

node4 ~]# ceph osd lspools

0 rbd,1 cephfs_data,2 cephfs_metadata,

2.5 创建Ceph文件系统(只能做一个)

node4]# ceph mds stat   //查看mds状态

e2:, 1 up:standby

node4]# ceph fs new myfs1 cephfs_metadata cephfs_data

new fs with metadata pool 2 and data pool 1

用元数据cephfs_metadata 和 数据盘cephfs_data 创建文件系统)

//注意,现写medadata池,再写data池

//默认,只能创建1个文件系统,多余的会报错

node4]# ceph fs ls

name: myfs1, metadata pool: cephfs_metadata, data pools: [cephfs_data ]

node4]# ceph mds stat

e5: 1/1/1 up {0=node4=up:active}

2.6 客户端挂载(不用格式化,已经是文件系统)

client]# mkdir /mnt/cephfs

client]# mount -t(type) ceph 192.168.4.11:6789:/  /mnt/cephfs/ \

-o name=admin,secret=AQAUZmJcPjeHCBAAJpQCzugV8Wf6iQLckB8gNw==

//连接node1 2 3 都可以 都是mon

//...4.11:6789:/ 为什么直接挂根下,因为ceph只能做一个文件系统

//注意:文件系统类型为ceph

//192.168.4.11为MON节点的IP(不是MDS节点)

//admin是用户名,secret是密钥

//密钥可以在/etc/ceph/ceph.client.admin.keyring中找到

client]# df -h

192.168.4.11:6789:/ 120G  232M  120G 1% /mnt/cephfs

*******************

格式化:赋予空间文件系统的过程

inode            block

元数据               真实数据

真实数据的描述信息、指针(数据定位)

磁盘碎片整理:零散的数据整合排列,顺序化

格式化单元默认大小:4k

数据删除:只是将对应文件的inode标签为已删除,真实数据还在,如果继续写操作,就会随机覆盖

数据恢复:再没有继续写操作的前提下,找出打标签的inode,恢复inode即可。

ceph-mds---inode

ceph-osd---block

********************

3.创建对象存储服务器

安装部署Rados Gateway

启动RGW服务

设置RGW的前端服务与端口

客户端测试

3.1 部署对象存储服务器

3.1.1 准备实验环境,要求如下:

IP地址:192.168.4.15

主机名:node5

配置yum源(包括rhel、ceph的源)

与Client主机同步时间

node1允许无密码远程node5

修改node1的/etc/hosts,并同步到所有node主机

添加主机名解析

node1]# vim /etc/hosts

192.168.4.10  client

192.168.4.11  node1

192.168.4.12  node2

192.168.4.13  node3

192.168.4.14  node4

192.168.4.15  node5

3.1.2 部署RGW软件包

node1 ~]# ceph-deploy install --rgw node5

同步配置文件与密钥到node5

node1 ~]# cd /root/ceph-cluster

node1 ~]# ceph-deploy admin node5

3.1.3 新建网关实例

启动一个rgw服务

node1 ~]# ceph-deploy rgw create node5

登陆node5验证服务是否启动

node5 ~]# ps aux | grep radosgw

ceph
17710  0.3  1.6 2294328 17132 ?   Ssl  09:55  0:00 /usr/bin/radosgw -f
--cluster ceph --name client.rgw.node3 --setuser ceph --setgroup ceph

root 17962  0.0  0.0 112676   980 pts/0 R+   09:56   0:00 grep --color=auto radosgw

3.1.4 修改服务端口

登陆node5,RGW默认服务端口为7480,修改为8000或80更方便客户端记忆和使用

node5 ~]# vim /etc/ceph/ceph.conf

新添加:

[client.rgw.node5]

host = node5

rgw_frontends = "civetweb port=8000"

//node5为主机名

//civetweb是RGW内置的一个web服务

]# systemctl restart ceph-radosgw@rgw.node5.service #重启服务

3.2 client测试:

3.2.1 curl测试

]# curl 192.168.4.15:8000

<?xml version="1.0" encoding="UTF-8"?><ListAllMyBucketsR...

3.2.2 使用第三方软件访问

登陆node5(RGW)创建账户

node5 ~]# radosgw-admin user create \

--uid="testuser" --display-name="First User"

… …

"keys": [

{

"user": "testuser",

"access_key": "5E42OEGB1M95Y49IBG7B",

"secret_key": "i8YtM8cs7QDCK3rTRopb0TTPBFJVXdEryRbeLGK6"

}

],

... ...

#

node5 ~]# radosgw-admin user info --uid=testuser

//testuser为用户,key是账户访问密钥

3.2.3 客户端安装软件

client ~]# yum install s3cmd-2.0.1-1.el7.noarch.rpm

修改软件配置(注意,除了下面设置的内容,其他提示都默认回车)

client ~]#  s3cmd --configure

Access Key: 5E42OEGB1M95Y49IBG7BSecret Key: i8YtM8cs7QDCK3rTRopb0TTPBFJVXdEryRbeLGK6

S3 Endpoint [s3.amazonaws.com]: 192.168.4.15:8000

[%(bucket)s.s3.amazonaws.com]: %(bucket)s.192.168.4.15:8000

Use HTTPS protocol [Yes]: No

Test access with supplied credentials? [Y/n] n

Save settings? [y/N] y

//注意,其他提示都默认回车

3.2.4 创建存储数据的bucket(类似于存储数据的目录)

client ~]# s3cmd ls

client ~]# s3cmd mb s3://my_bucket

Bucket ‘s3://my_bucket/‘ created

client ~]# s3cmd ls

2018-05-09 08:14 s3://my_bucket

client ~]# s3cmd put /var/log/messages s3://my_bucket/log/

client ~]# s3cmd ls

2018-05-09 08:14 s3://my_bucket

client ~]# s3cmd ls s3://my_bucket

DIR s3://my_bucket/log/

client ~]# s3cmd ls s3://my_bucket/log/

2018-05-09 08:19 309034 s3://my_bucket/log/messages

测试下载功能

client ~]# s3cmd get s3://my_bucket/log/messages /tmp/

测试删除功能

client ~]# s3cmd del s3://my_bucket/log/messages

原文地址:https://www.cnblogs.com/luwei0915/p/10490873.html

时间: 2024-10-11 01:28:08

二十九.块存储应用案例 分布式文件系统 对象存储的相关文章

企业搜索引擎开发之连接器connector(二十九)

在哪里调用监控器管理对象snapshotRepositoryMonitorManager的start方法及stop方法,然后又在哪里调用CheckpointAndChangeQueue对象的resume方法获取List<CheckpointAndChange> guaranteedChanges集合 下面跟踪到DiffingConnectorTraversalManager类的相关方法,在该类实现的方法中,调用了监控器管理对象snapshotRepositoryMonitorManager的相

Welcome to Swift (苹果官方Swift文档初译与注解二十九)---209~218页(第四章-- 流程控制)

Break break语句会立刻结束整个流程控制的执行.break语句可以在switch语句或者循环语句中帮助你提前结束循环或者switch的执行. Break in a Loop Statement  (循环语句中的break) 当在循环语句中使用break,会立刻结束循环的执行,并且跳转到循环体之后的第一行代码.循环不会再遍历执行了. Break in a Switch Statement (switch语句的break) 当在switch语句中使用break,break会立刻结速switc

QT开发(二十九)——QT常用类(三)

QT开发(二十九)--QT常用类(三) 一.QImage 1.QImage简介 QT中提供了四个处理图像数据的类:QImage.QPixmap.QBitmap.QPicture. QImage提供了允许直接访问像素数据的硬件无关的图像显示方案,能够用作绘图设备. QImage专门为I/O.直接像素访问操作而设计,并进行了优化.访问图片的像素或是修改图片像素,则需要使用QImage,或者借助于QPainter来操作像素. 由于QImage继承自QPaintDevice,QPainter可以直接在Q

攻城狮在路上(叁)Linux(二十九)--- 完整备份工具:dump以及restore

一.dump命令: 该命令既可以针对整个文件系统进行备份,也可以仅针对目录来备份.还可以指定不同的备份等级(-0~-9共10个等级). dump -W:列出在/etc/fstab中具有dump设置的分区是否备份过. 命令格式: dump [-Suvj] [-level] [-f 备份文件] 待备份数据 参数说明: -S:仅列出后面的待备份数据所需要的磁盘空间大小. -u:将这次dump的时间记录到/etc/dumpdates文件中. -v:将dump的文件过程显示出来. -j:加入bzip2的支

Android学习笔记二十九之SwipeRefreshLayout、RecyclerView和CardView

Android学习笔记二十九之SwipeRefreshLayout.RecyclerView和CardView 前面我们介绍了AlertDialog和几个常用的Dialog,ProgressDialog进度条提示框.DatePickerDialog日期选择对话框和TimePickerDialog时间选择对话框.这一节我们介绍几个新的API控件SwipeRefreshLayout.RecyclerView和CardView,这几个API控件都是google在Android5.0推出的.下面我们来学

[原创]ActionScript3游戏中的图像编程(连载二十九)

2.2.2 Photoshop投影大小的模拟 投影没有之前那么浓了,但是跟Photoshop里的效果差别还挺大,因为在Photoshop里我们还设置了另外一个属性:大小. Flash里似乎找不到它的影子,我们用排除法来进行定位,Photoshop投影样式的大小属性以像素为单位,Flash投影滤镜的选项只有距离和那对被“手铐”扣住的模糊属性符合条件,而Photoshop里也有一个距离,所以我们定位到模糊属性(图 2.15). 图 2.15 Flash投影的模糊属性 分别调整Photoshop的大小

每日算法之二十九:Search in Rotated Sorted Array

在一个经过旋转后的有序数组中查找一个目标元素. Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2). You are given a target value to search. If found in the array return its index, otherwise return -1.

ActionScript3游戏中的图像编程(连载二十九)

2.2.2 Photoshop投影大小的模拟 投影没有之前那么浓了,但是跟Photoshop里的效果差别还挺大,因为在Photoshop里我们还设置了另外一个属性:大小. Flash里似乎找不到它的影子,我们用排除法来进行定位,Photoshop投影样式的大小属性以像素为单位,Flash投影滤镜的选项只有距离和那对被"手铐"扣住的模糊属性符合条件,而Photoshop里也有一个距离,所以我们定位到模糊属性(图 2.15). 图 2.15 Flash投影的模糊属性 分别调整Photosh

【Unity 3D】学习笔记二十九:游戏实例——简单小地图制作

任何的学习,光看不练是学不好的.所以这次就总结回顾下怎么制作MMROPG类游戏中的小地图.在MMROPG类游戏里,主角在游戏世界里走动时,一般在屏幕右上角都会有一个区域来显示当前游戏场景的小地图.主角在游戏世界里走动,小地图里代表着主角的小标记也会随之移动.那怎么实现咧? 首先需要确定两个贴图,第一个是右上角的小地图背景贴图,应该是从Y轴俯视向下截取主角所在的位置大地图.第二个就是主角的位置大贴图.在本例中,因为没有学习unity地图制作,所以地图用一个面对象代替,主角用立方体代替,使用GUI来