美文网首页Ceph
Bluefs中的DB和WAL分区

Bluefs中的DB和WAL分区

作者: 落辰风雷 | 来源:发表于2018-10-26 21:13 被阅读11次

    BlueFS

    Bluefs是一个简易的日志型文件系统,它恰倒好处地实现了RocksDB::env所定义的接口。

    关于RocksDB::Env 是用来固化RocksDB运行过程中产生的.sst(Sorting string table,有序字符串表,键值对的磁盘存储形式)和.log(wal:write ahead log)文件。因为日志文件的功能是为了提升磁盘的写速度,所以在BlueFs的设计上支持将.sst和.log文件分开存储,以方便将.log文件单独使用速度更快的固态存储设备例如NVMSSD或者NVRRAM存储。

    BlueFs将整个BlueStore的存储空间分为三个层次 :

    • 慢速(Slow)空间
      主要用于存储对象数据,可由普通大容量机械盘提供,由BlueStore自行管理
    • 高速(DB)空间
      存储BlueStore内部产生的元数据,可由普通SSD提供,需求小于(慢速空间)。
    • 超高速(WAL)空间
      主要存储RocksDB内部产生的.log文件,可由SSD或者NVRAM等时延相较普通SSD更小的设备充当。容量需求和(高速空间)相当,同样由BlueFs直接管理。

    这里普及一下BlueStore相关的内容:BlueStore最早在Jewel版本中引入,用于取代传统的fileStore,作为新一代高性能对象存储后端。同时,它也考虑了未来的效率,同样会适配全ssd以及NVME SSD闪存,内部的存储中将高效索引的元数据引擎LevelDB 替换为RocksDB。
    这里的性能提升主要是之前的FileStore存储后端是通过操作系统自带的本地文件系统间接管理磁盘,所以所有针对Rados(ceph的核心底层,具有自愈、自管理的智能存储节点构建的高可靠、自治、分布式对象存储系统)的对象操作,都需要预先转换为能够被本地文件系统是被、符合posi语义的文件操作,这个过程效率较低。而BlueStore性能提升主要有两个方面:第一个也是最根本的原因 它选择直接向对象操作,从而大大得缩短了io路径;第二个是BuleStore选择将元数据和用户数据严格分离,因此BlueStore中的元数据可以单独采用高速固态存储设备例如 NVME SSD

    DB WAL分区

    BlueStore选择将DB 和WAL 分区交给BlueFs来使用,此时这两个分区分别存储BlueStore后端产生的元数据和日志文件,这样整个存储系统通过元数据对数据的操作效率极高,同时通过日志事务来维持系统的稳定性,整个系统相对来说稳定性就极高。

    具体DB WAL工作过程是如何通过BlueFs来组织的,一些实现上的细节建议大家阅读ceph:BlueFs.cc以及由中兴ceph团队写的书籍《ceph设计原理与实现》

    接下来说说如何在实际过程中进行如何将ceph的rados的后台db wal分区的部署在ssd上

    部署前提

    • 拥有ceph 环境 ceph -s查看
    • 存储设备上拥有至少1块hdd存储,以及一块ssd固态存储盘

    以下是我较为麻烦的手动操作,大家可以将这些部署命令转换为脚本,也是我接下来要写的脚本代码

    开始

     sgdisk -n 1:+2G:+50G /dev/sdv
     sgdisk -n 2:0:+2G /dev/sdv
    

    第一个命令是对盘符为sdv的固态ssd盘进行db分区的创建(可以通过lsblk查看ssd的盘符),大小为50G,这里的大小可以自行设定。当然在创建之前也要考虑好wal分区的大小,将以上第一个命令的+2G,改为你设定的大小。接着执行第二个,这个是要做为wal分区,所有开始数字为2,最后设定的大小为2G,执行好之后 可以通过命令lsblk来查看结果,如下:

    sdv                      65:80   0 447.1G  0 disk 
    鈹溾攢sdv1                   65:81   0    50G  0 part 
    鈹溾攢sdv2                   65:82   0     2G  0 part 
    

    如果没有显示分区,不用着急,先试着刷一下分区表使用命令partprobe
    接着

    chown ceph:ceph /dev/sdv1
    chown ceph:ceph /dev/sdv2
    chmod 660 /dev/sdv1
    chmod 660 /dev/sdv2
    

    更改这两个分区的用户组合组权限,使得/dev/sdv的盘支持ceph集群中所有用户的读写,即同一ceph集群中的其他节点设备也可以将元数据和日志文件存储在该节点的ssd盘上.最后想要确认一下结果可以ls -l查看一下

    [root@node1 ~]# ls -l /dev/sdv1
    brw-rw---- 1 ceph ceph 65, 81 Oct 26 19:29 /dev/sdv1
    

    接着:

    ceph-disk -v prepare /dev/sdb --block.db /dev/sdv1 --block.wal /dev/sdv2 
    ceph-disk -v activate /dev/sdb1
    

    这里主要是对磁盘进行准备和激活,可以通过命令看出,我们将/dev/sdb/的元数据的db文件指向sdv1,日志的wal文件指向sdv2存储

    最后的结果应该是拥有ceph的osd挂载点,同时osd是up状态.以下是我20块hdd盘每五个将db 和wal指向一个ssd作出的结果

    sdb                       8:16   0   5.5T  0 disk 
    鈹溾攢sdb1                    8:17   0   100M  0 part /var/lib/ceph/osd/ceph-0
    鈹斺攢sdb2                    8:18   0   5.5T  0 part 
    sdc                       8:32   0   5.5T  0 disk 
    鈹溾攢sdc1                    8:33   0   100M  0 part /var/lib/ceph/osd/ceph-1
    鈹斺攢sdc2                    8:34   0   5.5T  0 part 
    sdd                       8:48   0   5.5T  0 disk 
    鈹溾攢sdd1                    8:49   0   100M  0 part /var/lib/ceph/osd/ceph-2
    鈹斺攢sdd2                    8:50   0   5.5T  0 part 
    sde                       8:64   0   5.5T  0 disk 
    鈹溾攢sde1                    8:65   0   100M  0 part /var/lib/ceph/osd/ceph-3
    鈹斺攢sde2                    8:66   0   5.5T  0 part 
    sdf                       8:80   0   5.5T  0 disk 
    鈹溾攢sdf1                    8:81   0   100M  0 part /var/lib/ceph/osd/ceph-4
    鈹斺攢sdf2                    8:82   0   5.5T  0 part 
    sdg                       8:96   0   5.5T  0 disk 
    鈹溾攢sdg1                    8:97   0   100M  0 part /var/lib/ceph/osd/ceph-5
    鈹斺攢sdg2                    8:98   0   5.5T  0 part 
    sdh                       8:112  0   5.5T  0 disk 
    鈹溾攢sdh1                    8:113  0   100M  0 part /var/lib/ceph/osd/ceph-6
    鈹斺攢sdh2                    8:114  0   5.5T  0 part 
    sdi                       8:128  0   5.5T  0 disk 
    鈹溾攢sdi1                    8:129  0   100M  0 part /var/lib/ceph/osd/ceph-7
    鈹斺攢sdi2                    8:130  0   5.5T  0 part 
    sdj                       8:144  0   5.5T  0 disk 
    鈹溾攢sdj1                    8:145  0   100M  0 part /var/lib/ceph/osd/ceph-8
    鈹斺攢sdj2                    8:146  0   5.5T  0 part 
    sdk                       8:160  0   5.5T  0 disk 
    鈹溾攢sdk1                    8:161  0   100M  0 part /var/lib/ceph/osd/ceph-9
    鈹斺攢sdk2                    8:162  0   5.5T  0 part 
    sdl                       8:176  0   5.5T  0 disk 
    鈹溾攢sdl1                    8:177  0   100M  0 part /var/lib/ceph/osd/ceph-10
    鈹斺攢sdl2                    8:178  0   5.5T  0 part 
    sdm                       8:192  0   5.5T  0 disk 
    鈹溾攢sdm1                    8:193  0   100M  0 part /var/lib/ceph/osd/ceph-11
    鈹斺攢sdm2                    8:194  0   5.5T  0 part 
    sdn                       8:208  0   5.5T  0 disk 
    鈹溾攢sdn1                    8:209  0   100M  0 part /var/lib/ceph/osd/ceph-12
    鈹斺攢sdn2                    8:210  0   5.5T  0 part 
    sdo                       8:224  0   5.5T  0 disk 
    鈹溾攢sdo1                    8:225  0   100M  0 part /var/lib/ceph/osd/ceph-13
    鈹斺攢sdo2                    8:226  0   5.5T  0 part 
    sdp                       8:240  0   5.5T  0 disk 
    鈹溾攢sdp1                    8:241  0   100M  0 part /var/lib/ceph/osd/ceph-14
    鈹斺攢sdp2                    8:242  0   5.5T  0 part 
    sdq                      65:0    0   5.5T  0 disk 
    鈹溾攢sdq1                   65:1    0   100M  0 part /var/lib/ceph/osd/ceph-15
    鈹斺攢sdq2                   65:2    0   5.5T  0 part 
    sdr                      65:16   0   5.5T  0 disk 
    鈹溾攢sdr1                   65:17   0   100M  0 part /var/lib/ceph/osd/ceph-16
    鈹斺攢sdr2                   65:18   0   5.5T  0 part 
    sds                      65:32   0   5.5T  0 disk 
    鈹溾攢sds1                   65:33   0   100M  0 part /var/lib/ceph/osd/ceph-17
    鈹斺攢sds2                   65:34   0   5.5T  0 part 
    sdt                      65:48   0   5.5T  0 disk 
    鈹溾攢sdt1                   65:49   0   100M  0 part /var/lib/ceph/osd/ceph-18
    鈹斺攢sdt2                   65:50   0   5.5T  0 part 
    sdu                      65:64   0   5.5T  0 disk 
    鈹溾攢sdu1                   65:65   0   100M  0 part /var/lib/ceph/osd/ceph-19
    鈹斺攢sdu2                   65:66   0   5.5T  0 part 
    sdv                      65:80   0 447.1G  0 disk 
    鈹溾攢sdv1                   65:81   0    50G  0 part 
    鈹溾攢sdv2                   65:82   0     2G  0 part 
    鈹溾攢sdv3                   65:83   0    50G  0 part 
    鈹溾攢sdv4                   65:84   0     2G  0 part 
    鈹溾攢sdv5                   65:85   0    50G  0 part 
    鈹溾攢sdv6                   65:86   0     2G  0 part 
    鈹溾攢sdv7                   65:87   0    50G  0 part 
    鈹溾攢sdv8                   65:88   0     2G  0 part 
    鈹溾攢sdv9                   65:89   0    50G  0 part 
    鈹斺攢sdv10                  65:90   0     2G  0 part 
    sdw                      65:96   0 447.1G  0 disk 
    鈹溾攢sdw1                   65:97   0    50G  0 part 
    鈹溾攢sdw2                   65:98   0     2G  0 part 
    鈹溾攢sdw3                   65:99   0    50G  0 part 
    鈹溾攢sdw4                   65:100  0     2G  0 part 
    鈹溾攢sdw5                   65:101  0    50G  0 part 
    鈹溾攢sdw6                   65:102  0     2G  0 part 
    鈹溾攢sdw7                   65:103  0    50G  0 part 
    鈹溾攢sdw8                   65:104  0     2G  0 part 
    鈹溾攢sdw9                   65:105  0    50G  0 part 
    鈹斺攢sdw10                  65:106  0     2G  0 part 
    sdx                      65:112  0 447.1G  0 disk 
    鈹溾攢sdx1                   65:113  0    50G  0 part 
    鈹溾攢sdx2                   65:114  0     2G  0 part 
    鈹溾攢sdx3                   65:115  0    50G  0 part 
    鈹溾攢sdx4                   65:116  0     2G  0 part 
    鈹溾攢sdx5                   65:117  0    50G  0 part 
    鈹溾攢sdx6                   65:118  0     2G  0 part 
    鈹溾攢sdx7                   65:119  0    50G  0 part 
    鈹溾攢sdx8                   65:120  0     2G  0 part 
    鈹溾攢sdx9                   65:121  0    50G  0 part 
    鈹斺攢sdx10                  65:122  0     2G  0 part 
    sdy                      65:128  0 447.1G  0 disk 
    鈹溾攢sdy1                   65:129  0    50G  0 part 
    鈹溾攢sdy2                   65:130  0     2G  0 part 
    鈹溾攢sdy3                   65:131  0    50G  0 part 
    鈹溾攢sdy4                   65:132  0     2G  0 part 
    鈹溾攢sdy5                   65:133  0    50G  0 part 
    鈹溾攢sdy6                   65:134  0     2G  0 part 
    鈹溾攢sdy7                   65:135  0    50G  0 part 
    鈹溾攢sdy8                   65:136  0     2G  0 part 
    鈹溾攢sdy9                   65:137  0    50G  0 part 
    鈹斺攢sdy10                  65:138  0     2G  0 part
    

    查看osd状态,这些是我已经创建好crush map 后的,本应该是显示up状态,在crush map之外

     -1       20.00000 root default                             
     -7        5.00000     host host1                           
      0   hdd  1.00000         osd.0        up  1.00000 1.00000 
      1   hdd  1.00000         osd.1        up  1.00000 1.00000 
      2   hdd  1.00000         osd.2        up  1.00000 1.00000 
      3   hdd  1.00000         osd.3        up  1.00000 1.00000 
      4   hdd  1.00000         osd.4        up  1.00000 1.00000 
     -8        5.00000     host host2                           
      5   hdd  1.00000         osd.5        up  1.00000 1.00000 
      6   hdd  1.00000         osd.6        up  1.00000 1.00000 
      7   hdd  1.00000         osd.7        up  1.00000 1.00000 
      8   hdd  1.00000         osd.8        up  1.00000 1.00000 
      9   hdd  1.00000         osd.9        up  1.00000 1.00000 
     -9        5.00000     host host3                           
     10   hdd  1.00000         osd.10       up  1.00000 1.00000 
     11   hdd  1.00000         osd.11       up  1.00000 1.00000 
     12   hdd  1.00000         osd.12       up  1.00000 1.00000 
     13   hdd  1.00000         osd.13       up  1.00000 1.00000 
     14   hdd  1.00000         osd.14       up  1.00000 1.00000 
    -10        5.00000     host host4                           
     15   hdd  1.00000         osd.15       up  1.00000 1.00000 
     16   hdd  1.00000         osd.16       up  1.00000 1.00000 
     17   hdd  1.00000         osd.17       up  1.00000 1.00000 
     18   hdd  1.00000         osd.18       up  1.00000 1.00000 
     19   hdd  1.00000         osd.19       up  1.00000 1.00000 
    

    至此我们的db wal 分区部署到此就麻烦得告一段落,内部实现细节还需持续学习了解

    脚本代码一定要好好学学,对于一些集中性的操作写在脚本中,会极为方便,也能提升自己的工作效率。

    相关文章

      网友评论

        本文标题:Bluefs中的DB和WAL分区

        本文链接:https://www.haomeiwen.com/subject/eteiaftx.html