块存储、分布式存储、对象存储,部署案例


 集群与存储

块存储应用案例

1.环境准备

为虚拟机创建磁盘镜像:

[rood@node1~]# rbd create vm1-image --image-feature layering --size 10G

#”vm1-image”是创建的镜像名

[rood@node1~]#rbd list                     //查看所有rbd池里的镜像

[rood@node1~]#rbd info vm1-image        //查看详细信息

[rood@node1~]#qemu-img info rbd:rbd/vm1-image

 

 

Ceph认证帐户:

Ceph默认开启用户认证,默认帐户名为client.admin , key是帐户的密钥

/etc/ceph/ceph.conf   //配置文件

[root@node1 ceph]# cat /etc/ceph/ceph.client.admin.keyring

[client.admin]

        key = AQDOvb5busfJJxAAyqEYMhofNcq2c2jxC36wsw==

 

部署客户端环境(真机)

先装包:ceph-common

 

拷贝配置文件和连接密钥(否则无连接权限)

[root@room9pc01~]# scp 192.168.4.51:/etc/ceph/ceph.conf  /etc/ceph/                             

[root@room9pc01~]#scp 192.168.4.51:/etc/ceph/ceph.client.admin.keyring     /etc/ceph/

 

 

 

2.创建kvm虚拟机

Kvm创建初始化虚拟机

[root@room9pc01 ~]# virsh list  --all     //查看所有的虚拟主机

[root@room9pc01 ~]# ls /etc/libvirt/qemu  //看所有虚拟主机的硬件配置文件信息

(虚拟机的名称,内存,磁盘,网卡等信息)

编写帐户的信息文件

[root@room9pc01 ~]# vim /root/secret.xml

<secret ephemeral='no' private='no'>

    <usage type='ceph'>

        <name>client.admin secret</name>  

    </usage>

</secret>

 

使用XML配置文件创建secret

[root@room9pc01 ~]# virsh secret-define --file secret.xml

生成随机的对应账户的UUID 872a03f9-6d20-4a6b-89a5-53789d67d5d7

#如果定义过了,需要先删除原先的uuid

[root@room9pc01 ~]# virsh secret-undefine ebee4925-94b2-4a66-940a-6eebb96d3a26

 

编写账户信息文件(真实机操作)

[root@room9pc01 ~]#ceph auth get-key client.admin

AQDOvb5busfJJxAAyqEYMhofNcq2c2jxC36wsw==

//获取 client.adminkey,  或者直接查看密钥文件

[root@room9pc01 ~]#cat /etc/ceph/ceph.clinet.admin.keyring

//出现内容与上面是一样的

 

设置secret,添加账户的密钥

[root@room9pc01~]# virsh secret-set-value --secret 872a03f9-6d20-4a6b-89a5-53789d67d5d7  --base64 AQDOvb5busfJJxAAyqEYMhofNcq2c2jxC36wsw==

提示信息:secret 值设定

//这里cecret后面是创建的secretuuidbase64后面是client.admin帐户的密码

 

 

[root@room9pc01 ~]# virsh dumpxml avpc > /tmp/avpc1.xml

#cat /etc/libvirt/qemu/avpc.xml > /tmp/avpc1.xml

#创建一个新的虚拟机初始化生成配置文件即可,修改avpc虚拟机的硬件配置信息

[root@room9pc01 ~]# vim /tmp/avpc1.xml

  <disk type='network' device='disk'>

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

 

    添加:    <auth username='admin'>

        <secret type='ceph' uuid='872a03f9-6d20-4a6b-89a5-53789d67d5d7'/>

        </auth>

//这里的uuid就是secretuuid,有client.admin帐户和密钥信息

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

           <host name='192.168.4.51' port='6789'/>

        </source>

//连接的ceph主机为192.168.4.51 端口号为6789

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

//将获取的镜像设为虚拟机的vda磁盘

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

    </disk>

 

使用编辑好的虚拟配置文件/tmp/avpc1.xml 创建虚拟机

[root@room9pc01 ~]# virsh define /tmp/avpc1.xml

定义域 avpc1(从 /tmp/avpc1.xml

[root@room9pc01 ~]# virsh list --all  | grep avpc1

 8     avpc1                          running

 

连接光盘镜像,引导选项>启用引导菜单打钩,下面3个选项打钩钩即可安转

(将系统装入镜像文件映射的vda磁盘里)

 

 

 

 

 

 

 

 

分布式文件系统CephFS

 

 

--分布式文件系统(Distibuted File System)是指文件系统管理的物理存储资

 源不一定直接连接在本地节点上,而是通过计算机网络与节点相连

--CephFS使用Ceph集群提供POSIX兼容的文件系统

--允许Linux直接将Ceph存储挂载到本地

 

准备一台新虚拟机,作为GW服务器

要求如下:ip地址:192.168.4.54

主机名:node4

配置yum

时间同步client

Node1允许无密码远程node4

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

 

 

元数据服务

元数据(Metata

 --任何文件系统中的数据分为数据和元数据

 --数据是指普通文件中的实际数据

 --元数据指用来描述一个文件的特征的系统数据(关于实际数据的数据)

 --比如:访问权限,文件拥有者以及文件数据快的分布信息(inode)等

--所以Cephfs必须有MDSs节点

 

 

 

创建元数据服务器

登陆node4,安装ceph-mds软件包

[root@node4~]# yum -y install ceph-mds

登陆node1部署节点操作

[root@node1~]# cd /root/ceph-cluster   //之前部署ceph集群创建的目录

[root@node1 ceph-cluser]# ceph-deploy mds create node4

//node1拷贝配置文件至node4中,启动mds服务

 [root@node1 ceph-cluser]# ceph-deploy admin node4

//发送密钥给node4

 

 

文件系统需要至少2个池

创建存储池

一个池用于存储,一个用于储存元数据

 [root@node4~]#  ceph osd pool create cephfs_data 128

 [root@node4~]#  ceph osd pool create cephfs_metadata 128

//需要指定大小,128PG,否则会分配所有空间

// PG是指定存储池存储对象的归属组的个数,每个PG里都可存多个对象

 

创建Ceph文件系统

[root@node4 ~]# ceph fs new myfs1 cephfs_metadata cephfs_data

new fs with metadata pool 2 and data pool 1

//先写存元数据的池,再写储存数据的池

Fs:文件系统类型  myfs1:文件系统名

[root@node4 ~]# ceph fs ls

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

[root@node4 ~]# ceph mds stat      //查看mds状态

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

 

客户端挂载(Linux内核支持ceph文件系统不用装软件)

[root@client ~]#  mkdir /cephfs           //创建用于挂载的文件夹

[root@client ~]# cat /etc/ceph/ceph.client.admin.keyring

[client.admin]

        key = AQDOvb5busfJJxAAyqEYMhofNcq2c2jxC36wsw==

//密钥信息

 

[root@client ~]# mount -t ceph 192.168.4.51:6789/    /cephfs/ -o name=admin,secret=AQDOvb5busfJJxAAyqEYMhofNcq2c2jxC36wsw==

//-t指定文件系统为ceph 

//192.168.4.51mon节点的ip

//用户名为admin

//secret是密钥

 

[root@client ~]# mount | grep ceph

192.168.4.51:/ on /cephfs type ceph (rw,relatime,name=admin,secret=<hidden>,acl)

//查看是否挂上

 

 

Ceph对象存储

什么是对象存储?

--就是键值存储,通其接口命令,也就是简单的GETPUTDEL和其他扩展,

  向存储服务上传下载数据

--对象存储中所有数据都被认为是一个对象,so 任何数据都可以存入对象存储服务器,如图片,视频,音频等

RGWCeph对象存储网关,用于向客户端应用呈现储存界面,提供RESTful API访问接口

 

准备一台新虚拟机,作为元数据服务器

要求如下:ip地址:192.168.4.55

主机名:node5

配置yum

时间同步client

Node1允许无密码远程node5

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

 

部署RGW软件包

客户端通过RGW访问存储集群

 

通过node1安装ceph-radosgw

[root@node1~]# ceph-deploy install --rgw node5

同步配置文件与密钥node5

[root@node1~]#  cd /root/ceph-cluser

[root@node1 ceph-cluser]# ceph-deploy admin node5

 

 

新建网关

启动一个rgw服务

[root@node1]# ceph-deploy rgw create node5

进入node5验证服务是否启动

[root@node5~]#ps aux | grep radosgw

 

 

修改服务端口

登陆node5 RGW默认服务端口为7480,修改为80,方便使用

[root@node5~]# /etc/ceph/ceph.conf

[client.rgw.node5]

Host = node5

Rgw_frontens = “civetweb port=80”

//node5是主机名

//civetwebRGW内置的一个web服务

 

客户端测试RGW是否正常工作

[root@client~]# curl 192.168.4.55:80

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

xmlns="http://s3.amazonaws.com/doc/2006-03-

01/"><Owner><ID>anonymous</ID><DisplayName></DisplayName></Owner><Buckets></Buckets

></ListAllMyBucketsResult>

 

创建客户端连接时使用的帐户密码

[node5 ceph]# radosgw-admin user create --uid="testuser" --display-name="First User"

//--uid 指是用户名   --display-name 是描述信息

 

 "keys": [

        {

            "user": "testuser",

            "access_key": "356O8JOHCM0D0NCW84W3",

            "secret_key": "zE4ONNIc9st6OJMADvJAYAYH2rhbWAeDhwrLtwMA"

        }

    ],

// "access_key": 是客户端访问网关主机的密钥

// "secret_key": 是加密字符串

 

 

客户端安装访问网关主机node5的工具(命令行访问工具)

[root@client ~]# yum -y install s3cmd-2.0.1-1.el7.noarch.rpm

 

显示testuser用户密钥信息

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

"keys": [

        {

            "user": "testuser",

            "access_key": "356O8JOHCM0D0NCW84W3",

            "secret_key": "zE4ONNIc9st6OJMADvJAYAYH2rhbWAeDhwrLtwMA"

        }

    ],

 

执行,配置软件

[root@client /]# s3cmd --configure

Access key and Secret key are your identifiers for Amazon S3. Leave them empty for using the env variables.

Access Key: 3D7J0E1479SVO7JH11SN

Secret Key: BN7uWCrQ5l8iu46cFQEZmG9zz8TgrcHrRSepEOOH

S3 Endpoint [s3.amazonaws.com]: 192.168.4.55:80

[%(bucket)s.s3.amazonaws.com]: %(nucket)s.192.168.4.5580

Use HTTPS protocol [Yes]: no

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

Save settings? [y/N] y

//其他注释默认回车不填写

 

客户端创建存储数据的bucket(类似于存储数据的目录)

[root@client ~]# s3cmd mb s3://my_bucket

Bucket 's3://my_bucket/' created

查看

[root@client ~]# s3cmd ls

2018-10-12 09:49  s3://my_bucket

客户端上传文件存储目录中(put 上传)

[root@client ~]# s3cmd put /etc/passwd s3://my_bucket/log/

upload: '/etc/passwd' -> 's3://my_bucket/log/passwd'  [1 of 1]

 2168 of 2168   100% in    6s   343.79 B/s  done

客户端查看一下

[root@client ~]# s3cmd ls s3://my_bucket/log/

2018-10-12 09:51      2168   s3://my_bucket/log/passwd

将文件下载到本地(wget下载)

[root@client ~]# s3cmd get s3://my_bucket/log/passwd  /tmp/

将文件删除(del 删除)

[root@client ~]# s3cmd del s3://my_bucket/log/passwd

delete: 's3://my_bucket/log/passwd'

再看一下就没了

[root@client ~]# s3cmd ls s3://my_bucket/log/

 

 

 

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM