运用KVM 及 Glusterfs 技术, 结合起来从而达到 kvm 高可用。
利用 Glusterfs 的分布式复制卷, 对 kvm 虚拟机文件进行分布存储和冗余功能。
分布式复制卷主要用于需要冗余的情况下把一个文件存放在两个或以上的节点上,当其中一个节点数据丢失或者损坏之后, kvm 仍然能够通过卷组找到另一节点上的虚拟机文件, 保证虚拟机正常运行。
当节点修复之后, Glusterfs 会自动同步同一组里面有数据的节点数据。
Glusterfs 文件系统是由 Gluster 公司的创始人兼首席技术官 Anand Babu Periasamy编写。
一个可扩展的分布式文件系统, 用于大型的、 分布式的、 对大量数据进行访问的应用。
它运行于廉价的普通硬件上, 并提供容错功能。 它可以给大量的用户提供总体性能较高的服务。
Glusterfs 可以根据存储需求快速调配存储, 内含丰富的自动故障转移功能, 且摒弃集中元数据服务器的思想。
适用于数据密集型任务的可扩展网络文件系统, 免费开源。
Gluster于 2011 年 10 月 7 日被 red hat 收购。
●Glusterfs 体系结构, 将计算、 存储和 I/O 资源聚合到全局名称空间中, 每台服务器都被视为节点, 通过添加附加节点或向每个节点添加额外存储来扩展容量。 通过在更多节点之间部署存储来提高性能。
●Glusterfs 支持基于文件的镜像和复制、 分条、 负载平衡、 故障转移、 调度、 磁盘缓存、存储配额、 卷快照等。
●Glusterfs 各客户端之间无连接, 本身依赖于弹性哈希算法, 而不是使用集中式或分布式元数据模型。
●Glusterfs 通过各种复制选项提供数据可靠性和可用性: 复制卷、 分布卷。
KVM 自 Linux 2.6.20 版本后就直接整合到 Linux 内核, 它依托 CPU 虚拟化指令集(如Intel-VT、 AMD-V) 实现高性能的虚拟化支持。
由于与 Linux 内核高度整合, 因此在性能、安全性、 兼容性、 稳定性上都有很好的表现。
在 KVM 环境中运行的每一个虚拟化操作系统都将表现为单个独立的系统进程。
因此它可以很方便地与 Linux 系统中的安全模块进行整合(SELinux) , 可以灵活地实现资源的管理及分配。
主机 | 操作系统 | 主机名/IP地址 | 主要软件及版本 |
---|---|---|---|
服务器 | Centos7.6 | node1/192.168.100.41 | Glusterfs5 |
服务器 | Centos7.6 | node2/192.168.100.42 | Glusterfs5 |
服务器 | Centos7.6 | node3/192.168.100.43 | Glusterfs5 |
服务器 | Centos7.6 | node4/192.168.100.44 | Glusterfs5 |
服务器 | Centos7.6 | kvm(宿主机)/192.168.100.45 | kvm\gluster-client() |
服务器 | Centos7.6 | VM1(虚拟机)/192.168.100.46 | - |
主机名 | IP | 挂载磁盘 | 挂载点 |
---|---|---|---|
node1 | 192.168.100.41 | /dev/sdb | /data |
node2 | 192.168.100.42 | /dev/sdb | /data |
node3 | 192.168.100.43 | /dev/sdb | /data |
node4 | 192.168.100.44 | /dev/sdb | /data |
node1 、node2 、node3 、node4 主机,每台主机添加一块20G硬盘
登陆node1,创建磁盘分区,创建文件系统
[root@node1 ~]# fdisk -l ###查看添加的硬盘 ####可以用 ll /dev/ | grep sd 确认有几块硬盘的
fdisk /dev/sdb
n ###创建分区
p ###创建主分区
回车 ###默认主分区1
回车 ###默认块大小
回车 ###默认主分区大小
w ###保存分区信息
###格式化分区###
[root@node1 ~]# mkfs -t ext4 /dev/sdb1
挂载
####创建挂载目录,添加挂载###
[root@node1 ~]# mkdir /data
[root@node1 ~]# vi /etc/fstab
/dev/sdb1 /data ext4 defaults 0 0
[root@node1 ~]# mount -a
[root@localhost ~]# df -Th #####确认挂载的1块硬盘
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 50G 4.0G 46G 8% /
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 13M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sr0 iso9660 4.3G 4.3G 0 100% /mnt
/dev/sdb1 ext4 20G 45M 19G 1% /data
/dev/sda1 xfs 1014M 179M 836M 18% /boot
/dev/mapper/centos-home xfs 245G 33M 245G 1% /home
tmpfs tmpfs 378M 8.0K 378M 1% /run/user/42
tmpfs tmpfs 378M 0 378M 0% /run/user/0
另外三个节点同样操作
关闭防火墙开机自启 关闭核心防护(临时和永久的)规划的5台必须改
[root@node1 ~]# systemctl stop firewalld
[root@node1 ~]# systemctl disable firewalld
[root@node1 ~]# systemctl status firewalld
[root@node1 ~]# vi /etc/selinux/config ####SELINUX=disabled
SELINUX=disabled
[root@localhost ~]# setenforce 0
[root@node1 ~]# vi /etc/hosts
192.168.100.41 node1
192.168.100.42 node2
192.168.100.43 node3
192.168.100.44 node4
另外三个节点同样修改
[root@node1 ~]# vi /etc/yum.repos.d/local.repo
[GLFS]
name=glfs
baseurl=file:///opt/gfsrepo
gpgcheck=0
enabled=1
[root@node1 ~]# yum clean all
[root@node1 ~]# yum makecache
[root@node1 ~]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma ###安装
[root@node1 ~]# systemctl start glusterd.service ###启动
[root@node1 ~]# systemctl enable glusterd.service ###开机自启
[root@node1 ~]# systemctl status glusterd.service
[root@node1 ~]# gluster peer probe node1
[root@node1 ~]# gluster peer probe node2
[root@node1 ~]# gluster peer probe node3
[root@node1 ~]# gluster peer probe node4
查看
[root@node1 ~]# gluster peer status
[root@node1 ~]# gluster volume create kvmdata replica 2 node1:/data node2:/data node3:/data node4:/data force
[root@node1 ~]# gluster volume info kvmdata
[root@node1 ~]# gluster volume start kvmdata
虚拟化Intel VT-X 选项√挂Centos 7.6 光盘 安装KVM时点GNOME桌面 点开发工具 安装操作系统
关闭防火墙 关闭核心防护 配置yum 本地源
[root@localhost ~]# vi /etc/yum.repos.d/local.repo
[GLFS]
name=glfs
baseurl=file:///opt/gfsrepo
gpgcheck=0
enabled=1
[root@localhost ~]# yum clean all
[root@localhost ~]# yum makecache
yum groupinstall -y "GNOME Desktop" ####安装 GNOME 桌面环境 如果装了图形界面不需要装了
yum -y install qemu-kvm ####KVM 模块
yum -y install qemu-kvm-tools ####KVM 调试工具,可不安装
yum -y install virt-install ####构建虚拟机的命令行工具
yum -y install qemu-img ####qemu 组件,创建磁盘、 启动虚拟机等
yum -y install bridge-utils ####网络支持工具
yum -y install libvirt ####虚拟机管理工具
yum -y install virt-manager ####图形界面管理虚拟机
查看CPU是否支持虚拟化
[root@kvm ~]# cat /proc/cpuinfo | grep vmx
[root@kvm ~]# lsmod | grep kvm ####查看KVM模块是否安装
注意: 在使用 yum 安装完桌面后执行
ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target 命 令 ,
将 系 统 的 默 认 运 行 target 更 改 为graphical.targe。
重启后系统将进入图形化界面。
若不执行上述命令更改系统的默认运行target, 重启时可能报错
[root@localhost ~]# systemctl start libvirtd ####开启libvirtd服务
[root@localhost ~]# systemctl enable libvirtd ####开机启动libvirtd服务
宿主服务器安装完成 KVM, 首先要设定网络, 在 libvirt 中运行 KVM 网络有两种方法:
NAT 和 Bridge, 默认是 NAT。
关于两种模式的说明:
●用户模式, 即 NAT 方式, 这种方式是默认网络, 数据包由 NAT 方式通过主机的接口进行
传送, 可以访问外网, 但是无法从外部访问虚拟机网络。
●桥接模式, 这种模式允许虚拟机像一台独立的主机一样拥有网络, 外部的机器可以直接
访问到虚拟机内部, 但需要网卡支持, 一般有线网卡都支持。
这里以 Bridge(桥接) 为例。
[root@kvm ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=0e5a02f3-25d6-4222-a2c7-3303cc76117a
DEVICE=ens33
ONBOOT=yes
#IPADDR=192.168.100.45
#PREFIX=24
#GATEWAY=192.168.100.1
BRIDGE=br0
[root@kvm ~]# vim /etc/sysconfig/network-scripts/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.100.46
NETMASK=255.255.255.0
GATEWAY=192.168.100.1
[root@bdqn~]# systemctl restart network ###重启network网络
[root@localhost ~]# yum -y install glusterfs glusterfs-fuse ###安装
[root@localhost ~]# mkdir /kvmdata/
[root@localhost ~]# hostnamectl set-hostname kvm
####修改hostswen文件####
[root@kvm ~]# vi /etc/hosts
192.168.100.41 node1
192.168.100.42 node2
192.168.100.43 node3
192.168.100.44 node4
[root@kvm ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.32.11 node1
192.168.32.12 node2
192.168.32.13 node3
192.168.32.14 node4
####挂载Gluster文件系统#### 临时挂载
[root@kvm ~]# mount -t glusterfs node1:kvmdata /kvmdata/
####fstab挂载 ####永久挂载
[root@kvm ~]# vi /etc/fstab
node1:kvmdata /kvmdata glusterfs defaults,_netdev 0 0
[root@kvm ~]# mount -a
[root@kvm ~]# mkdir -p /kvmdata/iso ####上传镜像centos 7.6的镜像
[root@kvm ~]# mkdir -p /kvmdata/store ####虚拟机存储
[root@kvm ~]# virt-manager ###图形界面敲
添加存储池,添加存储卷,上传镜像
创建虚拟机,安装虚拟机
在四台节点上查看目录里是否存在虚拟机文件。可以看出虚拟机文件已经存放在第一组node3、 node4 里。
[root@node1 ~]# cd /data/store/
总用量 1436224
-rw------- 2 qemu qemu 10739318784 4月 22 03:48 centos7_kvm.qcow2
[root@node2 ~]# cd /data/store/
[root@node2 store]# ll
总用量 1436224
-rw------- 2 qemu qemu 10739318784 4月 22 03:49 centos7_kvm.qcow2
[root@node3 ~]# cd /data/store/
[root@node3 store]# ll
总用量 0
[root@node4 ~]# cd /data/store/
[root@node4 store]# ll
总用量 0
[root@node1 store]# cd /data/iso/
[root@node1 iso]# ll
总用量 4481032
-rw-r--r-- 2 qemu qemu 4588568576 4月 22 03:13 CentOS-7-x86_64-DVD-1810.iso
[root@node2 store]# cd /data/iso/
[root@node2 iso]# ll
总用量 4481032
-rw-r--r-- 2 qemu qemu 4588568576 4月 22 03:13 CentOS-7-x86_64-DVD-1810.iso
[root@node3 iso]# cd /data/iso/
[root@node3 iso]# ll
总用量 0
[root@node4 store]# cd /data/iso/
[root@node4 iso]# ll
总用量 0
破坏试验看 VM1虚拟机工作是否正常
关闭node3
1、VM1正常工作
Last login: Mon Apr 22 04:04:40 2019
[root@vm1 ~]#
[root@vm1 ~]#
关闭node4
2、VM1不正常工作
结论:通过试验,在关闭一个节点的情况下,虚拟机是能正常工作的