理論部分:
一、KVM概述
- KVM架構很簡單,就是核心的一個子產品
- KVM是內建到核心的hypervisorI(虛拟螢幕),是X86架構且硬體支援虛拟化技術的linux的全虛拟化解決方案,他是linux 很小的子產品,他可以利用linux做任務排程,記憶體管理與硬體裝置互動等工作
- 一個虛拟機就是一個普通的linux 程序,通過這個程序的管理,完成對虛拟化的管理
1. OpenStack中KVM架構
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和其他虛拟化技術
2.KVM三種模式
① 客戶模式
可以了解為客戶機在作業系統運作中的模式,客戶模式又分為核心模式和使用者模式
② 使用者模式
為使用者提供虛拟機管理的使用者空間工具以及代表使用者執行I/O,qemu運作在這個模式下
③ 核心模式
主要作用為:虛拟機的排程執行、記憶體管理、裝置管理,實作客戶模式的切換、處理從客戶模式的退出,KVM核心子產品運作在這個模式下
- 以下為三種模式層次關系圖
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 概述
- GFS全稱為Google File System,為了滿足Google迅速增長的資料處理要求,google設計并且實作了google檔案系統(GFS)。Google檔案系統是一個可擴充的分布式檔案系統,用于大型的,分布式的,對大量資料進行通路的應用
- 它運作于廉價的普通硬體上, 并提供容錯功能。 它可以給大量的使用者提供總體性能較高的服務。
- Glusterfs 檔案系統是由 Gluster 公司的創始人兼首席技術官 Anand Babu Periasamy編寫。 一個可擴充的分布式檔案系統, 用于大型的、 分布式的、 對大量資料進行通路的應用。
- 它運作于廉價的普通硬體上, 并提供容錯功能。 它可以給大量的使用者提供總體性能較高的服務。
- Glusterfs 可以根據存儲需求快速調配存儲, 内含豐富的自動故障轉移功能, 且摒棄集中中繼資料伺服器的思想。
- 适用于資料密集型任務的可擴充網絡檔案系統, 免費開源。
- Gluster于 2011 年 10 月 7 日被 red hat 收購。
1.Glusterfs 特點
1.Glusterfs 體系結構, 将計算、 存儲和 I/O 資源聚合到全局名稱空間中, 每台伺服器都被視為節點, 通過添加附加節點或向每個節點添加額外存儲來擴充容量。 通過在更多節點之間部署存儲來提高性能。
2.Glusterfs 支援基于檔案的鏡像和複制、 分條、 負載平衡、 故障轉移、 排程、 磁盤緩存、存儲配額、 卷快照等。
3.Glusterfs 各用戶端之間無連接配接, 本身依賴于彈性雜湊演算法, 而不是使用集中式或分布式中繼資料模型。
4.Glusterfs 通過各種複制選項提供資料可靠性和可用性: 複制卷、 分布卷。
2.GFS 架構
GFS 基本架構詳解
- GFS檔案系統為分布式結構,主要chunkserver(大塊裝置)由一個master和衆多chunkserver構成的
- GFS特點包括:擴充性和高性能、高可用性、全局統一命名空間、彈性卷管理、基于标準協定
- GFS通過彈性HASH算法位址空的唯一性
- 基本架構如下圖:
3. GFS工作流程原理
① 用戶端使用固定大小的塊将應用程式指定的檔案名和位元組偏移轉換成檔案的一個塊索引,向master(主)發送包含檔案名和塊索引的請求
② master收到用戶端發來的請求,master向塊伺服器發出訓示,同時時刻監控衆多chunkserver的狀态。Chunkserver緩存master從用戶端收到的檔案名和塊索引等資訊。
③ master通過和chunkserver的互動,向用戶端發送chunk-handle和副本位置。其中檔案被分成若幹個塊,而每個塊都是由一個不變的,全局唯一的64位的chunk-handle辨別。Handle是由master在塊建立時配置設定的。而出于安全性考慮,每一個檔案塊都要被複制到多個chunkserver上,一般預設3個副本;
④ 用戶端向其中的一個副本送出請求,請求指定了chunk handle(chunkserver以chunk handle辨別chunk)和塊内的一個位元組區間。
⑤ 用戶端從chunkserver獲得塊資料,任務完成。
4.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來提供控制和資料交換.
5.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(大規模并行計算) 應用
實驗部分:
實驗環境:
node1:192.168.1.10
node2:192.168.1.11
node3:192.168.1.12
node4:192.168.1.13
kvm(兼GFS用戶端):192.168.1.61
一、部署GFS分布式存儲
實驗步驟:
準備環境(以node1為例,其他節點步驟略,請自行配置)
(1)按照表中所示,為node節點添加相應數量和大小的磁盤,并重新開機系統
(2)為所有節點的新磁盤分區
用fdisk指令為每個磁盤分區
node1-4:
[[email protected] ~]# fdisk /dev/sdb
[[email protected] ~]# fdisk /dev/sdc
[[email protected] ~]# fdisk /dev/sdd
[[email protected] ~]# fdisk /dev/sde
(2)為每個節點的每個磁盤格式化
node1-4:
[[email protected] ~]# mkfs -t ext4 /dev/sdb1
[[email protected] ~]# mkfs -t ext4 /dev/sdc1
[[email protected] ~]# mkfs -t ext4 /dev/sdd1
[[email protected] ~]# mkfs -t ext4 /dev/sde1
(3)建立挂載點
node1-4:
[[email protected] ~]# mkdir /b1
[[email protected] ~]# mkdir /c1
[[email protected] ~]# mkdir /d1
[[email protected] ~]# mkdir /e1
(4)挂載磁盤
node1-4:
[[email protected] ~]# mount /dev/sdb1 /b1
[[email protected] ~]# mount /dev/sdc1 /c1
[[email protected] ~]# mount /dev/sdd1 /d1
[[email protected] ~]# mount /dev/sde1 /e1
(5)修改fstab檔案,使挂載永久生效
[[email protected] ~]# vi /etc/fstab
在末尾添加
/dev/sdb1 /b1 ext4 defaults 0 0
/dev/sdc1 /c1 ext4 defaults 0 0
/dev/sdd1 /d1 ext4 defaults 0 0
/dev/sde1 /e1 ext4 defaults 0 0
2:在所有節點上關閉防火牆和selinux
[[email protected] ~]# systemctl stop firewalld
[[email protected] ~]# setenforce 0
3:在所有節點上修改hosts檔案
node1-4:
[[email protected] ~]# vi /etc/hosts
192.168.1.10 node1
192.168.1.11 node2
192.168.1.12 node3
192.168.1.13 node4
192.168.1.61 kvm
4:在所有節點安裝軟體
(1)配置yum倉庫
将GFS所需的rpm倉庫的gfsrepo目錄拷貝到linux系統的/opt下,并修改倉庫檔案(暫時注釋)
node1-4:
[[email protected] ~]# vi /etc/yum.repos.d/CentOS-Media.repo
#[c7-media]
#name=CentOS-$releasever - Media
#baseurl=file:///media/cdrom/
#gpgcheck=1
#enabled=1
#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
[gfsrepo]
name=GFS
baseurl=file:///root/GFS
gpgcheck=0
enabled=1
[[email protected] ~]# yum clean all
(2)在所有節點上安裝gfs
node1-4:
[[email protected] ~]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
5:在所有節點上啟動GFS
node1-4:
[[email protected] ~]# systemctl start glusterd.service
[[email protected] ~]# systemctl enable glusterd.service
6:添加節點(隻在node1節點上)
[[email protected] ~]# gluster peer probe node1
peer probe: success. Probe on localhost not needed
[[email protected] ~]# gluster peer probe node2
peer probe: success.
[[email protected] ~]# gluster peer probe node3
peer probe: success.
[[email protected] ~]# gluster peer probe node4
peer probe: success.
二、kvm(兼GFS用戶端)
實驗環境:
關機狀态設定虛拟機CPU
修改hosts解析檔案:
[[email protected] ~]# vi /etc/hosts
192.168.1.10 node1
192.168.1.11 node2
192.168.1.12 node3
192.168.1.13 node4
192.168.1.61 kvm
安裝所需軟體:
yum -y install groupinstall "desktop" qemu-kvm.x86_64 qemu-kvm-tools.x86_64 qemu-img.x86_64 bridge-utils.x86_64 libvirt virt-manager glusterfs glusterfs-fuse
檢視cpu是否支援虛拟化:
cat /proc/cpuinfo | grep vmx
檢查kvm子產品是否安裝:
lsmod | grep kvm
安裝完成後還需要開啟 libvirtd 服務,以開啟相關支援:
systemctl start libvirtd
systemctl enable libvirtd
橋接模式
主控端:
vim /etc/sysconfig/network-scripts/ifcfg-eth0
添加修改以下内容:
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
#GATEWAY=192.168.10.254
#DNS1=192.168.10.254
#IPV6INIT=yes
#IPV6_AUTOCONF=yes
#IPV6_DEFROUTE=yes
#IPV6_PEERDNS=yes
#IPV6_PEERROUTES=yes
#IPV6_FAILURE_FATAL=no
#IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.1.61
PREFIX=24
IPV6INIT=no
BRIDGE=br0
vim /etc/sysconfig/network-scripts/ifcfg-br0
添加修改以下内容:
TYPE=bridge
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
#GATEWAY=192.168.10.254
#DNS1=192.168.10.254
#IPV6INIT=yes
#IPV6_AUTOCONF=yes
#IPV6_DEFROUTE=yes
#IPV6_PEERDNS=yes
#IPV6_PEERROUTES=yes
#IPV6_FAILURE_FATAL=no
#IPV6_ADDR_GEN_MODE=stable-privacy
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.1.61
PREFIX=24
IPV6INIT=no
重新開機網卡服務生效:
systemctl restart network
确認IP資訊
ifconfig
啟動軟體
virt-manager
建立挂載目錄,并挂載卷
mkdir /kvmdata
mount -t glusterfs node1:models /kvmdata/
檢視挂載卷
df -h
建立存儲池目錄
mkdir /kvmdata/data
mkdir /kvmdata/iso(放系統鏡像)
驗證:
建立完成後,去四台node節點伺服器
ll -h
驗證高可用:
挂起或關閉兩台中一台存儲了虛拟機檔案,看看kvm虛拟機還能否正常運作