Linux集群存储——day5——Ceph集群上部署Linux系统、Ceph文件系统、Ceph的对象存储系统

Ceph集群存储的应用

   红帽的Linux已经把Ceph集成到内核中了,可以直接把操作系统装在分布存储文件中。
 
  将虚拟机的Linux操作系统安装在Ceph集群中:

    0. 如同Ceph集群进行初期环境部署。

    1. 在ceph存储中部署出一个镜像用来存储操作系统

    2. 创建一个新的虚拟机,但是不装操作系统

    3. 配置libvirt secret (Linux连接Ceph集群的密钥信息)
       3.1 编写账户信息文件 secret.xml (位置不固定,只要自己知道就好)

<secret ephemeral='no' private='no'>
    <usage type='ceph'>
            <name>client.admin secret</name>    # 该行的client.admin取决于ceph的密钥文件ceph.client.admin.keyring中的名字
    </usage>
</secret>

       3.2 生成UUID,使用XML配置文件创建secret

[root@client ~]# virsh secret-define --file 刚刚写的secret.xml文件(加上其绝对路径)
# 这时候执行命令后屏幕会出现一个UUID
# 如果报错,有可能是UUID已经存在了,这时候就删除UUID
# [root@client ~]# virsh secret-undefine  要删除的UUID

       3.3 获取密钥信息,不过输出并不换行,不过也可以查看密钥文件的信息

[root@client ~]# ceph auth get-key client.admin 
# 或者
[root@client ~]# cat /etc/ceph/ceph.client.admin.keyring

       3.4 查看自己创建的UUID

[root@client ~]# virsh secret-list

       3.5 设置secret,添加密钥

[root@client ~]# virsh secret-set-value --secret 刚刚查看到的UUID --base64 刚刚查看到的密钥信息

   4. 修改虚拟机的xml配置文件

      文件类型xml的基本格式 (Tmocat中有解释……………………)
      文件中不用 # 来标示注释

       4.0 找到需要修改的模块,如果文件没有被修改,应该是从31行(也可以搜索 <disk 关键字,第一个匹配的那行往下)的模块内容。
       4.1 修改了disk的type,不用file文件,转而采用network网络,
       4.2 修改driver的类型为raw
       4.3 删除原来的source那行
       4.4 添加用户名、UUID、选择用什么镜像作为镜像盘

修改后配置如下:

………………
    <disk type='network' device='disk'>
       <driver name='qemu' type='raw'/>

       <auth username='用户名一般是admin'> 
       <secret type='ceph' uuid='自己创建的UUID'/>
       </auth>

       <source protocol='rbd' name='存储池(默认rbd)/镜像名'>
          <host name='Ceph管理服务器的IP' port='6789'/>
       </source>

       <target dev='vda' bus='virtio'/>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </disk>
………………

    如果想重新写一个XML,然后根据这个文件创建一个虚拟机,就需要复制这个配置文件重新命名,然欧额外修改开头的三行配置
    修改其名字,然后删除UUID那行

<domain type='kvm'>
  <name>设置虚拟机的名字</name>
  <uuid>删除该行</uuid>
………………

   5. 把xml定义成一个具体的虚拟机,然后就可以进行具体的操作了,如果要装机最好把虚拟机的引导方式改称光盘最先,装机后再改成存储盘最优先

[root@client ~]# virsh define /tmp/lyu.xml

   思路总结:
      1. 部署块存储的Ceph存储集群,并且创建一个镜像用来存储操作系统等数据
      2. 创建libvirt secret信息,生成UUID,并将密钥结合到UUID中
      3. 用KVM生成一个虚拟机,但是不开机和装操作系统,然后修改其xml文件
      4. 用修改后的xml文件定义创建一个虚拟机


Ceph文件系统的部署

  文件系统:
     文件系统就是将一个存储空间分为两部分,一部分存储元数据(MDS),一部分存储具体数据;
     具体数据的意思很简单,就是一个一个文件中的文件内容以及相关数据;
     元数据就像一个索引,他就是记录,每个数据存放再哪里,用i节点(innode)作为每个文件的编号进行记录。一个元数据其中包含i节点、权限、以及数据具体存储的位置,我们可以用命令 ' ll -i 文件 ' 来查看元数据的信息,其中第一列就是i节点;
     当用户去对某个数据进行操作的时候,文件系统就会根据用户的要求,查找元数据,然后再根据元数据的记载,前往具体的数据所在存储位置,把数据取出给用户。

   0. 环境准备,一个Ceph集群控制服务器(contrl),一个Ceph元数据存储服务器(mds),多个存储服务器(node1……)
     0.1 和部署Ceph集群一样的操作
     0.2 给元数据服务器安装相关服务

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

     0.3 控制服务器可以免密登陆各个存储服务器

   1. 部署Ceph文件系统集群:(必须前往控制服务中创建用于ceph工作的目录中) 

[root@control ceph-path]# ceph-deploy mds create 元数据存储IP
[root@control ceph-path]# ceph-deploy admin 元数据存储IP

   2. 创建两个存储池,一个用来存储元数据,一个用来存储具体数据,并能记住各个存储池对应存了的是什么

[root@control ceph-path]# ceph osd pool create 存储池名字 开设多少个目录来存储数据

   3. 创建Ceph文件系统,把存储元数据的存储池写前面

[root@mds ~]# ceph  fs  new  myfs1  存储元数据存储池名  存储具体数据存储池名

   4. 查看mds状态

[root@mds ~]# ceph mds stat
[root@mds ~]# ceph fs ls

   5. 客户端挂载使用(密钥可在/etc/ceph/ceph.client.admin.keyring)

[root@client ~]# mount  -t  ceph  Ceph管理服务器的IP:6789:/  挂载点  -o  name=admin(用户名),secret=密钥

  注:一个ceph主机只能创建一个文件存储                                                                            

   思路综合:
      1. 部署Ceph存储集群
      2. 部署一个元数据存储服务器
      3. 创建两个存储池,一个存储元数据,一个存储具体数据
      4. 把两个存储池结合起来形成Ceph文件系统


对象存储RGW

    也是共享磁盘,只不过对象存储不需要进行块存储的操作,不过软件有些bug,不建议使用
    其原理就算,设置一个网关服务器,连接客户端和存储服务器,然后客户端使用特定的软件,直接操作存储服务器内的数据,可以直接把服务器中的所有数据当作一个对象进行操作

   1. 部署集群(部署几个存储服务器的操作一样)

[root@control ceph-path]# ceph-deploy install --rgw 网关服务器IP
[root@control ceph-path]# ceph-deploy admin 网关服务器IP

   2. 启动网关服务器的服务

[root@control ceph-path]# ceph-deploy rgw create 网关服务器IP

   3. 前往网关服务器,检查服务有没有开启

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

   4. 修改服务端口,不写的话默认7480

[root@rgw ~]#  vim  /etc/ceph/ceph.conf
[client.rgw.rgw]
host = rgw
rgw_frontends = "civetweb port=端口号"

   5. 重启动服务

[root@rgw ~]# systemctl  status ceph-radosgw@\*

   6. 这时候客户端无法访问

[root@client ~]# curl  网关服务器IP:端口号
<?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>

   7. 创建用户

[root@rgw ~]# radosgw-admin user create --uid="用户名" --display-name="First User"
# 将返回信息中key部分的内容记录下来
…………
    "keys": [
        {
            "user": "用户名",
            "access_key": "密钥",
            "secret_key": "加密字串"
        }
    ],
………………

      附: 如何查看创建了的用户信息,如果刚刚创建的信息没有记录下来,可以再次查看

[root@rgw ~]# radosgw-admin user info --uid=testuser

   8. 客户端安装访问的工具,软件包已经上传到资源中可以自行下载

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

        使用命令进行连接配置

[root@client ~]# s3cmd --configure

Enter new values or accept defaults in brackets with Enter.
Refer to user manual for detailed description of all options.

Access key and Secret key are your identifiers for Amazon S3. Leave them empty for using the env variables.
Access Key: 刚刚创建得到的密钥
Secret Key: 加密字串
Default Region [US]: 回车

Use "s3.amazonaws.com" for S3 Endpoint and not modify it to the target Amazon S3.
S3 Endpoint [s3.amazonaws.com]: 网关服务器的IP:端口号(默认7480)

Use "%(bucket)s.s3.amazonaws.com" to the target Amazon S3. "%(bucket)s" and "%(location)s" vars can be used
if the target S3 system supports dns based buckets.
DNS-style bucket+hostname:port template for accessing a bucket [%(bucket)s.s3.amazonaws.com]: 这里回复的时候必须要按照格式来   %(bucket)s. 网关服务器的IP:端口号(默认7480)

Encryption password is used to protect your files from reading
by unauthorized persons while in transfer to S3
Encryption password: 回车
Path to GPG program [/usr/bin/gpg]: 回车

When using secure HTTPS protocol all communication with Amazon S3
servers is protected from 3rd party eavesdropping. This method is
slower than plain HTTP, and can only be proxied with Python 2.7 or newer
Use HTTPS protocol [Yes]: No

On some networks all internet access must go through a HTTP proxy.
Try setting it here if you can't connect to S3 directly
HTTP Proxy server name: 回车

New settings:
  Access Key: F3WULJZFCTX84K73LKRJ
  Secret Key: WmitdKurFIJxMplRQnw2DyYrvOnGIqIZGi6Ojx7x
  Default Region: US
  S3 Endpoint: 192.168.4.55:80
  DNS-style bucket+hostname:port template for accessing a bucket: %(bucket)s.192.168.4.55:80
  Encryption password: 
  Path to GPG program: /usr/bin/gpg
  Use HTTPS protocol: False
  HTTP Proxy server name: 
  HTTP Proxy server port: 0

Test access with supplied credentials? [Y/n] Y
Please wait, attempting to list all buckets...
Success. Your access key and secret key worked fine :-)

Now verifying that encryption works...
Not configured. Never mind.

Save settings? [y/N] y
Configuration saved to '/root/.s3cfg'

     然后配置就保存到了/root/.s3cfg中,客户端配置就完成了
    
   9. 客户端如何使用软件
      9.1 查看信息(存储服务器下就有多个根文件夹,可以理解为一个根目录,然后下面又有其他目录)

# 查看整个对象存储服务器内的数据
[root@client ~]# s3cmd ls
# 查看某个具体的文件夹下的内容(s3是协议)
[root@client ~]# s3cmd ls s3://创建的根文件夹/文件夹下的具体目录

      9.2 创建根文件夹

[root@client ~]# s3cmd mb s3://创建的根文件夹

      9.3 上传文件(上传文件的时候指定的目录不存在就会自己创建,但是根文件夹必须是已经创建了)

[root@client ~]# s3cmd put 本地文件 s3://创建的根文件夹/文件夹下的具体目录

      9.4 下载文件

[root@client ~]# s3cmd get s3://创建的根文件夹/文件夹下的具体目录/具体文件名  本地下载的目标目录

      9.5 删除服务端的文件

[root@client ~]# s3cmd del s3://创建的根文件夹/文件夹下的具体目录/具体文件名


   思路综合:
      1. 部署Ceph存储集群,并且安装部署网关服务器
      2. 前往网关服务器修改端口,并且重启服务
      3. 服务端创建用户的验证信息
      4. 客户端安装专门的软件

猜你喜欢

转载自blog.csdn.net/Yu1543376365/article/details/83032938