当前位置:首页 > SEO优化 > 正文

优化数据库的八种方法(sql优化的几种方法)

    根据可靠性计算公式,恢复时间应在1-2天内,以满足11个9。但是现有的两种回收方法各有不足,不能很好的满足需求,所以尝试探索一种新的回收方法。  

  

    目前ceph的回收有原位回收和全回收两种,但两者都有其缺陷。  

  

    磁盘出现故障时,ceph对应的osd不会从集群中取出,集群数据也不会恢复。在更换新磁盘之前,原始坏磁盘上的数据将被恢复到新磁盘上。-原位回收的缺点  

  

    1)时间慢  

  

    按照原来的恢复速度,大约15M/s,磁盘的最大写入空间是95%:  

  

    8T磁盘(实际空间7.3T),恢复时间需要5.6天;16T磁盘,恢复时间需要11天  

  

    2)可扩展性  

  

    没有可扩展性。随着单个磁盘容量的增加,恢复时间会越来越长。  

  

    当磁盘坏了,ceph对应的osd出簇,然后簇开始通过其他磁盘恢复坏磁盘上的数据。恢复完成后,当新磁盘添加到群集时,刚才恢复的数据将移回新磁盘。  

  

    全球复苏的缺点  

  

    1)物理池原有的碾压规则已经改变,会有冗余数据迁移,影响很大。  

  

    2)可扩展性-一般  

  

    3)当群集已满时,恢复可能会导致某些osd使用率进一步增加,甚至超过满阈值  

  

      

  

      

  

    如上图所示,线路上同一机房的所有ceph集群可以共享一个备用机器用于恢复优化,比如在线ceph集群1的osd挂起需要恢复时,可以从备用机器;取出几个硬盘,开始时每个集群可以分成几个恢复备用磁盘。简而言之,备用磁盘可以是回收,以帮助他们恢复。下面将描述具体的恢复逻辑。  

  

    对于在线ceph集群,可以准备几个备用磁盘。当osd出现故障时,故障osd中的pg可以迁移到这些备用磁盘。  

  

    如下图所示:root meta、default和whs是集群中的物理根。根目录是组成的备用磁盘  

  

    例如:osd.44对应的硬盘出现故障时,osd.44中的所有pgs都可以迁移到standy下的osd。添加新磁盘后,您可以构建与之前相同的“粉碎结构”,并从备用磁盘中交换数据。  

  

      

://pic1.zhimg.com/v2-d63aa607bacb5498a0eba21d5d5d6234_b.jpg"/>

  

    ceph中原生提供了pgupmap工具,可以指定PG映射到指定的osd(ceph osd pg-upmap pgid osdid osdid osdid.),但是分析发现,原生pgupmap工具只支持把pg映射到当前root下(而我们是不能把备用盘加到以前的root 下面的,因为这样会破坏原先的cursh)。 通过修改相关源码,可以让pgupmap支持其它root,进而可以支持该备用盘功能。

  

    1.ceph集群中新加root standby

  

    root standby即是承载所有备用盘的root

  

    2.初始化备用机器上的备用盘

  

    通过ceph-deploy prepare + activate把备用盘初始化进集群。默认情况,新osd会到root default下。

  

    3.移动所有备用盘对应的osd到root standby4.回收备用盘

  

    如果想回收备用盘,可以 先通过ceph osd purge osdid清除该osd与集群的联系,然后格式化备用盘磁盘即可。 回收备用盘可以通过命令ceph pg ls-by-osd osdid来确保该备用盘此时未承载pg。

  

    5.pg映射6.pg解映射

  

    上面总体方案中提到备用机器上的备用盘可以在最开始时便分摊给各个Ceph集群,或者是在使用时临时添加到root standby。临时添加到root standy不是很方便,毕竟每次都需要到安装目录去初始化osd,不方便运维,所以选择开始的时候给每个集群分几个备用盘,具体加备用盘的指令见上文。

  

    由上描述可知,ceph中原生提供的pgupmap工具只支持把pg映射到当前root下。但是备用盘必须放在其他root,所以需要增加对其他root的支持。

  

    经分析源码发现,pgupmap指定pg映射时,会通过所有monitor决议,在决议之前便需要先形成一个要提交的议案,而在形成议案的过程中,会判断指定的osd有没有在同一个副本域的,或者是指定的osd属不属于该物理池,如果不属于该物理池,那么本次指定的映射的决议时会被取消的。

  

    所以我们需要做的就是当指定的osd不属于该PG对应的物理池时,让本次议案依然能够生效。

  

    另外,新增选项osd_force_pgupmap,该选项默认为fasle。只有当该选项为true时,上述PG映射才能成功。

  

    具体逻辑如下图,红色部分是新增逻辑:

  

    

  

    为了方便测试对比,限制恢复速度,具体参数如下:

  

    使用1个备用盘进行恢复(类似于原地恢复的能力)

  

    recovery: 4.64MiB/s, 1objects/s

  

    使用3个备用盘进行恢复

  

    recovery: 14.9MiB/s, 3objects/s

  

    从测试结果可以看出,恢复能力提升是与备用盘的数量成正比的,由于1个备用盘便类似于原地恢复的能力,所以使用N个备用盘,恢复能力理论上是原地恢复的N倍。

  

    优点

  

    1)恢复能力线性可扩展

  

    2)不会有多余迁移

  

    3)全程不会破坏原来物理池的crush规则

  

    4)可控性

  

    5)备用盘没有其它PG,也就没有其它io的影响

  

    缺点

  

    需增加备用机器或者备用盘。但是1台备用机器是可以供线上同一机房所有集群使用的。

  

    1.备用盘至少需要几个

  

    由上面测试数据可知,恢复速度与备用盘数量是成正比的。至少需要几个备用盘才能满足我们对可靠性的要求(不同容量类型的盘),这个需要进一步测试评估。

  

    备用盘至少需要几个

  

    由上面测试数据可知,恢复速度与备用盘数量是成正比的。至少需要几个备用盘才能满足我们对可靠性的要求(不同容量类型的盘),这个需要进一步测试评估。

  

    使用过程中万一备用盘坏了怎么办?

  

    备用盘只是临时使用的,当恢复结束后,其是无任何作用的,所以坏了无所谓;当备用盘参与恢复过程中坏了,那么只需把该PG对应的映射再映射到其他备用盘(ceph osd pg-upmap pgid osdid osdid osdid ...)。

  

    pg解除映射,此时只有两副本参与恢复,还是三副本均可以参与恢复?

  

    pg解除映射后,备用盘上依然是有数据的,当需要时,备用盘上的pg副本也可以参与恢复。

有话要说...