☁️ 第四章 构建云服务的技术
📄 一句话概括

数据中心用的存储,核心是三件事:RAID 把多块盘拼成一块又大又不那么容易丢的盘、多路径让服务器到存储的连线断一条也不影响、快照让数据能回到某一时刻;而这三件事之所以都属于【虚拟化的配套】,是因为虚拟机要能被搬走,它的磁盘就不能长在某一台机器上。

📝 本节和前面几节的关系

网络的虚拟化讲完了(4-11 ~ 4-13),这一节转向存储。

第一章的 云服务的存储设备 已经讲过三种连接方式(DAS/SAN/NAS)——那一节讲的是【存储怎么接】,这一节讲接上之后在存储这一侧要做什么(RAID、多路径、快照)。两节合起来,才是数据中心存储的完整画面。

一、为什么存储是虚拟化必须配的一环

先把这件事的因果说清楚,否则会把 RAID 当成一个孤立的知识点。

虚拟化带来了一个能力:虚拟机可以从一台物理机搬到另一台(这台机器要维护、要升级、要换硬件时)。而这件事能不能做,取决于一个前提:

虚拟机的磁盘文件,必须在【两台物理机都能看到】的地方。

所以【共享存储】不是可选件,是虚拟化集群的必需品。 而以下三件事,正是共享存储这一侧必须做好的:

要解决什么 手段 不做会怎样
单块盘会坏 RAID 一块盘坏就全完
单条线会断 多路径 一条链路故障就断连
数据会被误改误删 快照 只能事后恢复备份,丢掉一段时间的数据

二、RAID:把多块盘拼成一块

RAID 的本质是用多块盘换【更大的容量】或【更高的可靠性】或【更快的速度】——三者只能选两个:

级别 可用容量 可坏几块盘 特点
RAID 0 32 TB 0 块 最快、最危险,任意一块坏就全丢
RAID 1 16 TB 1 块 镜像,容量只用一半
RAID 5 28 TB 1 块 最常用的折中,写性能受校验影响
RAID 6 24 TB 2 块 多一份校验,重建期间更安全
RAID 10 16 TB 最多 4 块 镜像加条带,性能与安全兼顾

(这是 8 块 4 TB 盘的例子,下面 Demo 里有完整算式。)

这张表里最需要理解的是 RAID 5 和 RAID 6 的取舍:

为什么 RAID 6 变重要了:因为盘越来越大,重建越来越慢。一块 4 TB 的盘重建要几个小时,这几小时里阵列处于【无保护】状态——盘越大,这个窗口越长,第二次故障的概率就越高。所以在大容量盘上,RAID 6 的额外代价变得值得。

三、动手 Demo:算清容量与容错

看到什么算成功:

==================================================================================================
【Demo 14】面向数据中心的存储:RAID 把八块盘变成一块
==================================================================================================
  用 8 块 4 TB 硬盘做例子,看几种 RAID 各自的容量与容错。

  级别          可用容量      可坏几块盘    特点
  --------------------------------------------------------------------------------------------
  RAID 0        32 TB         0 块          最快、最危险,任意一块坏就全丢
  RAID 1        16 TB         1 块          镜像,容量只用一半
  RAID 5        28 TB         1 块          最常用的折中,写性能受校验影响
  RAID 6        24 TB         2 块          多一份校验,重建期间更安全
  RAID 10       16 TB         最多 4 块     镜像加条带,性能与安全兼顾
  --------------------------------------------------------------------------------------------
  容量是这么算出来的(8 块 × 4 TB = 32 TB 原始):

    RAID 0:32 × 8/8   = 32 TB
    RAID 1:32 × 4/8   = 16 TB
    RAID 5:32 × 7/8   = 28 TB(少一块校验盘)
    RAID 6:32 × 6/8   = 24 TB(少两块校验盘)
    RAID 10:32 × 4/8  = 16 TB(镜像掉一半)

  数据中心里另外两件事配套出现:
    多路径:服务器到存储之间接两条以上的线,一条断了不影响使用
    快照:某一时刻的数据副本,出问题能回到那一刻(注意它不是备份,
          因为和原数据在同一套存储里,存储整体损坏时一起丢)

读结果:

30 秒实验

在 Windows 上打开【磁盘管理】(或 Linux 上 cat /proc/mdstat、macOS 上 diskutil list),做一件事:

看有没有任何一个卷的容量【小于它所用物理盘的容量之和】。

比如:两块 1 TB 硬盘组成了 1 TB 的卷——那说明它用了镜像(RAID 1 类);如果组成了 2 TB,那说明它在用容量换速度或备份。

做完这个你会看到一个具体事实:RAID 的代价是【你看得见的容量】换成【你看不见的可靠性】——它不会出现在任何界面上的醒目位置,只在某一块盘坏掉的那天才体现出价值。

常见误区

  1. 错误:有了 RAID,数据就安全了。——纠正:RAID 防的是【盘坏】,不是【数据丢】。它会原样保存你所有的错误——误删文件的动作也会被同步到所有盘上;病毒加密的文件也一样。RAID 提供的叫【可用性】,不叫【备份】。这两件事的差别在出事那天会变得非常清楚。

  2. 错误:快照就是备份,可以拿它来恢复数据。——纠正:快照解决的是【快】,不是【安全】。它确实能在几秒内把数据恢复到某个时刻,而且对性能影响小——所以它是应对【刚改错了、马上要回来】这类问题的好工具。但它与原数据通常在同一套存储里,这套存储整体损坏、被攻击、被误删时,快照一起丢。所以正规做法是:快照用来应急,备份用来保命,缺一不可。

  3. 错误:既然 RAID 5 最常用,那就所有场景都用 RAID 5。——纠正:RAID 级别要按【数据的重要程度】和【读写特征】分别选。数据库这类随机写密集的负载,RAID 5 的写惩罚明显(每次写都要读旧数据、算校验、写新数据与校验),往往选 RAID 10;归档类冷数据写入少、要容量,RAID 6 更合适;而系统盘、临时盘这些【坏了重建就行】的,RAID 0 反而合理。没有通用答案,只有匹配。

  4. 错误:多路径只是多接一根线,是做冗余用的。——纠正:它同时还提升性能。因为多条链路可以同时传输,带宽是叠加的(具体怎么分看算法)。所以多路径既保可用性(断一条不影响),又提高吞吐——这是【冗余部件】里少数能同时改善性能和可靠性的。这也解释了为什么存储网络里,多路径几乎是标配而不是选项。

自测三问(点开对答案) 1. 为什么虚拟化集群【必须】用共享存储? —— 因为**虚拟化的核心能力之一【迁移】依赖它**。迁移的本质是【这台虚拟机换一台物理机继续跑】,而虚拟机的磁盘就是它的数据。**如果磁盘只在那台物理机上,那换个机器就是换了个没有数据的空壳**,迁移无从谈起。所以共享存储不是为了【性能】或【容量】,而是**为了一项虚拟化的基础能力提供一个前提**。 2. RAID 5 和 RAID 6 的容量只差一块盘,为什么大容量盘时代更倾向 RAID 6? —— 因为**决定风险的不是【坏盘的概率】,是【重建期间坏第二块盘的概率】**。重建期间阵列处于无保护状态,**这扇窗越长,第二次故障的机会越多**;而**盘越大,重建越慢**(4 TB 要重建几小时)。所以盘容量增长时,**RAID 5 的风险是上升的,而 RAID 6 用一块盘的容量把这段风险挡住了**——这笔交易随着盘变大而越来越划算。 3. 【快照不是备份】这句话,怎么用一句话说清? —— **备份必须能扛住【整台存储坏掉】,而快照和原数据在同一台存储里**。所以判断一个东西是不是备份,只看一个问题:**如果存放它的那套存储整个没了,它还在不在?** 在,就是备份;不在,就只是快照。**这个判据也适用于其它托管在云上的数据**——同一家云、同一个区域里的【副本】,不叫备份。

相关笔记