大话存储1

第一章 盘古开天 (存储历史,存储技术)

1. 存储的发展

竹筒 -> 纸张 -> 选数管 -> 穿孔卡 -> 穿孔纸带 -> 磁带 ->  磁鼓存储器 -> 硬盘驱动器 -> 软盘 -> 光盘 -> Flash芯片 -> 卡式存储 -> 硬盘阵列 -> 大型网络化硬盘阵列

第二章 IO大法  (IO,总线,网中之网)

由于CPU和内存足够快,因此有单独的总线进行连接,而IO总线较慢,因此用北桥芯片连接CPU,内存和IO

 网络主要可以称为:连,找,发

连:HUB总线,以太网交换,电话交换等。

找:如TCP/IP中,IP的命名,使得节点间可以区分,进行查找。

发:已经为OSI模型上三层的内容。

 

CPU位数:寄存器与运算单元的总线条数

总线位数为:前端总线的条数。

由于IO总线速度较慢,因此设立南桥,集成众多外设控制器。

而通过网卡,则可以连接到外部网络。

第三章 磁盘大挪移  (磁盘结构,接口,串行,并行)

由于磁盘的磁头距离磁面过远读取数据的信号很弱,过近又会划伤,因此完全通过磁盘旋转时,利用空气动力学使磁头悬浮于磁盘上空。

数据的写入按照柱面进行,因为磁头的切换远比磁道的移动快得多。

512字节作为一个扇区。每个扇区都有扇区头标,间隔,数据区,扇区间的间隔。

扇区头标:地址号(柱面,磁头,扇区,简称CHS地址),是否为坏删除,重定向删除号等。尾部有CRC校验码。

间隔:为读写切换保留时间。

数据区:存储数据。以及ECC纠错码。

扇区间的间隔:为读写切换保留时间。

 

目前不采用CHS编码方式,采用LBA线性地址,有助于编程。但磁盘内控制电路仍需要保持这种对应关系。

扇区编号:由于磁盘转速较快,若顺序编号,可能导致上一个扇区数据未处理完,磁盘未反应过来,就已经超过扇区的头标部分,因此采用交叉因子的方法,如n:1,即间隔n个进行编号。

对于2:1的交叉因子,若有17个扇区                 (与交叉因子类似的还有磁盘扭斜,用于磁道转换时节省时间)

1, 10, 2, 11, 3, 12, 4.......

 

对于磁盘来说,磁头的一次连续读/写就叫做一次IO,而读写也需要以扇区为单位(不能写半个扇区,或者读半个扇区,当然扇区也不能追加写)

文件系统 -> 卷管理程序 -> 磁盘控制器API -> 磁盘IO 都是以N倍扩展。

LBA为顺序编址,LBA1代表 0盘片,0磁道,0扇区。映射工作由磁盘内部逻辑电路查询ROM对应表获得。

SCSI接口协议:小型计算机系统接口,用于计算机与外设交互数据。

磁头扫描方式:FCFS(先来先服务),SSTF(近处先服务),SCAN(电梯算法,先到一端再到另一端)等。

磁盘缓存:用于接受指令和数据,以及预读。参数可以设置:禁止替换其他缓存,强制读取磁盘而不是缓存。

影响磁盘性能:转速,寻道速度(主要耗时),单碟容量(数据密度越大,性能越好),接口速度。

IDE数据传输模式:

DMA模式:直接内存访问,CPU向DMA控制器发送指令,DMA直接将数据复制到内存相应地址。

 

SCSI与ATA为主机与外设通信的协议规范:ATA对应IDE接口,SCSI对应SCSI接口。

SCSI中的OSI模型:

1. 链路层:OSI中为将数据成功发送到对端,SCSI利用CRC循环冗余校验,检验数据帧。

2. 网络层:OSI自然为IP地址,SCSI ID为区分每个节点,一条SCSI总线可以有16个节点,其中控制器占用7号节点,具有最高优先级(优先级分部:7~0,15~8)

     主机不含有SCSI控制器,因此需要插入SCSI卡,一端连接主机PCI总线,一端通过SCSI控制器接入SCSI总线。同时SCSI卡可能有多个SCSI控制器,即通道更多,连接设备也可以更多。

     由于总线为共享线路,因此同时发数据,需要仲裁谁可以进行发送,空闲时刻BSY和SEL控制信号的线都为False,请求使用权时提升自身ID信号以及BSY信号,若有其他更高级ID信号,则自身

     退出,最终获胜将SEL信号提升。

     因此:SCSI总线寻址方式为:控制器-通道-SCSI ID- LUN ID  (控制器初始化时,会获取每个SCSI设备的LUN,通过LUN而其逻辑存储单元大大增加)

3. 传输层:OSI中用以保障数据成功的传输到彼端,链路层数据的传输,若数据帧出错并不会重传。SCSI中,在获取总线仲裁之后,发送Command(包括LUN号以及LBA地址段)通过发送XFER_RDY

     来通信是否准备好以及上一帧是否成功收到

 

磁盘的驱动器负责控制磁头臂做运动进行读写。磁盘的控制器进行控制磁盘的驱动器。CPU只需要与磁盘控制器交互,给出地址和数据进行读写即可。而指令则是ATA或者SCSI指令。

磁盘传输速率分为:

内部传输速率(磁盘读写速率,即不包括换道速率。10000转的SCSI硬盘,速率大约1000MB/s,但若包括换道操作,通常只有80MB/s)

外部传输速率(数据从磁盘驱动器的缓存芯片,到主板上磁盘控制器的速率,通常大于磁头读写数据速率(包括了换道损耗))

 

IO延迟指的是IO指令发送出去到完成所耗费的时间,对于20ms的延迟,相当于起码IOPS为1000/20=50,即每秒处理50次IO。

只要容量和消化能力足够,处理1条和多条的时间几乎相同,因此控制器向存储设备发送命令通常是一批一批发送,而Queue Depth则用来限制批量指令最大条数。因此IOPS=(Queue Depth)*(IO Latency)

如图:越靠左的线段代表,队列还未增长过多,就已经开始影响每一批的速度了

 

并行传输:适合近距离,远距离由于电阻不均导致速率不一定,每次要等最慢的,而且远距离本来就需要粗导线,多根很难放入电缆中。同时需要屏蔽线减少数据线之间的干扰,因此效率高但速率慢。

串行传输:虽然每次只能传一位,但传输频率比并行快得多,导致总体速率更快。

 

IOPS在每次数据量较大,且换道频繁时值最低。在数据量512B,且不频繁换道时将是最高值。若有效数据为0,则为理论极限值。

对于传输10000个1kB的耗时要比10MB的文件大的多。由于10000个文件可能需要几十万IO,而1个10MB仅十几个IO。因而处理10000个,高IOPS可以提速很多,而10MB文件需要高传输带宽才可以有优势。

对于具有高带宽的磁盘,在传输大文件时具有优势。

对于具有高IOPS的磁盘,在传输小块不连续文件时具有优势。

第四章 七星北斗  (RAID1~6)

1. RAID 0 

对于磁盘来说,扇区是实实在在存在与磁面的。但许多文件系统或者卷管理器使用块作为基本单位,如图 使用了4个扇区组成的块作为基本单位。

而不同磁盘相同偏移的块组成了条带(Stripe)(一个Stripe所占单块磁盘的区域叫做Segment,一个Segment所占用data Block或扇区个的个数或字节容量为Stripe dpeth,data Block可以是n倍扇区大小)

这样大块数据的写入,就会以条带的方式,分到多个磁盘。(写入现将第一个条带,第一个Segment写满,再写第二个Segment....写第二个条带)

因此称为:局部连续。即Block仅仅在Segment中是物理连续的,逻辑连续就要跨过物理磁盘

读取操作:

(1)主控制器发送读取扇区位置10000,长度128。

(2)RAID控制器将获取到扇区的逻辑地址10000转为物理磁盘的扇区号。

(3)计算出逻辑上连续的下128个所在的扇区号。

(4)将这些扇区磁盘发送指令,磁盘将各自数据发送给RAID控制器,经过控制器在Cache中组合,最终交给主控制器。

如果条带深度过大,例如大于128,则请求都降落在一个磁盘,整体没有任何优化,反而因为RAID的计算性能更差,因此要让IO尽量分散到多个物理盘,就要减少条带深度。

 

2. RAID 1

RAID 0 的缺点在于,由于数据分在多个磁盘,一旦一个磁盘坏了,数据都会有所损失。

因此RAID 1。采用两块或者多块盘,一块正常使用,一块作为影子用来备份,重复正常盘的操作。在读取数据时,可以并发读取。

缺点也很明显:速度会较慢,因为备份多要多次写入。同时整体容量不变,性能却变成所有备份中最差的。

3. RAID2

由于数据备份,采用了1:1的模式。但其实对于多个数据,例如只需要计算出和,这样任意丢失一个数据都可以将其找回。

汉明码(Hamming Code ECC)

对于插入汉明码的数据来说,任意丢失一位都可以找出错误位置。

2^p>=P+D+1 (P为汉明码位数,D为数据位位数)

因此将数据按位拆分到不同存数据的磁盘,并计算汉明码到存储校验位的多个磁盘。因而仅有一个磁盘出错,数据仍然完好无损。

虽然按位拆分,但计算时,读取一位就要把整个扇区读取出来。

对于写操作

(1)请求初始扇区10000,长度1扇区(512字节)

(2)计算物理磁盘位置

(3)写入磁盘,对于4块数据盘时,第一块写入1,5,9....第二块为2,6,10.....位其他同样。

这样下来每块物理盘包含128字节数据,其余为空。为了利用这些剩余空间,可以在下次IO,将旧数据读取和新数据合并存入。

4. RAID3

校验盘还是过多,如果采用加和容易超出位数,例如 1 + 1 = 10,1位需要2位来保存。因而采用了布尔逻辑

采用异或的方式,只需要一个校验盘,任一数据出错都可以恢复。同时由于RAID2中数据太散,因此采用4k为一个条带,配合文件系统4k为一个块,若使用4个数据盘,则每个条带需要每个数据盘2块扇区。

极端优化情况下,可以做到IO并发,即对一块磁盘读写时,若多个IO读取物理连续的位置,可以IO合并。

RAID3与2一样,若要达到最高性能,必须所有磁盘的主轴同步,也就是所有磁盘同步读取数据,否则会导致等待。

缺点是无法进行纠错,只能发现错误,需要上层去纠错。

性能来说:由于主要提升在于数据传输上,因此对于顺序读写,换道时间较短,传输速率提升可见,因而效率会提升。对于随机读,由于换道时间过多,因此传输带来的优势不可见,同时若多磁盘不同步,导致出现等待现象,速度反而会有所降低。

5. RAID4

由于很多情况下IOSIZE并不是很大,导致数据仅仅需要写到一个数据盘上就够了,这样所有磁盘都被一个IO占用,并不能并发。

因此采用增加条带深度,在不使用同一磁盘下尽量并发。

6. RAID5

RAID 4性能没有提升,关键在于任何一个磁盘的操作,都需要校验盘做修改,导致校验盘变成了热点。

因此RAID5采用了,将校验盘数据分散到数据盘,在4块数据盘时(此时已经不存在校验盘),可以有2块并发。(新校验数据=老校验数据^老数据^新数据)

RAID5 E与RAID 5EE 采用每块盘都割出一块用作热备盘,防止某一个磁盘损坏后,再有数据盘损耗导致不可用,而热备盘则是用作磁盘损坏后,顶替损坏磁盘。

写操作:

(1)产生写入IO,扇区1000,长度8,控制器接收到定位其地址,假设为1号条带,2Segment,1扇区,首先发起IO请求

(2)同时向所在校验Segment的盘发起读请求

(3)通过XOR,计算新校验数据。

(4)发起写请求,写入Segment以及校验Segment

若上个操作,写入为1号盘,校验在2号盘,那么仅用了两块盘,若有3,4也进行相应操作,则相当于开启了并发。

7. RAID6

由于之前不能同时让多个数据盘损坏,变通太小。

因此,采用如同多方程求解的方式,若用两个校验盘就可以同时让任意两块数据盘损坏。

 

读/写IO:受到指令从磁盘某个扇区开始读、写扇区的个数,一次IO操作的扇区必须的连续的。

大/小块IO:对于读取扇区的个数,通常64,128为大,1,4,8为小。

连续/随机IO:对于本次IO和上次的结束扇区位置连续或者相隔不多,则为连续IO,否则为随机IO。

顺序/并发IO:如果发送一条IO后不必等待回复,可以发送下一条则为并发IO,否则为顺序IO。

IOPS:完成一次IO所用的时间=寻道时间+数据传输时间。IOPS=IO并发数/(寻道时间+数据传输时间)。

每秒IO吞吐量:每秒IO吞吐量=IOPS*平均IOSIZE。一般来说,IOSIZE越大,寻道时间越短,吞吐量越大。

 

整条写:需要修改奇偶校验群组所有条带单元,因此可以根据所有新条带数值进行计算,不需要额外读操作。

重构写:在写入磁盘数大于阵列磁盘数的一半,需要读取不修改的segment与需要修改segment的新值进行计算校验值并一同写入。如8个数据盘,如写6个,则会将其余两个读出,一同计算校验并写入。

读改写:在写入磁盘数小于阵列磁盘数的一半,将旧数据和旧校验值读取,并计算新校验值,重新写入校验值和新值即可。需要读取,修改,写入。

写效率排序:整条写>重构写>读改写

第五章 降龙传说  (RAID卡,软RAID,虚拟磁盘,卷,文件系统)

对于某台拥有2块IDE磁盘,4块SCSI磁盘的机器,IDE硬盘会连在主板集成的IDE接口,SCSI则是连接到PCI接口的SCSI卡上。若无RAID,系统会识别出6块磁盘。

若按照RAID程序,将2块IDE盘做出RAID 0,则容量为2块盘的容量,将4块SCSI磁盘做出RAID 5,容量变为3块盘的容量,同时由于存储RAID信息,容量会更小。

通过RAID处理,6块盘会变成2块虚拟磁盘,打开磁盘管理器之能看到2块盘,如果进行格式化(如NTFS文件系统),格式化程序丝毫不知道正在写入多块物理盘。

如发送向硬盘1(虚拟磁盘:由两块IDE盘组成的)向LBA 10000长度128写入内存某处数据,RAID将会截获写入地址,将逻辑LBA转为物理磁盘的LBA。

                                    (为了保证性能,一般来说同一个磁盘组只能用同类型磁盘)

软件RAID的实现:如 window server2003 高级磁盘管理下,选取含有5块100MB物理磁盘的PC机。

卷的分类:

简单卷:类似磁盘的分区,卷空间只能在一块磁盘分配。(分配时,只能选择一块磁盘)

跨区卷:允许卷空间跨越物理磁盘,相当于不做条带的RAID 0。(可以选择多块磁盘,并且磁盘容量可以不是全部容量)

带区卷:相当于RAID 0(每块磁盘选择相同容量做条带化的RAID 0)

镜像卷:相当于RAID 1(每块磁盘选择相同容量)

RAID-5卷:相当于RAID 5 (选择每块磁盘的相同容量做RAID 5卷)

RAID 卡则为RAID的硬件实现方式,在操作系统之下,要想配置只能下载相应配置工具。

SCSI RAID卡与SCSI区别在于拥有了RAID功能,SCSI控制器则为RAID控制器的傀儡,条带也仅仅在RAID内部,条带化之后,RAID操控SCSI向OS层驱动代码提交一个虚拟化的 虚拟盘/逻辑盘,也叫LUN。

RAID上的内存:用于数据缓存和代码执行内存的作用。

缓存的写模式:

WriteBack:收到数据,RAID将其保存到缓存,并返回IO完成,之后采用排队,优化,批量写的方式写入磁盘,以防断电可以采用电池让其数据不会丢失。

WriteThrough:只有真正写入才会返回成功。

对于读,一般采用预取(将读取数据后面的数据也一并读取出来),假设(对于刚写入的数据放入缓存,假设一会进行读取)

基于7中RAID模式,可以杂交更多RAID,如RAID 0与RAID 1变成RAID 10,RAID 0与RAID 3成RAID 30, RAID 0 与RAID 5成RAID 50

对于RAID 50,外层为RAID 0内层为RAID 5.数据写入时,先根据RAID 0分成多份写入RAID 5中,每个RAID 5又写入到内部数据并写入校验。

RAID组的再划分,由于磁盘变大,如5个100G的磁盘,采用RAID5则有400G,通常用不上这么大,因此可以划分成4个100G,而且在写入时仍然写入多个物理盘,且在坏一块盘时,操作系统仍然看不到。

RAID划分的逻辑盘,大小可以任意设置,对于OS来说每块都是一个单独的物理磁盘,而分区则是OS对于物理磁盘做的再划分。

 

当前划分好的逻辑盘,若出现空间不足,由于文件不能跨系统的分区,更不能跨磁盘,因此需要重新分配(重启主机,更改RAID配置。重启系统,让OS发现磁盘容量变化。手动更改分区表)

因此采用了卷管理器(Volume Manager,VM)的方式,RAID实现底层逻辑盘,OS将逻辑盘(OS自认为是物理盘)组织分配。

Linux等广泛应用的为LVM(Logical Volume Manager)

PV:LVM将OS识别到的物理磁盘(可能是RAID提交的逻辑盘)改名为PV(Physical Volume,物理卷)。

VG:多个PV逻辑的放到一个VG(Volume Group  卷组)中。因此VG是虚拟大空间,逻辑连续,但可能由多块PV构成。

PP:Physical Partition(物理区块)。逻辑上将VG分隔连续的小块,由于PV可能被RAID虚拟化成LUN,因此PP在物理上可能不连续。

LP:Logical Partiton(逻辑区块)。LP可能对应一个PP,也有可能对应多个PP。在对应多个PP时,可能是由于类似RAID 0,将多个PP组合成较大的块,也可能类似RAID 1,每份数据一样,仅仅用于备份。

LV:Logical Volume(逻辑卷)。多个LP组合成LV,即LVM最终可以存储数据的单位。主机看来和磁盘一样,可以进行分区,格式化等。

最大好处则是LV可以跨越RAID提交给OS的物理磁盘。

每个磁盘VGDA的位置,则记录LVM的配置信息,如PP大小,初始偏移,PV数量和信息,排列顺序,映射等。

在接收IO时,通过映射找到对应为哪几个的实际地址,发送给RAID可能再进一步转换。

从底层依次向上为:物理磁盘,磁盘控制器,IO总线,总线驱动,磁盘控制器驱动,卷管理软件程序,OS磁盘管理器看到的设备。

由于分区信息要持久保存,因此存储在磁盘上。位置为磁盘的,0磁道,0磁头,0扇区上,即LBA1的位置,又叫MBR。因此BIOS跳转时必须执行LBA1的代码。

作为高级的VM则可以实现RAID的功能,但在高系统负载情况下,相对硬件RAID来说速度稍差。

 

文件系统

早期程序存储数据,需要自己记录数据所在磁盘位置,因此,端口多,也容易产生冲突,一旦某个程序记错会引起麻烦。

之后则通过专门管理数据存储,但由于数据过大,记录太多,因此采用10个最为一簇,这样记录的大小整体减少数倍。

但当存在存入,又取出的情况,会导致空间碎片,即使有足够空间,也无法放入新的数据,因为没有新数据大小连续的空间,因此采用每个簇记录下一簇的位置,或者是否为结束。

对于寻找空余空间,仅需要看簇是否为空簇即可。由于之前簇分的过细,通常来说簇都局部连续,因此采用簇段的方式,按段查询。

文件系统管理方式:

1. 程序调用文件系统接口,准备从某文件,某字节开始写入数据。

2. IO Manger(操作系统内核的模块,专门用于处理IO)将请求发送给文件系统模块。

3. 文件系统将逻辑偏移转为卷的LBA地址偏移。

4. 文件系统向IO Manger请求卷管理软件模块的接口。

5. 卷管理软件将对应的LBA地址偏移翻译为实际物理磁盘的LBA地址,并请求磁盘控制器驱动程序。

6. IO Manger请求磁盘控制器驱动程序,将对应LBA地址数据从内存写入某块物理磁盘。

 

同步IO:指进程或线程,调用同步IO接口,在IO发出请求后,等待下位程序返回信号(无论成功,失败)。等待时,不能执行后续代码,并被操作系统挂起。

    在等待过程,下位程序未得到请求的数据,可以选择两种:

      返回并告知,数据未收到。 非阻塞IO。

      继续等待,直到收到数据。 阻塞IO。

因此:同步+阻塞IO则为堵死状态,若非多线程程序,程序在此将挂死,失去响应。

 

异步IO:IO请求发送后,操作系统会进行执行代码,只会因为时间片到或其他原因被挂起。虽然不会得到数据,但不影响其他功能的执行。

异步IO和非阻塞使得文件系统不必立即返回数据,因此可以将IO进行优化排队处理,批量发送请求。因此,异步+非阻塞则为最松耦合的IO行为。

 

Direct IO:由于文件系统存在缓存机制,为了使性能有所优化。而很多数据库也有缓存机制,如果IO到达文件系统再进行缓存,会多此一举,浪费时间,若调用Direct IO则直接跳过缓存,同时减少因为缓存带来的数据一致性问题。

第六章 阵列之行  (磁盘阵列,SCSI,LUN,前端/后端)

磁盘柜:起初仅仅把很多磁盘放到箱子里,箱子有独立电源和散热系统。并且由SCSI可以和主机SCSI卡连接,主机可以直接识别物理磁盘,若SCSI卡带有RAID,RAID可以将其划分为逻辑磁盘。

磁盘阵列:由于之前RAID在主机,每次都需要重启,RAID进行划分才能使用,因此在磁盘柜中加上RAID,这样只要主机连接就可以识别出逻辑盘。

前端:对于磁盘阵列来说,RAID控制器以左为前端(用于面向主机对外提供服务)

后端:以RAID右为后端(用于自己管理磁盘,外部不需要了解)

内部接口:指盘阵RAID控制器连接内部磁盘的接口,如IDE磁盘,SCSI磁盘,SATA磁盘,FC磁盘。

外部接口:指盘阵控制器对于主机端的接口

多部接口:用于连接多个主机,可以让每个LUN只分配到一个主机,也可以分到多个主机(多个主机需要集群文件系统,否则可能导致数据不一致)

LUN:比SCSI ID更细一级的地址号,SCSI ID下可以有多个LUN ID。

    因为SCSI 总线最多允许16/32个设备接入,但磁盘阵列可以生成成百上千个虚拟磁盘,因此在SCSI下有多个LUN,每个LUN对应一个虚拟磁盘。

    后来,对于硬件层次生成的虚拟磁盘统称LUN。软件生成的虚拟磁盘统称卷。

双控制器:为了防止控制模块单点故障导致不可用,通常采用两个控制器,各自管理各自的LUN,当对方的损坏,将其LUN全部接管。

      Active-Standby 任何时刻只有一个工作,另一个处于等待,同步和检测状态。一旦主控制器发生故障,备份立即接管,同时防止脑分裂,将主控制器断电或重启。

      Dual-Active 后端的总线分成两份交给两个控制器管理,因此更高效。

      脑分裂 若控制器之间通路出现问题,而控制器没问题,导致有认为对方死机,并接管所有总线。可以选择仲裁的方式,如向磁盘写入信息,最后信息是谁的,谁有控制权。或让对方重启。

        由于SCSI总线最多可以接连16个设备,若只用16个磁盘浪费了双RAID,对于磁盘阵列外部可以再连接磁盘柜作为扩展柜,充分利用双控制器的资源。

由于扩展柜没有RAID,因此可以添加一些二线辅助功能:探测磁盘温度等。

 

其实磁盘阵列可以看做是一个简单的主机系统,可以主机化。。

主机架构:CPU,内存,总线,各种IO设备,CPU执行代码(软件)

盘阵控制器:RAID控制器(CPU),内存,总线,IO接口(SCSI接口等),RAID执行的代码(软件)。

因此可以在用主服务器作为存储系统的控制器,插入几片SCSI卡作为前端接口,并插入几张SCSI卡连接磁盘柜的接口卡,可以进行读写数据。

 

盘阵的类型按前后端接口:SCSI-FC盘阵,FC-FC盘阵,SATA-FC盘阵,SCSI-SCSI盘阵。例如SCSI-FC盘阵为后端接口为SCSI,前端为FC。

SAN(Storage Area Network,存储区域网络):可以看出网络不仅是TCP/IP网,也可以是SCSI网,PCI总线网,USB网。把磁盘放到主机外,存储设备与主机便形成了网络,存储器区域网络。

第七章 熟读宝典  (OSI,三元素,七层结构)

人类如同一个系统,由八大子系统构成,而计算机也有相应的系统

1. 计算机的消化系统:为系统提供能量的为电力,排解废物的为低电位触电。消化也可以理解为吞入,吐出数据等。

2. 计算机的循环系统:为系统提供能量和物质的传输。计算机中则为总线。

3. 计算机的呼吸系统:为系统提供氧化剂。计算机中则为散热的风扇。

4. 计算机的神经系统:用于传输信号,题解器官功能。计算机中则为CPU载入的程序,生成各种信号。

5. 计算机的运动系统:计算机不存在运动的概念,但连接打印机等设备可以在驱动下做运动。

6. 计算机的生殖系统:软件通过CPU的执行可以复制自身,形成新的逻辑,在无数次复制下出现的BUG随着日积月累,成为了进化。

 

OSI模型是一种抽象出来的系统间通信模型。开放式系统互联,描述一个到多个系统间交流的模型。

a机器向b机器发送数据的简单流程:

1. 内存中通过双方定义的语言,生成数据包。

2. 数据包通过总线发给TCP/IP协议单元,告诉IP地址,通信方式(TCP,UDP),端口号。

3. TCP/IP模块收到数据包,将数据包封装好,发给以太网卡。

4. 以太网卡将其编码,变成一串电路的高低电平震荡,发送给交换机。

5. 交换机将数据包发送到b机器的接口。

6. b机器将电位流送到以太网解码,去掉以太网头,产生中断信号发送给内存。

7. TCP/IP模块进行分析,通过IP和TCP或UDP头,判断应该送到哪个应用的缓冲区内存。

8. 最终将信息解析,获得了数据。

因此,也包含了通信的 连,找,发。

连:通信双方需要以某种方式连起来,如电磁波。

找:能够区分自己和对方。

发:将数据通过介质发送出去。

OSI模型共有七层:

  OSI模型的上三层都可以认为是应用层,因为他们并不关心数据如何传递。

1. 应用层:表示一个系统对另一个系统传达的最终信息。而应用层不用关心如何传达到对方。

2. 表示层:应用层数据的一种表示,如 文字在屏幕显示的位置,颜色等。一些加密工作也是在表示层起作用的。

3. 会话层:用于建立某种会话交互机制。如确认双方程序都处于正常状态。

  TCP/IP模型有四层,即应用层(上三层都为应用程序的逻辑与通信无关),传输层,网络层和数据链路层。

4. 传输层:保证数据能传到目的地。如同快递员,不管用什么方式,直达(直接路由)还是绕路(吓一跳路由),飞机还是火车(物理线路类型),运输出现错误必须重发,达到后必须收件人签字(ACk应答包),或者一批货物到达一次签收(滑动窗口)。

      TCP处理拥塞控制和流量控制,通过接收方返回的ACK判断链路是否拥挤,来减缓或增加发送速度。

      传输层一定要在通信双方的终端上,作为端到端的保障机制,只有对方在传输保障时间内收到并处理数据才算成功。

5. 网络层:货车公司为每件货物填上地址标签(IP头),由于掌握了全球地址(路由表),可以知道如何到达,货物到达中转站后交由其进行调度。

      数据包在传递时,需要查询路由表,通过路由转发。路由表的生成是一个复杂的学习过程,通过调度自行学习或者调度直接相互通告,也可以手工录入。前者为动态路由,后者为静态路由。

      数据传输过程中不仅仅是一条连续不断的光缆,还有中继器。

6. 数据链路层:将上层的数据包再次打包成对应链路的格式,按照链路的规则进行传递。需要写上链路的参数,如 双工,速率,链路质量等。

        将上层数据打包成帧,加上同步头进行传输,一次一句或一个字符取决于上层选择。并调用物理层接口,将帧发送给物理层。

        数据链路层也提供一定的保障机制,如在帧后加一个校验字段,若收到的校验值与字段不符,则进行丢弃,但不会进行报告。只有接收方发现数据包不完整,会要求重发。

        因此,数据链路层只侦错,不纠错。传输层即侦错,又纠错。

7. 物理层:研究在一种介质上(或者真空)如何将数据编码传递给对方。归根结底为用什么样的线缆,接口,物理编码(归零还是不归零),同步方式(内同步,外同步),高电压,低电压等。

     链路层用来控制物理层。物理层如同传送带,只会马不停蹄的不断旋转。链路层则会加上一些头部,尾部,进行动作。

     链路有最适合批大小,MTU。每次只能传输MTU大小。超过MTU可能导致接收方缓冲区溢出,数据截断。

     对于TCP会将货物分批,到达IP层会将货物再次分批,而IP层分批的货物由IP层组装,TCP层分批的由TCP层进行组装。 

网络就是众多节点通过某种方式互相连通后,进行多点通信系统。

如:计算机总线网络。CPU,内存,外设通过总线连接,还有南桥北桥芯片如同IP网络的路由器。

HUB的意思为一条总线,若运行以太网协议,则为以太网HUB,若PCI协议,则为PCI HUB。

连接到以太网HUB的节点,采用CSDA/CD的竞争机制获得总线使用权,PCI采用仲裁机制。

第八章 勇破难关  (FC,网状通道协议,光纤通道协议,OSI)

 Fibre Channel 为网状通道,简称 FC。    (经常混淆与之的是Fiber Channel 光纤通道)

Fibre Channel可以称为FC协议,因此也有OSI分层:

1. 物理层:速度从1Gb/s到8Gb/s甚至更高,采用了同步串行方式,NMb编码方式。

2. 链路层:采用了24字节的帧头。

     基于以太网的TCP/IP,开销:15字节(以太网帧头)+20字节(IP帧头)+20字节(TCP帧头)=54字节。若用8字节的UDP,为42字节。而FC只用24就基本实现了所有功能。

       对于流控策略,一种为端到端,一种为缓存到缓存。端到端更为高级。

       一般以太网的MTU为1500字节,而FC的MTU可以达到2112字节

3. 网络层:提供了两种网络拓扑FC-AL和Fabric

     FC-AL(Arbitral Loop)仲裁环路。每个 FC-AL首尾相连构成了环路。因此数据必须按照环路的顺序发送,导致有时节点很近也必须走一圈才能到达。

     Fabric为网状结构,节点都可以点对点的通信。使得总带宽为接入所有端点的带宽。

       便于寻址,每个设备都有WWNN,每个端口都有WWPN,都是独一无二的。

     WWPN的长度64位,由于过大,因此分配了一个Fabric ID,长24位。从高到低以8位区分为:Domain,Area,PORT。

     Domain ID用于区分交换机,每个交换机Fabric ID高8位都相同。

     Area ID用于区分交换机的端口组。

     Port ID用于区分同意Area下的不同Port。

        对于寻址过程:

     地址映射:当接口连接到网络,若是Fabric架构,会发送登录动作到FFFFFE。交换机收到以后会分配一个Fabric ID,并做好WWPN与Fabric ID的映射。

          对于仲裁网络,会在环路上选取一个节点作为临时节点(WWPN小的优先级高),发送初始化帧,给节点分配ID。

     寻址过程:FC交换机上运行名称服务器,当节点注册后,会将网络其他节点的信息告诉该节点。

     ZONE:为了安全性考虑,进行分区,使得接入网络的某些节点之间看不到,每个节点只能看到分区内的节点,是一种硬件上的强制隔离。

4. 传输层:类似于TCP,利用Exchange ID区分,会对上层数据切分,提交给下层传输。

     同时可以适配上层协议,如IP与SCSI指令都可以通过FC来传输。

     FC协议中,Class1为面向连接的服务,为双方保留一条虚电路,提供可靠传输。Class 2提供端到端的保障,类似TCP。Class 3不确认,类似UDP。Class 4保留一定的带宽资源,类似RSVP。

     FC的传输层被定义为 FC4。

5. 上三层:表现为各种Login过程,与网络传输无关。

FC是一种高效,配置简单的网络,其中大部分逻辑被做在一块独立的硬件卡片中,而不是操作系统中。

FC中七种端口类型:

1. N端口和F端口:连接FC交换机的终端端口为N(Node),对应的交换机为F(Fabric)。

2. L端口:仲裁环上各个节点的端口。

      私有环:FC仲裁环是封闭的,只有环内节点可以通信,不能与环外通信。

      开放环:环内节点可以和环外节点通信,仅需把这个环作为单元连接到FC交换机上,可以与交换机上其他节点或者其他环通信,实现开放结构需要NL和FL端口。

3. NL端口和FL端口:NL端口支持N端口和L端口双重能力,支持光纤网登陆和环仲裁。FL则作为开放仲裁环的中介接口。

          其中只有NL可以与环外通信,FC内部节点可以与其他节点通信。(FC交换机连接设备都是N,PC AL会连接L,AL(开放设备),交换机连接PC AL的端口为FL端口)

          对于环内外交互时,对环内节点映射出环外的虚拟名,外环映射环内虚拟名,发起动作时,进行地址转换即可。

4. E端口:用于交互机直接连接,如级联线路上需要承载控制信息等。

5. G端口:为万能端口,可以转为上述任一端口,根据对方端口类型进行协商。

端口编制:对于N,NL,L都是用3字节,但N只用高2字节点(由于节点较多,最大到65536节点),L用低一字节(由于环路内最多只有127个设备),NL则是3字节

 

FC适配器:FC HBA(Host Bus Adapter)

盘阵前端通路 - SCSI迁移到FC协议。

FC协议仅是网路传输协议,对于磁盘读取数据的语言,仍需要ATA和SCSI。而SCSI已经将指令的语义部分(上三层)和传输部分(下四层)分开。因此,FC主要为了取代SCSI协议集的底层模块。

由此,盘阵的容量(后端性能)没有提升,只是利用FC的高效,高速提高了前端性能。

采用了FC后,提升了扩展性,盘阵只需要一个端口连接交换机,就可以连接多台主机。同时并行能力得到提升,对于总线上的并行,必须将带宽平分。而且若使用光纤,距离也有所提升。对于访问时可以多台访问同一个LUN,SCSI内也有独占式和共享式的访问。

对于多数情况机器不需要共享同一个卷,因此控制器只需要告诉他自己的LUN即可。通过映射表可以让机器只能访问自己的LUN。

甚至可以让LUN绑定到端口上,并采用ZONE,让端口直接分区,使得某些节点不能看到其他节点,导致某些LUN根本不能被其他节点发现。

采用两块FC适配器可以进行冗余,防止一块适配器损坏而无法工作,但同时工作会导致磁盘识别出的数量增倍,因此可以通过查看物理地址判断是否重复。

第九章 天翻地覆  (FC,SCSI,前端,后端,机头,扩展柜,FC磁盘)

并行SCSI 属于面向连接的网络。在发起通信时会发起总线仲裁,获得独连接。

面向有连接缺点在于:1. 资源浪费,可能目前路径上没有数据传输。2. 维护成本高,对于远距离,防干扰,中继等问题就很明显。 3. 缺乏高可用,一旦断开,需要重新建立电路才可以通信。

面向无连接在利用包的交换,有较多优势。  (此处讨论的是链路层的概念。而“TCP是有连接的”是逻辑连接,其下层可以包交换也可以面向连接,是一种传输层的概念。)

得益于FC,可以让主机和盘阵在不同城市,中间租用ISP的光缆,而FC接口1~8Gb甚至更多,同时可以连接多个主机接口接口,使得带宽之和远高于SCSI并行总线。

 

为了饱和前端众多端口,只能增加后端磁盘的数量。但是后端每增加一个SCSI通路只能增加15块磁盘,因此考虑后端改成FC协议。

虽然拓扑的方式速度快,容量大,但成本高。FC-AL容量128,但实现简单,成本低。

后端采用FC的优势在于:

1. 可扩展性:并行SCSI决定总线16个节点数已经到达极限,而FC-AL环则有128个,使得后端连接更多磁盘,很容易在单台磁盘阵列上实现十几TB。

2. IOPS显著增加:IOPS高则需要探究小IO SIZE的情况。由于SCSI总线连入设备少,磁盘少,因此IO请求少,而FC-AL有120个磁盘,可以做成很多RAID Group,每秒IO请求就多得多。

          带宽可以通过增加多个FC-AL环来解决,后端带宽总和=环数*环带宽。

3. 双逻辑端口冗余:FC串行方式使得数据针数量降低,在相同空间可以做成双逻辑端口,保证其中一个故障,另一个作为备用。(下左图,两个端口连接两个环)

              

但在共享带宽达到极限时,若再增加节点,只会让仲裁更加耗费资源,性能只降不升。因此考虑采用星型连接(半交互式FC AL环),中间由ESH交换模块连接所有磁盘,进行仲裁。

优势在于:1. 可以实现点对点直连,相对于环路减少传输延迟。2. 可以快速侦测并隔离故障节点。 3. 降低延迟增加效率,性能可接受前提下,可以增加节点数。4. 提高了传输速度和IOPS。

对于PATA(IDE)和SATA(ATA)盘相对于FC盘和SAS盘来说,成本降低很多,也有较高容量。因此为了整合出现了各类适配器。

由于SATA使用了ATA指令,而FC和SAS都是SCSI指令,因此采用芯片进行逻辑转换。

如 9.26所示的机头,每个控制器前端4个FC接口,后端4个FC接口,而后端每个FC都可以连接FC-AL环路,为了冗余,两个控制器后端FC必须连接相同的扩展柜,因此本台可以连接的Loop为4个。

磁盘阵列控制器作为计算机系统,包含了IO设备,存储器,运算器,软件。

1. IO设备:前端FC适配器,后端FC适配器,COM口,以太网口,LCD液晶显示板,指示灯以及各类适配卡。适配器从后端提取数据,虚拟化后发送给前端主机,控制器从前端主机获取指令去虚拟化后给后端。

2. 运算器:完成上述虚拟化和去虚拟化过程。控制器可以选用通过CPU作为运算器,ASIC作为专用逻辑进行运算。

3. 存储器:包括高速缓存存储器和外部低速永久存储器。通常使用带有ECC错误矫正的DDR SDRAM作为高速缓存。

4. 软件:由于虚拟引擎功能强大,精简的内核与代码不足以满足需求。

图9.26中下方为一个扩展柜,插入16块FC磁盘,左面控制器FC接口通过光纤连接到扩展柜,内部仅有16个磁盘,因此还有一个连出的接口连接其他扩展柜,而右侧控制器有同样的接口连接扩展柜,防止左面控制器故障。

对于控制器发生故障,备用控制器会立即接管所有工作。

对于扩展柜发生故障,比如电源端口,整个环路从一方来看是被断开,但采用主控制器访问扩展柜上方和备用控制器访问扩展柜下方,可以让其他扩展柜都被访问。如图30,每个扩展柜组都有一个损坏。

因此若RAID Group都在一个扩展柜,一旦一个扩展柜故障,真个RAID Group不可用,因此一般会跨扩展柜做RAID Group。当扩展柜故障,每个RAID Group仅失去一个磁盘,扔能工作。

对于磁盘阵列应对不同操作系统会提供不同类型的LUN,虽然LUN对于操作系统都是裸盘,但是也有行为差异。如LUN 的0号的LBA为MBR,占用了一个扇区,但文件系统常常采用比扇区更大的块为单元。所以需要从LBA1开始,而控制器以为只会从0开始编号,因此产生了不对齐的现象,影响了性能。如图9.59。

对于配置LUN(创建逻辑磁盘)先要创建RAID Group(Array),并将RG分配给LUN。

(..................................TODO 讲了一堆芯片和配置........................................................)

若只是把主机通路改成FC通过成为半网络的话,将一个个磁盘作为FC网络的节点,则彻底成为 网络化存储系统。

但目前CPU内存总线和主机IO总线算是半网络化,只在一个总线。因此NGIO(Next Generation)将是为了主机IO总线甚至内存总线都换成交互式网络。

在Next Generation时代,内存,CPU和IO设备都可以在地里隔离很远,控制器都是点对点通信。就像存储网络一样,A地主机可以识别B地一台盘阵的LUN。

对于上述描述,成为 SAN(System Area Network 系统区域网络)(竟然和Stroage Area Network简称同名)。

第十章 三足鼎立  (DAS,SAN,NAS)

目前NAS情况如图。10.2.

SAN优化

1. 之前对于存取数据需要知道LUN以及起始位置和长度。更新后,统一了文件系统处理逻辑,不需要知道LUN等细节,并采用以太网接口(速度稍慢)。如图10.6。

2. 对于部分系统仍可以用LUN进行存取以及FC接口,而部分系统则采用以太网接口,将文件系统处理逻辑交给后端。如图 10.9。

3. 将文件系统的功能从使用者转到磁盘,让使用者不用记录文件与卷上扇区或者簇的对应关系。

  为了与盘上数据交互采用网络文件系统(以太网 + TCP/IP)(微软采用CIFS,Linux和UNIX采用NFS)

  因此,这种文件系统逻辑不在本地,而是在其他节点。读写数据,调用远端的文件系统模块。从而又叫:远程调用式文件系统:RPC FS。

              (采用CIFS访问时,仅创建一个文件再删除,就产生了上百个包。而NFS则仅仅几十个包。)

  分析NFS:Farme1:创建文件前会去DH(Directory Handle 目录)通过文件名查询该文件是否存在。Frame2:响应Frame1说明不存在该文件。Frame4:发起创建。

       Frame5:返回File Handle从此不需要使用文件名。Frame6:检查属性。Frame7:获得各类属性,如访问权 限等。Frame8:发起查询当前目录请求。Frame9:给出回应。

       Frame10:发起该目录下该文件请求。Frame11:返回该文件的FH值,判断相同。Frame12:发起修改属性,如文件时间改为服务端目前时间。Frame13:获得响应。

       Frame15:开始删除操作,首先确认该目录DH。Frame16:响应Frame15,DH没有过期。Frame18:查询文件权限。Frame19:响应Frame18。Frame20:对于文件发起请求。

       Frame21:响应Frame20。Frame23:发起Remove请求。Frame24:响应Frame23。            (中间去除部分其他网络信息,因此Frame不连续)

  可以看出客户端并不关心文件在哪个磁盘,只用发出文件请求操作即可。

对于这种集中式文件系统功能的盘阵,称为网络附加存储(Network Attached Storage,NAS)。

(一台普通的主机只要有磁盘和文件系统,并对于提供文件系统接口(NFS,CIFS)就是NAS。目前NAS仅在以太网,未来FC上会不会存在就之能等待了。)

 

SAN是网络上的磁盘,而NAS是网络上的文件系统。

网络上的文件系统与本地的区别:传输方式从主板的导线变成了以太网。

FTP必须将文件传输到本地目录才能执行,即程序执行的所有文件都在本地。而网络文件系统可以直接访问远端文件。所以,FTP,HTTP,TFTP等不属于网络文件系统,不属于NAS。

NAS的物理条件:1. NAS可以访问卷或物理磁盘。2. 具有接入以太网的能力。

 

SAN与NAS性能比较:相比之下,NAS采用了以太网和TCP/IP协议替代了内存,增加了CPU指令周期,使用低速传输介质。SAN比NAS多了一次FC访问,但FC的逻辑大部分在硬件,CPU开销很少。

          若后端磁盘没有瓶颈,NAS除非使用速度快于内存的网络通信方式来超过SAN。

          若后端有瓶颈(大量随机小块IO,缓存命中极低,寻道瓶颈最大),则NAS用网络代替内存的性能降低可以忽略。因为前端IO都在等待状态,此时NAS采用了优化的并发IO和基于

          文件访问,可能会好于NAS。

 

NAS诞生必然有其优势:

1. NAS成本低,前端使用以太网接口,FC适配卡和交换机成本相对于以太网和以太交换机来说太高了。

2. NAS可以释放主机上的CPU和内存资源。因为文件系统逻辑需要CPU,占用主机内存作为缓存。因此,NAS适用CPU密集型。

3. 基于TCP/IP,因此可扩展性强,只要有IP既可以服务。

4. NAS设备提供多种协议访问数据。如HTTP,FTP等,但SAN只能用SCSI协议。

5. NAS可以一台盘阵多个用户共享访问,如目录,文件等。而SAN除非所有客户端都安装集群管理系统,否则会导致损坏数据。

6. 通过优化的NAS,可以同时并发处理大量客户端请求。

7. 多台主机可以同时挂载NFS上的目录。

 

CPU密集:某种应用极其耗费CPU资源,内部逻辑复杂,对磁盘访问量不高,仅在程序载入时读入一点程序数据。必要时可以采用集群来运行。

IO密集:指应用内部逻辑并不复杂,耗费的CPU不多,但要随时读取磁盘数据,如FTP服务。

CPU和IO同时密集:大部分这类程序不适合单台机运行,需要前端运算节点的集群和后端存储节点的集群。

 

与SAN通信:应用程序通过本机或NAS设备上的文件系统与磁盘阵列对话。应用程序对本机文件系统(NAS)说:将A目录下a文件送到缓冲区。文件系统计算a文件的地址,并发送给SAN。SAN磁盘阵列

      收到请求后从磁盘提取数据,通过FC网络传给文件系统的节点(主机或NAS)。文件系统裁掉扇区多余部分,将数据放入应用。

与NAS通信:应用程序通过操作系统的虚拟目录直接与NAS请求:将A目录下a文件传过来。通过TCP/IP数据包,以太网传递到NAS设备。NAS用文件系统计算a文件占用的扇区,并进行读取。

 

NAS可以看做一个Filer。专门用于处理文件系统逻辑和下层逻辑,从而释放主机。

NAS网关则是一台运行文件系统逻辑和卷逻辑的设备从后端获取一种格式(LBA)处理后从前端用另一种格式(文件系统语言)发出,或反向执行。

SAN设备可以称为Disker(专门处理磁盘卷的逻辑),服务主机为Applicationer(专门处理应用的逻辑),若集成了Filer和Disker功能,并放入机箱或机柜则称为了NAS设备。若仅仅集成了Filer,而Disker为独立设备,则只实现了Filer的设备为NAS网关或NAS泵。  如图10.34

最初的架构为DAS(Direct(Dedicate) Attached Storage,直接连接存储)存储设备只与一台主机服务器连接。

对于磁盘模拟成仓库,由DAS(仅仅自己使用),到SAN(出租给其他人使用仓库),再到NSA(集中式管理服务外包)的过程。

SAN作为一种网络,不是某种设备,因此专门向服务器传输数据的网络都可以成为SAN。

 

前面提到用FC传递SCSI,用以太网传递文件系统语言。因此也出现了以太网传递SCSI,而FC传递文件系统语言以后可能也会出现

                                      (文件系统语言相比SCSI更高级,高级语言会被翻译成多个低级语言,因此传递的数据相对较少)

NAS设备并采用以太网和TCP/IP的模式传送文件系统命令,这种架构为:File System Over Ethernet (FSOE)

系统架构进化过程:

1. 全整合阶段:所有部件模块都在服务器机箱,属于DAS架构,机箱内磁盘之被本机使用。

2. 磁盘外置阶段:采用SCSI和磁盘柜通信,但磁盘仍只能被本机使用,属于DAS架构。

3. 外部独立磁盘阵列阶段:通过SCSI连接外部独立的磁盘阵列(拥有独立RAID)了。虽然SCSI接口盘阵只能提供几台使用,但已经开始网络化了,因此称为SAN架构。

4. 网络化独立磁盘阵列阶段:主机采用FC协议,与磁盘阵列进行访问,彻底网络化,称为SAN架构。

5. 瘦服务器主机,独立NAS阶段:服务器主机用以太网和NAS设备通信。主机彻底释放,专门处理业务逻辑。

6. 全分离式架构:NAS设备的后端可以是机箱内的硬盘,也可以采用并行SCSI连接磁盘,还可以FC协议连接SAN。所有部件彻底分离,前端用以太网通信,后端用FC协议通信。

7. 能量聚集,混沌阶段:既有纯SAN和纯NAS,又融合了SAN和NAS。

           既有SAN的磁盘阵列(利用:机箱或扩展柜的磁盘),又有NAS网关(可以利用本地磁盘,也可以用SAN的LUN),还有一台多协议磁盘阵列(提供FC协议和以太网协议)

8. 收缩阶段:对于很多底层模块均采用硬件实现。

9. 强烈坍缩阶段:随着集成电路的发展,整个系统将集成于一个微小的芯片。

 

NetApp公司的四把杀手锏:

1. WAFL配合RAID 4:对于校验行的RAID,如RAID 3, RAID 4,RAID  5整条写都会有极高性能,因此WAFL会特意构造整条写,除此之外还有很多适配底层的特性。

2. Data ONTAP利用了数据库管理系统的设计:对于更新数据,写入缓存,每隔几秒刷到磁盘,只有将日志写入磁盘才算更新成功。

3. NVRAM来记录操作日志:由于频繁提交操作,仍需频繁写入磁盘。因此增加带电池保护的RAM内存用作操作日志的存储空间,这样写入内存就返回成功。

4. WAFL不覆盖写:当NVRAM中日志过多,或定期,或其他原因,WAFL会将内存内容写入磁盘,并清空日志,这种做法为Check Point。

          对于WAFL不会覆盖旧数据,而是找到新位置存储新数据。因此,一旦check point触发,WAFL将缓存数据写入空闲块,元数据写入磁盘。当元数据全部写入磁盘,数据完成切换。(快照)

第十一章 大师之作  (以太网,IP,TCP,UDP,OSI)

共享总线式以太网:

1. 连:连接节点最简单的方式为总线技术。基于总线模型,以太网使用集线器(HUB)连接PC到它的端口,内部的继电器(避免信号衰减,防止多个节点同时向总线放置信号)将他们连接。

2. 找:为了区分节点,以太网使用了Media Access Control(MAC)地址。MAC含有6字节(48位),网卡出厂时固化到芯片。

3. 发:由于节点发送信号,其他节点都能感知,同一时刻只有一个节点可以发送信号。若同时存在节点放置高低电位信号,会导致电路通路,造成短路,减少设备寿命。

    集线器中的继电器,防止信号冲突。从协议角度,杜绝发送。

    在总线上每个节点采用载波监听机制(CSMA)检测总线是否有其他节点信号传播,当总线空闲,立即放置信号,声明使用总线,若同一时刻有多个节点发生冲突,则所有节点都会撤回声明(冲突检测 CD),继续监听。因此以太网具有相同优先级,但一条总线上节点过多,会发生大量冲突,因此共享总线的网络,接入节点数量有限。

    在获取总线使用权之后,便会将数据帧的bit转为电信号,以间隔速度放置总线,对于10M/s的以太网来说,每隔一千万分之一秒,总线信号放置一次,直到数据帧传送完,节点发出新一轮CSMA/CD。

    在节点发送数据时,其他节点会将总线上传播的信号存储到各自的缓冲区,形成一帧一帧的数据,因此共享以太网中,任何节点发送的数据,其他节点都会都到。

    当发送数据时,将会存储目标MAC地址,对于节点若发现MAC地址与自身相同,则说明这个是发送给自己的,否则进行丢弃。

 

网络桥接以太网:类似HUB,但内部加入逻辑电路,并将接口分组,每组一条总线,减少冲突域。实现了物理隔离。如图11.2

        每组内通信可以独立进行,组间通信,内部桥接信号可以进行转发。

        同时网桥需要知道,某条总线包含了哪些MAC地址(采用动态学习的方式,对于总线上有数据通过,会提取源MAC地址放入映射表,因此网桥刚通电时,表为空)

            

交换式以太网:利用了交换机替代网桥。普通网桥,每个端口组不只有一个端口,而交换机(特殊网桥)每个端口组只有一个端口,因此每个端口独占一条总线,彻底隔离了冲突域。如图11.3

       交换机记录每个端口与MAC的对应关系,任何时刻,任何时间端口都可以同时收发数据。

 

TCP/IP协议:虽然数据可以通过以太网传输,完成通信。但以太网是没有一个传输保障机制的网络,不会进行校验纠错等。因此需要增加层次进行保障。

IP:以太网仅仅实现了下三层(物理层,链路层,网络层),但由于需要和TCP/IP协作,网络层的地址也被映射为IP,由此掩盖了第三层网络层。

  虽然TCP/IP将所有类型的地址都映射为IP地址,但交换机只识别MAC地址,因此需要IP地址映射为MAC地址。ARP协议则专门进行这类处理。

  IP层还需要适配链路层和传输层,MTU作为最大传输单元,对于过大数据将被切分,并记录起始位置和偏移量。数据全部到达目的地之后,再进行组装。(每部分都有IP头部,但只有第一部分有TCP头部)

TCP和UDP:位于IP之上。TCP/IP协议对上层的接口则为Socket接口。

      TCP保障发送的数据包会到达接收方,若发生错误还会发送错误信息。UDP没有传输保障,除了相对以太网更方便调用,没有本质区别。

      当数据从应用生成,会调用Socket接口向接收方发送数据,应用程序通知TCP/IP去特定内存拷贝数据到Socket缓冲区,TCP从缓冲区通过IP分片,发送到网络对端。

      TCP通过MSS调整发送给IP层的数据大小,为了避免IP分片,通常MSS=MTU-IP头-TCP头。由于发送途中不同链路的MTU可能不同,因此有机制会探测最小的MTU来估算MSS。

      TCP将上层数据分段,IP将其分片(若大于MTU),当收到时再将分片合并段,TCP将其顺序排序即可。

      UTP对于数据只会一次性发出,分片等都让IP层去做。也不需要握手机制,因此头部仅有8字节,适合实时性高,可靠性不高的场景,如实时视频音频。

      端口号:对于应用程序调用Socket时,必须声明目标计算机的端口,否则无法知道是和哪个应用连接,数据包放到哪个程序缓冲区。

 

TCP/IP和以太网的关系:是一种互利而不是互存的关系。TCP/IP除了利用以太网还可以用一切适合的硬件,如 无线电波,红外线,USB等。

           以太网也有编制和寻址的功能,但相对TCP/IP来说就黯淡了很多。

第十二章 异军突起 (TCP/IP,以太网,SAN,PoP)

TCP/IP对比FC:FC对于下四层都有定义,TCP/IP只有网络层和传输层

         (作者当时)FC能跑出4G/s,以太网正常100Mb/s,1Gb/s需要超常发挥,10Gb/s需要修炼

        TCP/IP字头需要40字节,FC只需要24字节。以太网交换机MTU一般1500字节,FC超过2000字节。传输效率也高。  

        因此,FC性能更好,服务器和存储愿意用FC。 

TCP/IP,以太网的优势在于:便宜,应用广泛。FC兼容性和扩展性差,费用太高。

ISCSI协议:用于SCSI语言在Internet上传输。因此只有IP可达,两个节点就可用ISCSI通信。

ISCSI交互:(初始化一块ISICI协议提交的LUN磁盘。(会进行查询和修改MBR))

      1~8.主机端(ISCSI Initial)会向LUN(ISCSI Target)读取容量信息,返回数据可以看到LBA数和总容量。9~10. 发起Test Unit Ready,查看是否准备就绪。

      11~13 发送Mode Sense查看逻辑与物理的相关参数。14. 底层ACK。15~16. 读取第一个LBA,即MBR。17.向0号LBA写入数据。18~57.多次发出读取LBA0,容量等,此时磁盘初始化已经完毕。

对于ISCSI交互,写入16个扇区(16*512=8192),ISCSI头部48字节,TCP/IP下第一个包头40字节,其余20字节,纯ACK60字节,以太网14字节。总606字节,606/(606+8192)约等于6%的开销。

 

如图12.16,为采用ISCSI的盘阵,即前端变成了以太网接口。(看起来和一个PC主机无异,含有CPU,内存,外设。区别在于主机运行业务逻辑,盘阵则是处理SCSI指令和优化磁盘读写程序)

 

因此,将ISCSI为代表的的TCP/IP作为传输方式的网络存储系统称为IP SAN。IP SAN并不一定用以太网做链路层,可以使用ATM(IPoA),PPP,HDLC甚至FC。

TCP/IP性能增强:

1. Checksum Offload(CO):对于TCP包的校验需要耗费主机CPU,因此采用CO技术,将校验工作转移到网卡的硬件。

2. Large Send Offload(LSO):需要适配MTU的值,这项工作也可以转到网卡。

3. TCP/IP Offload(TO):将TCP/IP整个程序都放到网卡,这种网卡称为TOE卡。

4. Security Offload(SO):除了将TCP/IP放到网卡,还将IPSEC协议,对数据包的加密也放到网卡。

5. ISCSI Offload(IO):将TCP/IP+SCSI都放到网卡。看起来是SCSI卡,其可以设置自己的IP地址和TCP/IP和ISCSI参数。

 

FC SAN:相对IP SAN部署成本大约是10倍,FC作为专用网络扩展性差,FC部署较难,FC极其不开放导致即使有标准也不全兼容。因此FC唯一的优势就是速度,但不知道之后会怎样。

ISCSI配置:

1. 创建LUN:1. 创建Aggregate(Aggr),即包含多个RG(Raid Group)。2. 基于Aggr创建Vol。3.基于Vol创建LUN。4.创建Igroup,用来映射主机与LUN。

2. 挂载LUN:1.确定与Igroup映射一致。2.添加ISCSI Target端口,发现LUN。3.识别LUN。4.进行初始化LUN。

第十三章 握手言和  (FC,IP,协议之间相互作用,协议融合)

 FC的扩展性问题在于:如果距离过远,需要自己架设光缆,或租用电信光缆,其费用过高。

           而即使采用专用线路,也只是保证带宽,没有完全匹配FC对接的设备。

          考虑让FC协议封装到TCP/IP中进行传输。

Protocol over Protocol(PoP):协议打包映射到另一个协议之中。可以认为是协议融合。

 

以太网和TCP/IP:以太网和TCP/IP是逻辑分开的,但为何总是组合说呢?

        IP作为身份标识,原理上讲MAC已经足够,但MAC有48bit效率太低,同时由于存在非以太网系统,因此需要统一。ARP协议则用来地址映射。

        IP最大的作用为寻址,适配链路层MTU,无法提供传输保障。x25是一个很好的传输保障的协议,为了运行在极不稳定的网络,随着链路质量提高,x25逐渐被废弃。Frame Relay则抛弃了x25的很多保障机制,仅留下了流控措施,因此没有实现端到端的保障机制。

        TCP运行在通信的两个终点上,而不是在通信路径上,因此保障了端到端的无误。

        可以看出,以太网使用广泛,第三层和第四层中IP,TCP也是其最广泛的,因此以太网+TCP/IP常常组合。

 

网络通信协议的四级结构:

1. Payload层:承载与本协议无关的数据,即要传输的数据。其数据也可以是另一种协议的信息表示层+Payload数据,如果是这样则称为协议A封装了协议B,或协议A承载了协议B,或B is over 协议A(BoA)

2. 信息表示层:附加在Payload层之外的数据,也称作协议开销。

3. 交互逻辑层:运行在双方协议上的动作程序代码逻辑,根据信息表示层,做出相应动作。

4. 寻址层:帮助协议来找到目标的编制和寻址机制。

 

协议和协议之间相互作用的三种方法:

1. 调用(Use):一个协议完全利用另一个协议。

    用于一个协议没有某些功能,需要另一个协议提供功能,如TCP调用IP。IP又调用以太网。

2. 隧道封装(Tunnel):一个协议将另一个协议的完整数据包打包到新协议的数据包。

      打包传输到目的地,再将内存提取出来。

3. 映射(Map):一种协议对另一个种协议的翻译,将Payload层数据提取。

        将协议的全部逻辑,映射到对应相似功能。

VPN:Tunnel的另一个作用就是伪装,IP中的GRE(通用路由封装),将IP协议承载到IP协议上,使得不能在公网路由的包,封装成可以在公网路由的包。

   举例:当今发送实物可以走邮政或者快递。若将信件在邮政填好信息,在放到快递内填好信息,相当于进行了封装,快递提供了普通邮政提供不了的高效

      若A公司在北京没有分部,但某人想发送到北京,A公司可以将物品在分装到 在公司有分部的B公司的快递内。当B公司将其送到后,客户认为是A公司送的。

Map的方式:由于Tunnel需要带有A公司的信件进行转发。而Map将其直接翻译到B公司的信息,当到达目的地之后再翻译成A公司的信息。中间仍感觉不到B公司的存在,还减小开销。

IP与MAC:在寻址层使用了Map。在交互逻辑层可以用Tunnel也可以用Map,在Payload一定用Tunnel。

协议交互逻辑层的Map:对于寻址层的Map只需要地址映射表即可。对于交互逻辑层需要代码转换逻辑。

FC与IP的融合:一种为Tunnel为主的FCIP,一种以Map为主的IFCP。

       FCIP需要双方加FCIP网关,对任何FC逻辑,哪怕一个ACK帧,也需要封装到TCP/IP,使得FC处理机不会感觉到中间TCP/IP的存在。

       IFCP需要加入IFCP网关,将FC协议中止在本地,提取Payload使用TCP/IP形式传输,到达对方后再转为FC。

 

 

而协议的融合不局限与两个,可以更多。

两个系统的融合分为两种:1.系统融合成一个大系统。2. 两地逻辑是独立的,但可以进行通信。如:a地和b地分别有一个以太网交换机,同时连接了多台设备,若需要网络融合。

            1. 采用专线将交换机连接,可以直接发送以太网帧。2. 各加入一个路由器,隔离两面的局域网,但保持通信。

            采用第二种,能保持独立性,还可以保持性能。

SAN系统:若采用FCIP任何FC都透明传递。若采用IFCP,一部分会Map,其余仍需要透明传递。

     融合后SAN成为一个系统,需要主交换机,为其他交换机分配ID,并不停发路由控制帧,选举时产生的帧,若主交换机失败,整个Fabric需要重建,中间的帧需要广域网传递。一方故障影响另一方

独立融合:两端SAN都可以独立工作,都不需要依赖对方。

        让其进行通信,需要协议路由器与SAN交换机通过E端口连接,欺骗SAN交换机,让其认为自己就是主交换机,从此获得SAN下所有节点信息。若一方出现故障,也只是访问超时,不用重建Fabric。

 

第十四章 变化莫测  (虚拟化,In Band,Out Band)

早期计算机单任务模式:同时只能执行一个任务,整个计算机被系统占用,多人排队使用计算机,每个人依次插入软盘,重启并等待结束,抄下计算结果。

操作系统的多任务模式:操作系统也作为一个程序,被首先执行,载入其他程序,可以获取CPU,但同时只能运行一个程序,此时叫单任务操作系统,DOS。

           在此基础上,系统一个接一个排列起来,成批执行,省去了人为载入的过程,这时叫批处理操作系统。

           之后采用了中断技术,中断时钟到来后,根据中断向量表,跳转到内存地址入口。每次根据优先级跳转到不同程序的入口。并将上个程序的内存状态保存。

虚拟化:硬件逻辑虚拟化成汇编语句。汇编语句虚拟化成高级语言,高级语言封装成特定目标的程序,或函数,函数组装成最终的应用程序。

 存储子系统的虚拟化:磁盘,磁盘控制器, 存储网络,磁盘阵列,卷管理层,目录虚拟层,文件系统虚拟层。

1. 磁盘控制器:磁盘控制器接收驱动器的读写信息,向磁盘发送SCSI指令。因此,磁盘控制器可以对驱动器隐藏挂载的磁盘。

       如控制器将物理磁盘组成RAID Group,在RG基础上,虚拟出LUN,发给驱动。

2. 存储网络:由于存在网络化,无论是TCP/IP还是FC的SAN,必当通过交换设备来通信。因此在交换机上加入SCSI感知模块即可。

      如当交换机收到对一个LUN操作时,可以自主对另一个LUN进行镜像操作。这样当一个LUN损坏,可以自动重定向到镜像。

3. 磁盘阵列:由于本身就是一个小计算机系统(JBOD,扩展柜除外),因此可以达到最佳的抽象虚拟化。

      对于NAS网关和某些存储设备,既可以作为主机使用,又可以作为存储设备。当他面对主机就是存储设备,面对存储设备又成了主机。但有助有统一管理调配资源。如图14.1

 

 

4. 卷管理层:运行在主机的功能模块,负责底层物理磁盘和LUN的收集再分配。如:将对各LUN做出软RAID。

5. 目录虚拟层:数据存在磁盘中,很不容易查找,因此采用链表作为记录存放在固定位置,每次通过这个表,就能找到数据在磁盘上完整分布情况。每个完整的数据称为文件。因而文件可以在磁盘不连续存放。

       记录文件分布情况的特殊文件叫做元文件。

6. 文件系统虚拟层:文件系统目录是虚拟的,任何文件系统都可以挂载在这个目录下。

 

带内(In band):控制信令和数据走同一线路。如IP网络中路由协议产生的数据包。

带外(Out band):控制信令和数据不走同一线路。

带内虚拟化:虚拟化设备在发起者和目标之间,执行中介操作,发起者只能看到虚拟化的虚拟目标。

带外虚拟化:在路径旁另起一条路径,走控制信号。发起者必须咨询虚拟化设备,才能发送请求。

如图14.3。左面服务器为正常,右面为采用SanFS的带外虚拟化服务器,对于文件系统的操作需要通过以太网。(已经不是网络文件系统,因为他可以看到卷)

SanFS的意义:剥离文件系统逻辑减轻主机负担。相对NAS他只传元数据,实际数据仍通过SAN网络写入盘阵等设备。多台主机可以共享一个卷,因此都要和SanFS控制器通信。(控制器和文件系统在一起)

 

 

 如图14.4。带内虚拟化需要将操作发给NAS,NAS再将操作发给LUN。而带外通过SanFS控制器查询后,只需要写入LUN即可。

 

硬件网络设备:如路由设备,上层仍需要软件来处理网络数据包程序。

软件网络程序:硬件设备基础上,模拟软件网络转发引擎。

       MQ(Message Queue)消息转发软件引擎。充当消息转发器。

       MB(Message Broker)应用逻辑转发引擎,不仅是底层转发还能做到应用层,类似邮件服务器。

HPC:包括多个计算机,计算机各有分工。计算节点:专门计算数据为CPU密集型。存储节点:专门用于存储为IO密集。

   虚拟CPU和内存(计算节点) 向 虚拟硬盘(存储节点)读写数据。对于单台计算机可以采用高速IO如PCIE。对于HPC,若IO密集可以采用高速传输方式Infiniband。CPU密集可以采用低度的以太网。

-----------------------TODO NetApp VTL 虚拟磁带 -------------------

 

第十五章 众志成城 (分布式,群集,高可用性群集,负载均衡群集,高性能群集)

高可用性群集(HAC):HA集群中,节点分为活动节点和备份节点,一旦活动节点故障,备份节点可以替代其工作。接管如:IP地址,主机名,磁盘卷,应用程序上下文等。

负载均衡集群(LBC):所有节点参与工作,节点地位相同。由某一节点向其他节点分配任务,或者协商任务的分配。

高性能群集(HPC):与LBC本质相同,作为超大运算量的系统。处理复杂逻辑和耗费CPU与内存的任务。

          HPC集群中,为了增加CPU核心数,可以引入几十台,几百台计算机,每个可以有多个CPU,每个CPU可以有多个核。

硬件层面的群集:

1. CPU的群集:如对称多处理器,多个CPU共享内存,共同协作。

2. 内存集群:多条物理内存组成更大空间,通过如双通道(相当于条带化的RAID 0)提高性能。

3. 以太网卡的群集:将多块网卡虚拟成一块网卡,底层可以通过ARP轮询来负载均衡,或HA方式的多路径访问。

4. 以太网及IP网络设备的群集:多台设备协作转发数据包。

5. 显卡的群集:对多块显卡连接,实现对大型3D数据渲染的负载均衡。

6. 显示器群集:电视墙。

7. FC卡的群集:通过与主机多路径软件配合,FC卡之间实现流量负载均衡。

8. FC网络设备的群集:群集的逻辑运行在FC节点上。

9. 磁盘阵列控制器群集:高端磁盘阵列的控制器为双控。

10. 磁盘的群集:如RAID。

软件层面的群集:

1. 应用程序的群集:可以启动多个应用进程(实例),不同实例可以在同一机器或者不同机器。

2. 文件系统的群集:如NFS和CIFS,为了实现容量,性能,共享。

         容量:分布式文件系统,将节点上可用空间,形成虚拟目录。

         性能:多个节点协作,不需要昂贵的磁盘,就可以有较高文件IO性能。

         共享:利用分布式锁,保证不会写冲突。

3. 卷管理系统的群集:本机卷与远程卷协同操作。

 

Windows Server2003群集:要求每台服务器有两块网卡,一块用于连接网络传输,一块用于心跳检测。

----------------------TODO MSCS集群平台,SQL Server数据库服务---------------

 

第十六章 未雨绸缪  (数据保护,快照,CDP,数据备份,备份通路)

 数据保护:

1. 文件级备份:备份软件只能感知文件这一层,将磁盘的文件备份到另一个介质。(要么依靠文件系统的API,要么本身具有文件系统的功能,能识别文件系统的元数据)

       基本机制:将数据以文件形式读取,并存储到另一个介质。因此,原介质存放可能不连续,但新介质很大程度是连续的。

       随身听记录的是模拟信号,电流强磁化就强。磁生电时就强,用磁信号的强弱表达声音震动的强弱。Mp3则用数字信号,因此需要转换,相对模拟信号较差,算法也复杂。抗干扰能力强。

         VTL则为虚拟磁带库,用磁盘模拟磁带,中间进行映射转换。

2. 块级备份:不需要考虑文件系统逻辑,不管块上有没有数据,是哪个文件。对于磁盘块指的是扇区sector。只需要对扇区读写,写到新磁盘的扇区。(如:RAID 1)

高级数据保护:

3.  远程文件复制:把需要备份的文件,通过网络传输到异地容灾地点。如:rsync会监视文件变化,将文件变化的内容,通过网络传递到异地站点。

4. 远程磁盘镜像:基于块的远程备份。分为同步复制和异步复制。同步复制则需要等远程也写入以后,才返回写入成功。异步只需要本地写入即可。因此异步不能实时保证数据一致性。

5. 块(快)照数据保护:对于产生镜像,需要停掉主机,备份数据,之后每当主卷数据变化,通过一份位图(每一位代表一个扇区是否变化)来知道数据是否一致,并不断恢复不一致的位。因此较麻烦。

  1. 基于文件系统的快照:文件系统的管理思想在于链表,B树,位图等,也就是元数据。首先将扇区合并成块,NTFS最大每个块4KB,即8个扇区一个簇块。元数据规模降低8倍。

             首先会创建簇块的位图文件,某簇被文件使用则位图对应位为1,否则为0。并记录文件与簇号的映射链,而映射链和簇位图这些元数据的起始入口(root inode)需要固定

             当卷要写入一个新文件,需要查找簇位图,找到为0的位的簇号,计算空间后将其分给文件。先将数据写入簇,再去更新文件-簇号图,记录对应关系,最后更新簇位图。

             若要删除文件,将文件簇号映射链删除簇的记录,然后将簇位图对应位的1改0即可。因此数据不回擦除,但是新数据写入时会进行覆盖。

               因此,做快照时,仅仅需要记录文件系统的映射表,以及链表等元数据,并且当新IO重新写入到新的文件或空闲地方即可。如图16.1

             因此,这时再将快照下来的原卷数据拷贝出去即可。甚至可以不用拷贝,无非所有数据都更新后,占用空间变为2倍。

 

   2. 基于物理卷的快照:对于扇区都是LBA编号,实现快照后记录当前LBA表,当有新数据写入,将写入新卷LBA,并记录映射关系。因此文件系统根本不知道存在新卷。只需要写入原卷即可。

             但对于写入需要查询映射,降低了性能,因此叫Write Redirect(重定向写)。即:新数据写入新地方,旧数据不变。

            Copy On Write则是在写入新数据后,将旧数据拷贝到新位置,而一旦更新过一次,之后直接覆盖即可,不需要遍历映射表。

             保险起见,对于快照后,需要进行备份,因为快照与数据共享LBA,一旦卷有损坏,快照也不复存在。

  3. Write Redirect与Copy On Write:在没被更新过的扇区写IO时,都需要占用新卷的块。因此只有原卷全部更新,新卷才需要和原卷同样大的容量,通常30%就够了。

                  Copy On Write对于未更新的块,需要先读取,再写入新卷,再将更新覆盖到原卷,需要一次读,两次写。Write Redirect只需一次写,更新映射图在内存中。

  4. 快照的意义:对于一次IO是原子的,但对于事务中间由多次IO构成,可能快照发生在两个IO之间,这样下来的快照数据是不完整,不一致的。但快照效率远比备份快,对于快照恢复也只是IO重定向。

          对于快照不一致,可以在恢复数据后,通过一致性检查从而纠错,或利用日志文件。同时可以用软件,在生成快照前,让应用或系统将缓存数据Flush到磁盘。

          对于删除数据块,在做完快照后,仅仅在inode tree的块进行更新/覆盖,并将簇位图标记为空闲,当有数据追加到空闲块,仍会被重定向或写前拷贝。

6. Continuous Data Protect(CDP,连续数据保护):不影响主要数据运行的前提下,跟踪数据发生的任何变化,并能恢复此前任意时间点。

                        文件级CDP:记录文件的变化。块级CDP:捕捉IO变化。

                        Linux下由:主机磁盘设备,CDP仓库设备,CDP元数据设备构成。
                        主机设备为主机的真实数据。CDP仓库,记录了每个时刻的数据。CDP元数据记录了,该数据写入的时间,长度,主机的起始位置,仓库的起始位置。

数据备份基本要件:备份主体(备份源),备份目的(备份到何处),备份通路(总线还是网络),备份引擎(备份软件),备份策略(规则)。

备份目的:

1. 本地磁盘作为备份目的:不需要服务器,以及网络。但对于自身的性能有影响,耗费磁盘资源,对于读出以后在写入还会耗费内存资源。

2. SAN磁盘作为备份目的:数据读入内存,再写入SAN,优势在于写入只耗费SAN带宽,对主体性能影响较小,但占用了带宽。

3. NAS目录作为备份目的:占用了前端网络带宽。

4. SAN磁带库作为备份目的:用FC接口作为外部传输接口的设备。

5. 信息生命周期管理:可以将旧数据,冷数据,不频繁使用数据放入磁带库等低速低成本的存储设备。

6. 分级存储:一级磁盘阵列,频繁访问数据的磁盘阵列,性能高。二级虚拟磁带库,存放不太频繁,且性能不太低,利用了低廉大容量的SATA。三级磁盘库或光盘库,存储几年甚至几十年都不会访问的数据。

 

备份通路:        (个人理解:前端网络指作为服务器或一个主机所能拥有的带宽,后端网络指连接存储设备的带宽)

1. 本地备份:数据的流向为:本地磁盘-总线-磁盘控制器-总线-内存--总线-磁盘控制器-总线-本地磁盘。即,从本地磁盘出发,通过总线到达内存计算后返回磁盘。

2. 前端网络备份:本地磁盘-总线-磁盘控制器-总线-内存-总线-以太网卡-网线-以太网-网线-目标计算机网卡-总线-内存-总线-目标计算机磁盘。即,从本地磁盘通过总线到达内存,通过网卡网络到达目标计算机。

        前端网络指的是,服务器接受客户端连接的网络,后端网络对客户封闭,处理服务器后端部件的连接。

3. 后端网络备份:本地磁盘-总线-磁盘控制器-总线-内存-总线-后端网络适配器-线缆-后端网络交换设备-线缆-备份目的后端网络适配器-总线-内存-备份目的的磁盘或磁带。(后端网络适配器:FC,以太网卡等)

4. LAN Free备份:表示备份时不经过前端网络。

         好处在于不耗费前端网络的带宽,因此对客户端没影响。并且前端较慢,资源珍贵。

        但上述方式,都需要服务器执行读取数据写入数据,耗费了CPU,内存资源。

5. Server Free备份:备份时不经过服务器的总线和内存,消耗极少。

          首先源和目的都不能在服务器,否则仍要经过服务器总线。因此可以采用SAN。同时用SCSI扩展命令,让设备提取数据写入备份,而不用发给主机。或者用另一台计算机专处理移动数据。

 

备份引擎:

1. 备份服务器:备份服务器制定策略,通过前端网络连接备份服务器。而本机只需要启动备份代理程序,等待备份服务器的命令即可。

       路径:本地磁盘-总线-内存-总线-SAN 网络适配器-线缆-SAN 交互设备-磁盘阵列。数据备份成功后,发送给备份服务器,备份服务器记录好成功与否以及时间。

2. 介质服务器:用一台计算机专门处理备份,当某台计算机需要备份,与该设备连接即可。

如图16.8. Veritas Netbackup备份软件的流程。

1. 某时刻,备份服务器发起备份,通知介质服务器A,备份 “带备份服务器C”的内容。

2. 介质服务器A发送可以备份命令。

3. “带备份服务器C”把需要备份的数据通过以太网发送给介质服务器A

4. 介质服务器A将数据写入磁带机。

可以看出:备份服务器为调度员,介质服务器为仓库房间管理员,待备份服务器为存储货物的人。

 如图16.9 Fronted Free备份方式(不带用介质服务器)

1. 备份服务器通过以太网向三台待备份服务器发送备份指令

2. 待备份服务器写入备份目的。

 三种备份方式:

1. 完全备份:将当前全部数据整个备份下来。

2. 差量备份:将上次完全备份到现在的差量进行备份,因此必须有一次完全备份作为基点。

3. 增量备份:自从上次备份(可以是完全备份,差量备份,增量备份)到现在的变化进行备份。

 

 

 如图16.11:备份服务器制定策略,让各个服务器按照规定时间,备份源,备份目的进行备份。数据流不经过前端网络,属于Frontend Free 备份

如图16.12:这种方式支持各个操作系统平台,各个模块安装在不同操作系统,由TCP/IP通信可以屏蔽操作系统。备份由houseprd执行Master Server模块,Master进行调度,将数据通过SAN传给磁带库。

 第十七章 愚公移山  大话数据容灾(本地站点,远程站点,数据通路,同步复制,异步复制,基于主机的数据复制,基于存储的数据复制)

容灾:数据备份只能保证数据复制了一份,一旦系统发生故障,必须让备份的数据快速恢复到生产系统,这个动作叫做容灾。

   因此需要在本地数据损毁情况下,远程备份程序可以启动,并生产。

生产资料的容灾,必须将不断变化的原始数据复制到备份系统,实时同步。尽量保障数据的最后状态,可以一天备份多次。

如:1. 网络连接本地系统和备份系统,将某时刻数据实时传给备份系统。2. 将该时刻后的数据也传送给备份系统 3. 不断将本地变化的数据传给备份系统。

为了让主站点与备份站点有相同数据:

1. 前端网络同步:前端以太网,均由路由器连接到专线或Internet网络。主站点发生变化通过前端发送给备份站点。服务器收到数据后写到后端磁盘阵列。如图17.2.

        专线网络适合保证数据的实时性,不适合大量数据传输。以太网适合实时性不高,大量数据传输。

        路径:磁盘阵列-后端网络交换设备-本地服务器内存-本地前端网络-交换机机组-远端前端网络-远端服务器内存-远端后端网络交换设施-远端磁盘阵列。(本地磁盘则跳过后端网络)

        这种方式的同步一般采用文件级别,只检测文件的数据变化如文件写入。

        HADR:1. 需要主备服务器,当主数据库服务器发生事务操作,将日志发送给备用数据库服务器,备用数据库服务器对日志重放。

            2. 当主服务器出现故障可以让备用作为主服务器进行读写。3. 当原来主服务器修复,可以当做备份服务器重新加入。如图17.3

        HADR三种同步方式:1. SYNC(同步):只有备份也写入日志时,才返回成功。2. NEARSYNC(接近同步):日志写到主数据,并且写入备份数据库的主寄存器,才认为成功。

                  3. ASYNC(异步):日志到达主数据库的日志文件,并且传给主机的TCP,认为成功。

 2. 后端网络同步:必须将后端网络设备连接起来。如果距离较近可以自主布线连接SAN交换机,如果距离较远必须用光纤专线,因此中间还需要转为电信部门的SDH传输方式,对于用户端用E1,OC3编码。

         如图17.7。对于源的FC协议,通过FCIP网关转为基于以太网的IP协议,经过E1以太网承载到E1协议,最终汇聚到光端机,通过光缆在SDH上传输,最后到达目的地后解析成FC。

        这样主站点可以直接访问备用站点,不需要前端。直接在备用站点读写数据。如图17.8

        路径:本地磁盘阵列-SAN网络交换设备-本地服务器内存-SAN网络交换设备-通过协转到电信部门-远端SAN交换设备-远端磁盘阵列。

        可以看出采用后端网络,由于主服务器有备用服务器存储的访问权,因此不需要经过备用服务器参与。但由于涡轮泵(实现数据同步的软件)在服务器因此必须经过服务器。

 

 

 Vertias Volume Manager软件:辅助或代替操作系统自己的磁盘管理模块来管理底层的物理磁盘。对于Windows Server的动态磁盘管理,不够灵活。而VxVM卷管理软件可以替代操作系统的卷管理功能。

              支持RAID动态扩展。用户在服务器上配置VxVM后,就能实现对两个卷的镜像操作。

Logcal Volume Manager软件:是Linux开源的卷管理模块,相对VxVM更开放。

3. 通过数据存储软件实现专用网络同步:第一种方式有两个泵。第二种需要一个。第三种泵不在服务器上,也不在网络设备,而是安装在服务器上。

                  数据自己通过SAN设备传到目标设备。路径比第二种方式少两步,同时彻底解脱服务器。

                  路径:本地磁盘阵列-本地SAN网络设备-电信部门交换机组-远端SAN网络设备-远端磁盘阵列

                  因为磁盘阵列有自己的CPU,内存等,因此可以运行同步软件,但其只能识别块,当块进行改变就会进行复制。

 

 

 

 可以看出,第一种:路径最长,同步实时性最差,最廉价。第二种:数据实时性强,但后端比第一种要求高,不适合大量数据。第三种:路径最短,服务器没影响,不能保证数据可用性(因为服务器有缓存)

     主站点发生故障,备份站点强行接管主站点的工作,断开同步,备份站点成为主站点。

 

同步复制:1. 服务器发出IO请求,向某LBA写入数据,数据进入磁盘阵列的缓存,但此时磁盘控制器不会反回写入成功。

     2. 主站点磁盘阵列发送变化,从缓存写入LUN A中,主站点数据同步引擎检测到变化,将数据块从缓存直接通过SAN交换机发送给备份站点的磁盘阵列缓存。

     3. 备份站点磁盘阵列收到同步数据,会发送ACK应答。

     4. 主站点收到应答后,发送给服务器一个应答,并向上层发送成功信号。

  如果备份站点迟迟不发送应答信号,就会处于IO Wait。导致上层相关进程或线程被挂起。

异步复制:1. 服务器发送IO请求,向某LBA写入数据,数据写入磁盘阵列缓存,但此时不会返回成功。

     2. 主站点磁盘阵列的策略如果是Write Back则立即返回底层应答,如果是Write Through,则先写入LUN A,再返回应答。

     3. 将数据通过SAN网络发送给备份站点。

     4. 备份站点成功接收后返回成功信号。

  这种情况,主站点磁盘阵列收到数据,就返回成功。而数据变化非严格同步。这样当主备中网络异常,主服务器只要能读到本地数据也不会受到影响。

  因此会导致主站点和备份站点中间存在间隙(GAP),未被复制到远端的数据。一旦发生故障,这些数据就会丢失。

  一般来说采用折衷办法,当网络正常采用同步复制,网络异常采用异步复制。

 

生产者的容灾:即服务器容灾。

       需要在备份站点安装并配置好,但不能让其处于工作状态。同一时刻只有一个站点的生产者处理一份资料。

本地容灾系统的两种存储模式:

1. 共享存储模式:对于多个节点共同拥有一个或者几个卷,同一时刻只有活动的节点才能挂载该卷进行IO读写。

2. Share-Nothing:每个节点都有独占的存储卷,数据在多份时,每个节点可以互相同步数据。

两种模式对比:

1. 数据本身是否容灾:共享模式下,节点共享一份数据,当这份数据损坏,只能通过拷贝备份镜像加以还原。因此不容灾

          Share-Nothing下,每个节点都有数据的拷贝,因此容灾。

2. 软硬件成本:共享模式,每个节点共享一份数据,需要外接的磁盘阵列为了保证数据访问速度,需要实现RAID,并且在主机安装适配器,增加了系统成本。

       Share-Nothing,每个节点各自保存,不需要额外成本。

3. 前端网络资源耗费:共享模式,节点交互信息通过前端,因此耗费较低。

          Share-Nothing数据同步耗费前端,因此资源耗费较高。

4. 管理难度:共享模式,不但需要管理节点的交互配置,还需要管理外部存储系统。

      Share-Nothing,管理节点间交互配置即可。

5. 是否需要停机:共享模式,数据从单机转到共享存储环境时,需要停机。

        Share-Nothing,数据同步是动态的。

6. 实现复杂度:共享模式,需要节点,节点间交互,共享数据。

       Share-Nothing,需要节点,节点间交互。

7. 是否需要第三方软件:共享模式,需要第三方监控主节点状态。

           Share-Nothing不需要任何。

8. 故障因素数量:共享模式,容灾出现故障,需要排查:操作系统,应用程序,HA软件。

        Share-Nothing,只需要操作系统与应用程序。

 

异地容灾系统中的IP切换:因为主服务器和备份服务器通常不在一个广播域。如果发生故障,如何让客户端无感知。

            可以修改路由器的路由表,将IP包路由到主节点,也可以修改DNS。普遍让客户机连接主机名,出现故障,通知客户端修改host文件。

异地容灾中的卷切换:对于主备节点的两个卷,可以通过前端网络或者后端网络同步。当HA检测主节点通信失败,便会断开主备卷的同步(不断开,备份卷会被锁定不可访问)

          这时HA软件才能在备份机嗲用操作系统挂载这个卷。

异地容灾系统中的应用切换:即生产者切换,是HA容灾系统故障后最后一步。

 

posted @ 2020-02-27 12:04  注册以后还能改吧  阅读(315)  评论(0编辑  收藏  举报