KVM+GFS分布式存储搭建(理论+实操)

文章目录

        • 前言:
        • 一、KVM 简介
          • 1.1 KVM概述
          • 1.2 OpenStack中KVM架构
            • 1.2.1 KVM基本架构
            • 1.2.2 KVM三种模式
          • 1.3 KVM工作原理
        • 二、GFS 简介
          • 2.1 GFS 概述
          • 2.2 GFS 架构
            • 2.2.1 GFS 基本架构详解
            • 2.2.2 GFS架构体系
          • 2.3 GFS 卷类型
        • 三、实验部分
          • 3.1 实验环境
          • 3.2 GFS 集群部署
            • 3.2.1 磁盘分区、格式化
            • 3.2.2 环境优化
            • 3.2.3 GFS集群创建
          • 3.3 KVM宿主机部署
            • 3.2.2 KVM虚拟机安装环境
            • 3.2.3 KVM 环境部署
            • 3.2.4 KVM 安装
            • 3.2.5 KVM 网卡配置
            • 3.2.6 KVM管理
        • 总结

前言:

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和其他虚拟化技术
    KVM+GFS分布式存储搭建(理论+实操)_第1张图片

1.2.2 KVM三种模式
  • ① 客户模式

    可以理解为客户机在操作系统运行中的模式,客户模式又分为内核模式和用户模式

  • ② 用户模式

    为用户提供虚拟机管理的用户空间工具以及代表用户执行I/O,qemu运行在这个模式下

  • ③ 内核模式

    主要作用为:虚拟机的调度执行、内存管理、设备管理,实现客户模式的切换、处理从客户模式的退出,KVM内核模块运行在这个模式下

KVM+GFS分布式存储搭建(理论+实操)_第2张图片

  • 以下为三种模式层次关系图

KVM+GFS分布式存储搭建(理论+实操)_第3张图片

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,处理完成后进入内核模式,再进入客户模式,以下为工作流程图

KVM+GFS分布式存储搭建(理论+实操)_第4张图片

二、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算法地址空的唯一性

  • 基本架构如下图
    KVM+GFS分布式存储搭建(理论+实操)_第5张图片

  • 工作过程如下

    ① 客户端使用固定大小的块将应用程序指定的文件名和字节偏移转换成文件的一个块索引,向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,5G,20G

    ④ node 4 地址:192.168.226.134,添加3块磁盘,分别为3G,4G,5G,20G

  • KVM服务器

    KVM虚拟机部署为GFS客户端 地址:192.168.226.200

  • 实验目的

    使用KVM 与GFS结合,达到KVM高可用

    使用GFS 分布式复制卷,对KVM虚拟机文件进行分布存储与冗余

    把文件存放在两个或以上节点,如果其中一个节点数据丢失或损坏,KVM依旧可以通过卷组找到另一个节点上的文件,保证虚拟机正常运行。当节点恢复时,GFS会自动将正常的节点服务器中的数据同步到另一个修复的节点服务器中

3.2 GFS 集群部署
3.2.1 磁盘分区、格式化
  • 修改虚拟机主机名,将GFS集群的node服务器磁盘全部进行分区、格式化,此处只示范一个节点
[root@node1 ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0x5fae534e 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):n	'//创建分区'
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p	'//创建主分区'
分区号 (1-4,默认 1):	'//回车,默认分区号'
起始 扇区 (2048-6291455,默认为 2048):	'//回车,默认扇区大小'
将使用默认值 2048
Last 扇区, +扇区 or +size{
     K,M,G} (2048-6291455,默认为 6291455)'//回车,默认主分区大小'
将使用默认值 6291455
分区 1 已设置为 Linux 类型,大小设为 3 GiB
  • 格式化磁盘
[root@node1 ~]# mkfs -t ext4 /dev/sdb1
[root@node1 ~]# mkfs -t ext4 /dev/sdc1
[root@node1 ~]# mkfs -t ext4 /dev/sdd1
[root@node1 ~]# mkfs -t ext4 /dev/sde1
[root@node1 ~]# mkfs -t ext4 /dev/sdf1
  • 创建挂载点
#node1和node2
mkdir /c1 /c2 /c3 /c4 /data
#node3和node4
mkdir /c1 /c2 /c3 /data
  • 添加自动挂载信息
[root@node1 ~]# vim /etc/fstab
/dev/sdb1       /c1     ext4    defaults        0 0
/dev/sdc1       /c2     ext4    defaults        0 0
/dev/sdd1       /c3     ext4    defaults        0 0
/dev/sde1       /c4     ext4    defaults        0 0
/dev/sdf1       /data   ext4    defaults        0 0
#添加磁盘挂载信息
-----》wq
#添加完成后重启
  • 查看挂载信息
[root@node1 ~]# df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/sda2      xfs        20G  3.5G   17G  18% /
devtmpfs       devtmpfs  898M     0  898M   0% /dev
tmpfs          tmpfs     912M     0  912M   0% /dev/shm
tmpfs          tmpfs     912M  9.1M  903M   1% /run
tmpfs          tmpfs     912M     0  912M   0% /sys/fs/cgroup
/dev/sda5      xfs        10G   37M   10G   1% /home
/dev/sdf1      ext4       20G   45M   19G   1% /data
/dev/sdc1      ext4      3.9G   16M  3.7G   1% /c2
/dev/sdb1      ext4      2.9G  9.0M  2.8G   1% /c1
/dev/sde1      ext4      5.8G   24M  5.5G   1% /c4
/dev/sdd1      ext4      4.8G   20M  4.6G   1% /c3
/dev/sda1      xfs       6.0G  174M  5.9G   3% /boot
tmpfs          tmpfs     183M  8.0K  183M   1% /run/user/42
tmpfs          tmpfs     183M     0  183M   0% /run/user/0
#此处只展示node1
3.2.2 环境优化
[root@node1 ~]# systemctl stop firewalld.service 
[root@node1 ~]# setenforce 0
[root@node1 ~]# systemctl disable firewalld.service 
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@node1 ~]# vi /etc/selinux/config 
#关闭防火墙、增强性安全功能并取消开机自启
  • 在所有node服务器上配置本地域名解析
[root@node1 ~]# vi /etc/hosts
192.168.226.128 node1
192.168.226.132 node2
192.168.226.133 node3
192.168.226.134 node4
#添加四台node服务器的地址
3.2.3 GFS集群创建
  • 在所有node节点服务器上执行以下操作

  • 共享上传GFS文件

#软件包已用win10宿主机下载完成,直接共享到虚拟机中
[root@node1 ~]# mount.cifs //192.168.226.1/LAMP-C7 /mnt
Password for root@//192.168.226.1/LAMP-C7:  
[root@node1 ~]# cd /mnt    
[root@node1 ~]# cp -r gfsrepo /opt
  • 创建本地yum源
#以下是个小脚本
cd /etc/yum.repos.d/
mkdir backup			#备份本地yum源文件
mv Cen* backup			#备份本地yum源文件
cat >> node.repo<<-EOF	#新建本地yum元文件
[node]
name=node
baseurl=file:///mnt
gpgcheck=0
enabled=1

[glfs]
name=glfs
baseurl=file:///opt/gfsrepo		#指向gfs文件
gpgcheck=0
enabled=1
EOF
  • 挂载光盘镜像、清除yum缓存,重新创建缓存数据
[root@node1 yum.repos.d]# umount //192.168.226.1/LAMP-C7 /mnt
#解挂主机共享文键
[root@node1 yum.repos.d]# vi /etc/fstab
/dev/cdrom      /mnt    iso9660 defaults        0 0
#添加自动挂载,重启	
[root@node1 ~]# yum clean all
[root@node1 ~]# yum makecache
  • 安装GLFS软件
[root@node1 ~]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
[root@node1 ~]# systemctl start glusterd.service
[root@node1 ~]# systemctl enable glusterd.service
#开启gluster服务并设置开机自启动
  • 创建GFS集群

    node主机添加集群中其他节点(在所有节点上做)

#仅在node 1上示范
[root@node1 opt]# gluster peer probe node1
peer probe: success. Probe on localhost not needed
[root@node1 opt]# gluster peer probe node2
peer probe: success. 
[root@node1 opt]# gluster peer probe node3
peer probe: success. 
[root@node1 opt]# gluster peer probe node4
peer probe: success. 
[root@node1 opt]# gluster peer status
Number of Peers: 3

Hostname: node2
Uuid: bc3002b2-fc8f-433f-ae63-bedf43a28ebe
State: Peer in Cluster (Connected)

Hostname: node3
Uuid: 80feafe1-7b28-4f57-8ae5-bac5825491cb
State: Peer in Cluster (Connected)

Hostname: node4
Uuid: 79b7b921-0b84-4397-8d99-2d1337919d6a
State: Peer in Cluster (Connected)
  • 规划创建如下卷

KVM+GFS分布式存储搭建(理论+实操)_第6张图片

  • 创建分布式卷 dis-volume,因为四台节点服务器为一个集群,所以只在一个node节点上操作即可
#创建分布式卷
[root@node1 opt]# gluster volume create dis-volume node1:/c4 node2:/c4 force
volume create: dis-volume: success: please start the volume to access data
#查看创建分布式卷的信息
[root@node1 opt]# gluster volume info dis-volume
 
Volume Name: dis-volume			#卷名
Type: Distribute				#类型分布式
Volume ID: cd9b10dd-7261-4bc7-89b2-8a844c64c133	#卷ID
Status: Created					#状态:已创建
Snapshot Count: 0				#快照数量
Number of Bricks: 2				#块服务2个
Transport-type: tcp				#通讯协议:TCP
Bricks:							#块信息
Brick1: node1:/c4		
Brick2: node2:/c4
Options Reconfigured:			#重新配置的选项
transport.address-family: inet
nfs.disable: on
#启动分布式卷
[root@node1 opt]# gluster volume start dis-volume
volume start: dis-volume: success
  • 创建条带卷 stripe-volume
[root@node1 opt]# gluster volume create stripe-volume stripe 2 node1:/c3 node2:/c3 force
[root@node1 opt]# gluster volume info stripe-volume
 
Volume Name: stripe-volume
Type: Stripe
Volume ID: 3d5f0312-f50d-4d70-8fb4-55c14f999cb9
Status: Created
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: node1:/c3
Brick2: node2:/c3
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@node1 opt]# gluster volume start stripe-volume
volume start: stripe-volume: success
  • 创建复制卷 rep-volume
[root@node1 opt]# gluster volume create rep-volume replica 2 node3:/c3 node4:/c3 force
[root@node1 opt]# gluster volume info rep-volume
 
Volume Name: rep-volume
Type: Replicate
Volume ID: 8ba188be-36c8-40b3-9e96-47b0bd745eee
Status: Created
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: node3:/c3
Brick2: node4:/c3
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
[root@node1 opt]# gluster volume start rep-volume 
volume start: rep-volume: success
  • 创建分布式条带卷 dis-stripe
[root@node1 opt]# gluster volume create dis-stripe stripe 2 node1:/c1 node2:/c1 node3:/c1 node4:/c1 force
[root@node1 opt]# gluster volume info dis-stripe 
 
Volume Name: dis-stripe
Type: Distributed-Stripe
Volume ID: bf94313e-0f38-4954-bb64-cc1d8a11f962
Status: Created
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: node1:/c1
Brick2: node2:/c1
Brick3: node3:/c1
Brick4: node4:/c1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@node1 opt]# gluster volume start dis-stripe 
volume start: dis-stripe: success
  • 创建分布式复制卷 dis-rep
[root@node1 opt]# gluster volume create dis-rep replica 2 node1:/c2 node2:/c2 node3:/c2 node4:/c2 force
[root@node1 opt]# gluster volume info dis-rep 
 
Volume Name: dis-rep
Type: Distributed-Replicate
Volume ID: b107d425-8216-46f0-9aa1-1f2921e9544e
Status: Created
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: node1:/c2
Brick2: node2:/c2
Brick3: node3:/c2
Brick4: node4:/c2
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
[root@node1 opt]# gluster volume start dis-rep 
volume start: dis-rep: success
  • 创建分布式复制卷 kvmdata
[root@node1 opt]# gluster volume create kvmdata replica 2 node1:/data node2:/data node3:/data node4:/data force
[root@node1 opt]# gluster volume info kvmdata 
 
Volume Name: kvmdata
Type: Distributed-Replicate
Volume ID: 5b25f84b-37bc-4649-b755-d1765a573844
Status: Created
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: node1:/data
Brick2: node2:/data
Brick3: node3:/data
Brick4: node4:/data
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
[root@node1 opt]# gluster volume start kvmdata 
volume start: kvmdata: success
3.3 KVM宿主机部署
  • 实验拓扑图
    KVM+GFS分布式存储搭建(理论+实操)_第7张图片
3.2.2 KVM虚拟机安装环境
  • 此项实验我们的内存选择8G、处理器数量为2,每个处理器内核为2、磁盘空间为300G,处理器勾选虚拟化intel
  • 安装选择GNOME桌面,同时选择开发工具
  • 分区自动分配 (可以给 “/”根分区分配多一些空间)
    KVM+GFS分布式存储搭建(理论+实操)_第8张图片
3.2.3 KVM 环境部署
  • 更改主机名
[root@localhost ~]# hostnamectl set-hostname kvm
[root@localhost ~]# su
[root@kvm ~]# 
  • 将镜像光盘设为自动挂载
[root@kvm ~]# vi /etc/fstab
/dev/cdrom /mnt iso9660 defaults 0 0
#添加以上信息
#reboot重启或者使用mount -a 刷新
[root@kvm ~]# df -hT
文件系统       类型      容量  已用  可用 已用% 挂载点
/dev/sda3      xfs        50G  4.2G   46G    9% /
devtmpfs       devtmpfs  3.8G     0  3.8G    0% /dev
tmpfs          tmpfs     3.9G     0  3.9G    0% /dev/shm
tmpfs          tmpfs     3.9G   14M  3.8G    1% /run
tmpfs          tmpfs     3.9G     0  3.9G    0% /sys/fs/cgroup
/dev/sda5      xfs       242G   37M  241G    1% /home
/dev/sda1      xfs      1014M  165M  850M   17% /boot
/dev/sr0       iso9660   4.2G  4.2G     0  100% /mnt
tmpfs          tmpfs     781M  4.0K  781M    1% /run/user/42
tmpfs          tmpfs     781M   60K  781M    1% /run/user/0 
  • 优化
#优化ssh
[root@kvm ~]# vim /etc/ssh/sshd_config 
#取消注释,将yes改为no
UseDNS no
----->wq

#优化防火墙
[root@kvm ~]# systemctl stop firewalld.service 
[root@kvm ~]# systemctl disable firewalld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@kvm ~]# setenforce 0
#设置开启不自启动
[root@kvm ~]# vim /etc/selinux/config 
#修改为disabled
SELINUX=disabled
  • 搭建本地yum仓库

    将gfsrepo文件上传到KVM虚拟机中

[root@kvm ~]# cd /etc/yum.repos.d
[root@kvm yum.repos.d]# mkdir backup
[root@kvm yum.repos.d]# ls
backup            CentOS-Debuginfo.repo  CentOS-Sources.repo
CentOS-Base.repo  CentOS-fasttrack.repo  CentOS-Vault.repo
CentOS-CR.repo    CentOS-Media.repo
[root@kvm yum.repos.d]# mv CentOS-* backup/
[root@kvm yum.repos.d]# vim kvm.repo
#输入以下内容
[kvm]
name=kvm
baseurl=file:///mnt
enabled=1
gpgcheck=0

[GFS]
name=gfs
baseurl=file:///opt
enabled=1
gpgcheck=0
-------》wq
#清空yum仓库
[root@kvm yum.repos.d]# yum clean all
BDB2053 Freeing read locks for locker 0xc5d: 13332/140295317485376
BDB2053 Freeing read locks for locker 0xc5f: 13332/140295317485376
已加载插件:fastestmirror, langpacks
正在清理软件源: kvm
Cleaning up everything
Maybe you want: rm -rf /var/cache/yum, to also free up space taken by orphaned data from disabled or removed repos
#创建yum元数据
[root@kvm yum.repos.d]# yum makecache
已加载插件:fastestmirror, langpacks
Determining fastest mirrors
kvm                                                  | 3.6 kB     00:00     
(1/4): kvm/group_gz                                    | 166 kB   00:00     
(2/4): kvm/filelists_db                                | 3.1 MB   00:01     
(3/4): kvm/primary_db                                  | 3.1 MB   00:00     
(4/4): kvm/other_db                                    | 1.3 MB   00:00     
元数据缓存已建立   
[root@kvm yum.repos.d]# yum -y install glusterfs glusterfs-fuse    
#安装GFS工具
  • 修改映射文件
[root@kvm yum.repos.d]# vim /etc/hosts
192.168.226.128 node1
192.168.226.132 node2
192.168.226.133 node3
192.168.226.134 node4
  • 挂载GFS文件
[root@node2 ~]# mkdir /kvmdata
[root@node2 ~]# vim /etc/fstab
#添加以下内容
node1:kvmdata   /kvmdata        glusterfs defaults,_netdev      0 0
  • 重启
[root@kvm yum.repos.d]# reboot
[root@kvm yum.repos.d]# df -hT
node1:kvmdata  fuse.glusterfs   40G  489M   38G   2% /kvmdata
3.2.4 KVM 安装
#安装 GNOME 桌面环境
yum groupinstall -y "GNOME Desktop"	
#安装KVM 模块
yum -y install qemu-kvm
#安装KVM 调试工具(可选)
yum -y install qemu-kvm-tools
#安装构建虚拟机的命令行工具
yum -y install virt-install
#qemu 组件,创建磁盘、 启动虚拟机等
yum -y install qemu-img
#安装网络支持工具
yum -y install bridge-utils
#安装虚拟机管理工具
yum -y install libvirt
#安装图形界面管理虚拟机
yum -y install virt-manager

#安装完成后将系统默认运行的target更改为graphical.target
ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target
#全部安装完成后重启
reboot
  • 查看虚拟化模块
#查看CPU是否支持虚拟化
[root@kvm ~]# cat /proc/cpuinfo | grep vmx
......省略部分内容
#查看KVM模块是否安装
[root@kvm ~]# lsmod | grep kvm
kvm_intel             174841  0 
kvm                   578518  1 kvm_intel
irqbypass              13503  1 kvm
  • 开启libvirtd服务并设为开机自启动
[root@kvm ~]# systemctl start libvirtd
[root@kvm ~]# systemctl enable libvirtd
3.2.5 KVM 网卡配置
  • KVM安装完成后,要配置网络,在libvirtd中运行KVM网络的方法有两种 :NAT 、Bridge

    两种模式概述

  • 用户模式:即NAT ,这种方式是默认网络,数据包由NAT方式通过主机的接口进行传送,可以访问外部网络,但无法从外部访问虚拟机网络

  • 桥接模式:这种模式允许虚拟机像一台独立的主机一样拥有网络,外部的机器可以直接访问到虚拟机内部,但需要网卡支持(一般有线网卡都支持)

我们本次实验以Bridge 为例

  • ① 修改ens33配置
[root@kvm ~]# cd /etc/sysconfig/network-scripts/
[root@kvm network-scripts]# vi ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"			#将dhcp修改为none
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="80da0b5f-1ff2-44df-99ea-89dcfa2452e3"
DEVICE="ens33"
ONBOOT="yes"
BRIDGE=br0		#添加bridge桥接模式
-----》wq
  • ② 添加br0配置
[root@kvm network-scripts]# vim ifcfg-br0
TYPE=Bridge
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
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.226.200
NETMASK=255.255.255.0
GATEWAY=192.168.226.1
#添加桥接网卡配置
  • 重启网卡
[root@kvm network-scripts]# systemctl restart network
3.2.6 KVM管理
#创建KVM存储和镜像数据的目录、上传centos7镜像
[root@kvm network-scripts]# mkdir -p /data_kvm/iso
[root@kvm network-scripts]# mkdir -p /data_kvm/store
[root@kvm /]# mount.cifs //192.168.226.1/LAMP-C7 /mnt
Password for root@//192.168.226.1/LAMP-C7:  
[root@kvm /]# cp /mnt/CentOS-7-x86_64-DVD-1804.iso /data_kvm/iso/
[root@kvm mnt]# cd /data_kvm/iso/
[root@kvm iso]# ls
CentOS-7-x86_64-DVD-1804.iso

#创建镜像、存储文件目录
[root@kvm ~]# mkdir /kvmdata
[root@kvm ~]# cd /kvmdata
[root@kvm ~]# mkdir store iso
#将镜像复制一份到/kvmdata/iso中  
[root@kvm ~]# cd /data_kvm/iso
[root@kvm iso]# cp CentOS-7-x86_64-DVD-1810.iso /kvmdata/iso/
  • 打开虚拟系统管理器
[root@kvm ~]# virt-manager
  • 创建两个存储池,分别绑定/kvmdata/iso 与/kvmdata/store

    步骤如下
    KVM+GFS分布式存储搭建(理论+实操)_第9张图片
    KVM+GFS分布式存储搭建(理论+实操)_第10张图片
    KVM+GFS分布式存储搭建(理论+实操)_第11张图片

  • 选择以下目录KVM+GFS分布式存储搭建(理论+实操)_第12张图片

KVM+GFS分布式存储搭建(理论+实操)_第13张图片

  • 添加存储卷

KVM+GFS分布式存储搭建(理论+实操)_第14张图片

  • 创建虚拟机

    返回虚拟系统管理器,右键----》新建,选择镜像存储池和资源存储池,配置虚拟机参数
    KVM+GFS分布式存储搭建(理论+实操)_第15张图片

KVM+GFS分布式存储搭建(理论+实操)_第16张图片
KVM+GFS分布式存储搭建(理论+实操)_第17张图片
KVM+GFS分布式存储搭建(理论+实操)_第18张图片

KVM+GFS分布式存储搭建(理论+实操)_第19张图片
KVM+GFS分布式存储搭建(理论+实操)_第20张图片
KVM+GFS分布式存储搭建(理论+实操)_第21张图片
KVM+GFS分布式存储搭建(理论+实操)_第22张图片
KVM+GFS分布式存储搭建(理论+实操)_第23张图片
-之后的安装流程与centos7安装一致,此处不多以描述

  • 以上KVM+GFS平台搭建完成

总结

本次实验步骤不复杂,一些相同的操作可以使用shell脚本来编写执行,需要注意的问题:

1、在加入GFS节点时:gluster peer probe node 命令,如果出现以下问题

gluster peer probe node 错误 传输端点尚未连接

可以通过检查以下三点来解决
① 确认防火墙是否关闭
② 检查hosts映射是否添加,添加有无错误
③ 网络是否正常

2、在上传centos7镜像时,如果使用的时远程连接软件,有可能会出现镜像上传不完整,导致最后的虚拟机安装读取错误,或无法正常安装。
可以通过win10共享文件提供出来,然后挂载共享、获取到镜像文件

你可能感兴趣的:(OpenStack)