ceph和Swift可以一起安装吗 ceph和fastdfs

admin2024-06-01  15

一、概述

1.什么是分布式文件系统

分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连.分布式文件系统的设计基于客户机/服务器模式

2.常见分布式文件系统

- Lustre

- Hadoop

- FastDFS

- Ceph

- ClusterFS

3.什么是Ceph

- Ceph是一个分布式文件系统

- 具有高扩展,高可用,高性能的特点

- Ceph可以提供对象存储,块存储,文件系统存储

- Ceph可以提供PB级别的存储空间(PB>TB>GB) 1PB=1024*1TB=1024*1024*GB

4.Ceph组件

- OSDs:存储设备

- Monitors:集群监控组件

- RadosGateway(RGW):对象存储网关

- MDSs:存放文件系统的元数据(对象存储和块存储不需要该组件)

- Client:客户端,需要安装ceph支持组件

如图,从右边向左边看,osd是ceph最基础的存储设备.osd直接使用存储磁盘,在osd的基础上.我们可以将数个osd合并成一个存储池pool,有了存储池之后.我们将提供一个对外的接口,以便客户端写入数据,那这个接口可以是块存储rbd,于是我们将块存储格式化,将其挂载到目录下.这样我们就可以写入数据了

ceph和Swift可以一起安装吗 ceph和fastdfs,ceph和Swift可以一起安装吗 ceph和fastdfs_镜像快照,第1张

5.细谈对象存储,块存储,文件系统存储

- 对象存储 : 也就是通常意义的键值存储,其接口就是简单的GET、PUT、DEL 和其他扩展,代表主要有 Swift 、S3 以及 Gluster 等;
 - 块存储 这种接口通常以 QEMU Driver 或者 Kernel Module 的方式存在,这种接口需要实现 Linux 的 Block Device 的接口或者 QEMU 提供的 Block Driver 接口,如 Sheepdog,AWS 的 EBS,青云的云硬盘和阿里云的盘古系统,还有 Ceph 的 RBD(RBD是Ceph面向块存储的接口)。在常见的存储中 DAS、SAN 提供的也是块存储;
 - 文件存储 : 通常意义是支持 POSIX 接口,它跟传统的文件系统如 Ext4 是一个类型的,但区别在于分布式存储提供了并行化的能力,如 Ceph 的 CephFS (CephFS是Ceph面向文件存储的接口),但是有时候又会把 GlusterFS ,HDFS 这种非POSIX接口的类文件存储接口归入此类。当然 NFS、NAS也是属于文件系统存储;

 

二、安装Ceph,搭建Ceph集群

1.拓扑图

准备四台主机,在node1上安装Monitors监控服务.

ceph和Swift可以一起安装吗 ceph和fastdfs,ceph和Swift可以一起安装吗 ceph和fastdfs_ceph和Swift可以一起安装吗_02,第2张

ceph和Swift可以一起安装吗 ceph和fastdfs,ceph和Swift可以一起安装吗 ceph和fastdfs_镜像扩容_03,第3张

2.yum仓库支持

需要准备一张ceph镜像

[下载地址ceph.ios] 链接: https://pan.baidu.com/s/1LYzXXUaDTq7lNP5rWqHj4Q 提取码: 5vac 

 

需要配置yum源

1. [root@node1 ~]# mkdir /mnt/ceph
2. [root@node1 ~]# mount ceph10.ios /mnt/ceph                                    #将镜像挂载到目录下
3. [root@node1 ~]# cat /etc/yum.repos.d/ceph.repo
4. [mon]
5. name=mon
6. baseurl=ftp://192.168.4.254/ceph/MON
7. gpgcheck=0
8. [osd]
9. name=osd
10. baseurl=ftp://192.168.4.254/ceph/OSD
11. gpgcheck=0
12. [tools]
13. name=tools
14. baseurl=ftp://192.168.4.254/ceph/Tools
15. gpgcheck=0
16. [root@node1 ~]# yum repolist                #验证YUM源软件数量
17. 源标识            源名称                    状态
18. Dvd                redhat                    9,911
19. Mon                mon                        41
20. Osd                osd                        28
21. Tools            tools                    33
22. repolist: 10,013
23. [root@node1 ~]# for i in client node1 node2 node3
24. do
25. scp /etc/yum.repos.d/ceph.repo $i:/etc/yum.repos.d/
26. done

3.建立免密登录

自己也需要发送

    1. [root@node1 ~]# ssh-keygen -f /root/.ssh/id_rsa -N ''  
    2. [root@node1 ~]# for i in 10 11 12 13
    3. do
    4. ssh-copy-id 192.168.4.$i
    5. done

    4.配置域名解析

    /etc/hosts解析的域名必须与本机主机名一致

    1. [root@node1 ~]# cat /etc/hosts
    2. ... ...
    3. 192.168.4.10 client
    4. 192.168.4.11     node1
    5. 192.168.4.12     node2
    6. 192.168.4.13     node3
    7. [root@node1 ~]# for i in 10 11 12 13                  #发送给其他主机
    8.  do
    9. scp root@192.168.4.$i:/etc/yum.repos.d/
    10. done

    5.配置时间同步

    每台主机都必须要配置

      1. [root@node1 ~]# vim /etc/chrony.conf      #添加一个共同时间节点
      2. … …
      3. server  s1a.time.edu.cn iburst         #iburst参数设置重启服务后尽快同步时间
      4.  
      5.  
      6. [root@node1 ~]# for i in client node1 node2 node3
      7. do
      8. scp /etc/chrony.conf $i:/etc/
      9. ssh $i "systemctl restart chronyd"
      10. done

      6.准备存储磁盘

      准备2张20G的磁盘

      我使用的是Linux的KVM虚拟平台,添加磁盘非常简单(添加硬件,添加磁盘即可) 

      使用VMware也非常简单

      三、部署ceph集群

      1.node1配置

      在node1安装部署Ceph服务的软件

        1. [root@node1 ~]# yum -y install ceph-deploy        
        2. [root@node1 ~]# ceph-deploy --help                     #可以查看Ceph使用命令
        3. [root@node1 ~]# ceph-deploy mon --help
        4. [root@node1 ~]# mkdir ceph-cluster                #创建目录用于保存ceph生成的配置文件
        5. [root@node1 ~]# cd ceph-cluster/

        2.node2,node3配置

        给所有节点安装ceph相关软件包。必须在node1的ceph-cluster下执行命令

          1. [root@node1 ceph-cluster]# for i in node1 node2 node3     #安装相关服务
          2. do
          3. ssh $i "yum -y install ceph-mon ceph-osd ceph-mds ceph-radosgw"
          4. done
          5. #创建Ceph集群配置,在ceph-cluster目录下生成Ceph配置文件。
          6. [root@node1 ceph-cluster]# ceph-deploy new node1 node2 node3 
          7. #初始化所有节点的mon服务,也就是启动mon服务(主机名解析必须对)。
          8. [root@node1 ceph-cluster]# ceph-deploy mon create-initial

          3.创建OSD存储空间

          初始化清空磁盘数据和创建OSD存储空间(仅node1操作即可)。

          1. [root@node1 ceph-cluster]#lsblk
          2. [root@node1 ceph-cluster]# ceph-deploy disk zap node1:vdb  #初始化清空磁盘数据
          3. [root@node1 ceph-cluster]# ceph-deploy disk zap node2:vdb
          4. [root@node1 ceph-cluster]# ceph-deploy disk zap node3:vdb
          5. [root@node1 ceph-cluster]# ceph-deploy osd create node1:vdb  #创建OSD存储空间
          6. [root@node1 ceph-cluster]# ceph-deploy osd create node2:vdb
          7. [root@node1 ceph-cluster]# ceph-deploy osd create node3:vdb

          4.查看ceph集群信息

          1. [root@node1 ~]# ceph -s
          2.     cluster 9074897d-8da1-4a29-bb64-c039cbdefe0f
                health HEALTH_OK
                monmap e1: 3 mons at {ceph1=192.168.1.11:6789/0,ceph2=192.168.1.12:6789/0,ceph3=192.168.1.13:6789/0}
                       election epoch 4, quorum 0,1,2 ceph1,ceph2,ceph3
                osdmap e18: 3 osds: 3 up, 3 in
                       flags sortbitwise
                 pgmap v1481: 64 pgs, 1 pools, 14756 kB data, 23 objects
                       134 MB used, 45912 MB / 46046 MB avail
                             64 active+clean
          1.  

          5.创建镜像

          我们使用ceph的块存储

          ceph镜像支持很多功能,但很多是操作系统不支持的,我们只开启layering。

          1. [root@node1 ~]# ceph osd lspools     #查看存储池
          2. 0 rbd,
          3. #jacob为创建的镜像名称,可以为任意字符。
          4. #--image-feature参数指定我们创建的镜像有哪些功能,layering是开启COW功能。
          5. [root@node1 ~]# rbd create image1 --image-feature layering --size 10G
          6. [root@node1 ~]# rbd list
          7. image1
          8. [root@node1 ~]# rbd info image1            #查看image1详细
          9. rbd image 'image1':
          10. 10240 MB
          11.     order 22 (4096 kB objects)
          12.     block_name_prefix: rbd_data.d3aa2ae8944a
          13.     format: 2
          14.     features: layering

          6.客户端使用存储块

          客户端通过KRBD访问

          1. #客户端需要安装ceph-common软件包
          2. #拷贝配置文件(否则不知道集群在哪)
          3. #拷贝连接密钥(否则无连接权限)
          4. [root@client ~]# yum -y install ceph-common
          5. [root@client ~]# scp 192.168.4.11:/etc/ceph/ceph.conf /etc/ceph/
          6. [root@client ~]# scp 192.168.4.11:/etc/ceph/ceph.client.admin.keyring  /etc/ceph/
          7. [root@client ~]#rbd list                   #查看镜像池
          8. demo-image
          9. [root@client ~]# rbd map imges              #生成磁盘块     
          10. [root@client ~]# lsblk
          11. rbd0   252:0    0  10G  0 disk
          12. [root@client ~]# rbd showmapped
          13. id pool image snap device
          14. 0 rbd image1 - /dev/rbd0
          15. [root@client ~]# mkfs.xfs /dev/rbd0           #格式化分区,只有第一次使用需要格式化
          16. [root@client ~]# mount /dev/rbd0 /mnt/  #挂载使用
          17. [root@client ~]# echo "test" > /mnt/test.txt

          7.客户端撤销磁盘映射

            1. [root@client ~]# umount /mnt
            2. [root@client ~]# rbd showmapped
            3. id pool image snap device
            4. 0 rbd jacob - /dev/rbd0
            5. //语法格式:
            6. [root@client ~]# rbd unmap /dev/rbd0

             

             

            四、镜像扩容

            1.扩容容量

            1. [root@node1 ~]# rbd info jacob
            2. rbd image 'demo-image':
                 size 10240 MB in 3840 objects
                 order 22 (4096 kB objects)
                 block_name_prefix: rbd_data.102e2ae8944a
                 format: 2
                 features: layering
                 flags: 3. [root@node1 ~]# rbd resize --size 15G jacob
            4. [root@node1 ~]# rbd info jacob
            5. rbd image 'demo-image':
                 size 15360 MB in 3840 objects
                 order 22 (4096 kB objects)
                 block_name_prefix: rbd_data.102e2ae8944a
                 format: 2
                 features: layering
                 flags: 6. [root@client mnt]# lsblk                 #看到客户端的磁盘块也扩大了
            7. rbd0   252:0    0  15G  0 disk /mnt

            1.  

            2.缩小容量

              1. [root@node1 ~]# rbd resize --size 7G jacob --allow-shrink #--allow-shrink允许缩小
              2. [root@node1 ~]# rbd info image

              五、创建镜像快照

              1.查看镜像快照(默认所有镜像都没有快照)

                1. [root@node1 ~]# rbd snap ls jacob

                2.给镜像创建快照

                  1. [root@node1 ~]# rbd snap create image1 --snap image1-snap1    #--snap后接快照名
                  2. #为image1镜像创建快照,快照名称为jacob-snap1
                  3. [root@node1 ~]# rbd snap ls jacob
                  4. SNAPID NAME SIZE
                  5. 4 jacob-snap1 15360 MB

                  3.删除客户端写入的测试文件

                    1. [root@client ~]# rm -rf /mnt/test.txt
                    2. [root@client ~]# umount /mnt

                    4. 还原快照

                      1. [root@node1 ~]# rbd snap rollback image1 --snap image1-snap1
                      2. #客户端重新挂载分区
                      3. [root@client ~]# mount /dev/rbd0 /mnt/
                      4. [root@client ~]# ls /mnt

                      六、快照克隆

                      1.克隆快照

                        1. [root@node1 ~]# rbd snap protect image1 --snap image1-snap1       #生成快照,并且保护镜像
                        2. [root@node1 ~]# rbd snap rm image1 --snap image1-snap1       #会失败,提示被保护
                        3. 2019-10-25 19:38:04.570601 7f5e7d9c1d80 -1 librbd::Operations: snapshot is protected
                        4. #使用image1镜像的快照image1-snap1克隆一个新的名称为image1-clone的镜像
                        5. [root@node1 ~]# rbd clone image1 --snap image1-snap1 image1-clone --image-feature layering

                        2.查看克隆镜像与父镜像快照的关系

                        1. [root@node1 ~]# rbd info image1-clone
                        2. rbd image 'image1-clone':
                        3.     size 15360 MB in 3840 objects
                        4.     order 22 (4096 kB objects)
                        5.     block_name_prefix: rbd_data.d3f53d1b58ba
                        6.     format: 2
                        7.     features: layering
                        8.     flags:
                        9.  parent: rbd/image1@image1-snap1
                        10. #克隆镜像很多数据都来自于快照链
                        11. #如果希望克隆镜像可以独立工作,就需要将父快照中的数据,全部拷贝一份,但比较耗时!!!
                        12. [root@node1 ~]# rbd flatten jacob-clone
                        13. [root@node1 ~]# rbd info jacob-clone
                        14. rbd image 'jadob-clone':
                        15.     size 15360 MB in 3840 objects
                        16.     order 22 (4096 kB objects)
                        17.     block_name_prefix: rbd_data.d3f53d1b58ba
                        18.     format: 2
                        19.     features: layering
                        20.     flags:
                        21. #注意,父快照信息没了!
                        22. [root@node1 ~]# rbd snap unprotect jacob --snap jacob-snap1 #取消快照保护
                        23. [root@node1 ~]# rbd snap rm jacob --snap jacob-snap1         #可以删除快照

                         

                        本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!