前言:
KVM 自Linux 2.6.20版本后就直接整合到Linux 内核中,它依托CPU虚拟化指令(如 Intel-VT 、AMD-V)实现高性能的虚拟化支持。
GFS是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。它运行于廉价的普通硬件上,并提供容错功能。它可以给大量的用户提供总体性能较高的服务。
一、KVM 简介
1.1 KVM概述
- KVM架构很简单,就是内核的一个模块
- KVM是集成到内核的hypervisorI(虚拟监视器),是X86架构且硬件支持虚拟化技术的linux的全虚拟化解决方案,他是linux 很小的模块,他可以利用linux做任务调度,内存管理与硬件设备交互等工作
- 一个虚拟机就是一个普通的linux 进程,通过这个进程的管理,完成对虚拟化的管理
1.2 OpenStack中KVM架构
1.2.1 KVM基本架构
-
KVM
它是底层的hypervisor,模拟CPU运行,但是缺少了对network和周边I/O的支持,所以不能直接使用
-
QEMU-KVM
QEMU-KVM是一个完整的模拟器,它是构建基于KVM上的,它提供了完整的网络和I/O支持
-
libvirt
OpenStack不会直接控制QEMU-KVM,它会用libvirt管理工具来简介控制Qemu-kvm。(libvirt提供了跨VM平台的功能)。
libvirt介绍:是用于管理虚拟化平台的开源API,后台程序和管理工具,它可以用于管理KVM、Xen、VMware ESX、QEMU和其他虚拟化技术
1.2.2 KVM三种模式
-
① 客户模式
可以理解为客户机在操作系统运行中的模式,客户模式又分为内核模式和用户模式
-
② 用户模式
为用户提供虚拟机管理的用户空间工具以及代表用户执行I/O,qemu运行在这个模式下
-
③ 内核模式
主要作用为:虚拟机的调度执行、内存管理、设备管理,实现客户模式的切换、处理从客户模式的退出,KVM内核模块运行在这个模式下
- 以下为三种模式层次关系图
1.3 KVM工作原理
用户模式的qemu利用libkvm通过ioctl(input/output control 专用于设备输入输出操作的系统调用)进入内核模式,kvm模块为虚拟机创建虚拟内存,虚拟CPU后执行VMLAUCH指令进入客户模式,加载guest os并执行。
如果Guest OS发生外部中断或者影子页表缺页之类的情况,会暂停Guest OS的执行并保存当前操作,同时退出客户模式来进行异常处理。内核模式处理这些异常时如果不需要I/O 则处理完成后重更新进入客户模式,如果需要I/O 则进入到用户模式,由Qemu来处理I/O,处理完成后进入内核模式,再进入客户模式,以下为工作流程图
二、GFS 简介
2.1 GFS 概述
- GFS全称为Google File System,为了满足Google迅速增长的数据处理要求,google设计并且实现了google文件系统(GFS)。Google文件系统是一个可扩展的分布式文件系统,用于大型的,分布式的,对大量数据进行访问的应用
- 它运行于廉价的普通硬件上, 并提供容错功能。 它可以给大量的用户提供总体性能较高的服务。
2.2 GFS 架构
2.2.1 GFS 基本架构详解
-
GFS文件系统为分布式结构,主要chunkserver(大块设备)由一个master和众多chunkserver构成的
-
GFS特点包括:扩展性和高性能、高可用性、全局统一命名空间、弹性卷管理、基于标准协议
-
GFS通过弹性HASH算法地址空的唯一性
-
基本架构如下图:
-
工作过程如下:
① 客户端使用固定大小的块将应用程序指定的文件名和字节偏移转换成文件的一个块索引,向master(主)发送包含文件名和块索引的请求
② master收到客户端发来的请求,master向块服务器发出指示,同时时刻监控众多chunkserver的状态。Chunkserver缓存master从客户端收到的文件名和块索引等信息。
③ master通过和chunkserver的交互,向客户端发送chunk-handle和副本位置。其中文件被分成若干个块,而每个块都是由一个不变的,全局唯一的64位的chunk-handle标识。Handle是由master在块创建时分配的。而出于安全性考虑,每一个文件块都要被复制到多个chunkserver上,一般默认3个副本;
④ 客户端向其中的一个副本发出请求,请求指定了chunk handle(chunkserver以chunk handle标识chunk)和块内的一个字节区间。
⑤ 客户端从chunkserver获得块数据,任务完成。
2.2.2 GFS架构体系
- 一个GFS群集由一台master服务器(有备份),多台chunk服务器组成,客户端,架构上比较简单
- chunkserver:数据存储节点,文件被分割为固定大小的chunk,每个chunk被唯一标识,默认情况下chunk存储3个副本
- chunk:每个·文件至少存储为一个chunk,每个chunk以普通的Linux文件存储,chunk尺寸大小选择是一个关键的设计参数,默认为64MB,每个chunk有全局64位唯一标识符
- GFS文件系统是可以被多个用户同时访问,一般情况下,Application和chunkserver是可以在同一台机子上,主要的数据流量是通过Application和hunkserver之间,由于数据访问的是本地减少了Application和master之间的交互访问,减少了master的负荷量,提高了master的利用性能
- master中保存着三类元数据(metadata):文件名和块的名称空间、从文件到块的映射、副本位置。所有metadata都放在内存中。操作日志的引入可以更加简单、可靠地更新master的信息
- master作为GFS的控制和神经系统,副本为master的备份,chunk主要用和用户交换数据,网络中的主机瘫痪,不会对整个系统造成大的影响,替换上去的主机会自动重建数据。即使master的瘫痪,也会有shadow作为替补,并且shadow在一定的时候也会充当master来提供控制和数据交换.
2.3 GFS 卷类型
-
① 分布式卷
相当于windows中的跨区卷,没有对文件进行分块处理,通过扩展文件属性保存Hash值,支持的底层文件系统有ext3、ext4、zfs、xfs
特点
- 文件分布在不同服务器,不具备容错能力
- 单点故障会导致数据丢失
- 依赖底层的数据保护(硬件设备)
-
② 条带卷
相当于windows中的带区卷,类似RAID 0,根据偏移量将文件分为N块(N个条带节点),轮询的存储在每个Brick server节点;存储文件越大,读写效率高,但不具备容错性
特点
- 数据被分隔为更小块分布在块服务器集群中的条带区
- 分布减少了负载,同时更小的文件加速了存取的速度
- 无容错能力
- 读写效率高
-
③ 复制卷
相当于windows中的镜像卷,类似RAID 1,同一文件保存一份活多份副本,复制模式因为要保存副本,因此磁盘利用率较低,多个节点上的存储空间不一致,那么将按照木桶效应取最低值,作为该卷的总容量
特点
- 卷中所有的服务器均保存一份完整的副本(具有容错能力)
- 卷的副本数量可由客户创建额时候决定
- 至少由两个块服务器或者更多服务器
- 读性能高,写性能下降(因为需要备份文件)
-
④ 分布式条带卷
兼顾分布式卷和条带卷的特点,主要用于大文件访问处理,brick server(块服务器)的数量是条代数(数据块分布的brick数量)的倍数。至少需要4台
-
⑤ 分布式复制卷
兼顾分布式卷和复制卷的功能,用于需要冗余的情况。brick server数量是镜像数(数据副本数量)的倍数。
-
⑥ 条带复制卷
类似RAID 10,同时具有条带卷和复制卷的特点
-
⑦ 分布式条带复制卷
三种基本卷的复合卷,通常用于map reduce(大规模并行计算) 应用
三、实验部分
3.1 实验环境
-
使用六台VMware虚拟机,如下
-
GFS服务器
① node 1 地址:192.168.226.128 ,添加五块磁盘,大小分别为3G,4G,5G,6G,20G
② node 2 地址:192.168.226.132,添加五块磁盘,大小分别为3G,4G,5G,6G,20G
③ node 3 地址:192.168.226.133,添加3块磁盘,分别为3G,4Gÿ