KVM+GFS分布式存储系统构建KVM高可用
文章目录
- KVM+GFS分布式存储系统构建KVM高可用
- 资源列表
- 基础环境
- 一、安装部署KVM
- 1.1、安装KVM
- 1.2、验证
- 1.3、开启libvirtd服务
- 1.4、配置KVM桥接网络
- 二、部署GlusterFS
- 2.1、安装GlusterFS软件
- 2.2、所有node节点启动GFS
- 2.3、创建GFS群集
- 2.4、查看群集状态
- 三、创建GlusterFS分布式复制卷
- 3.1、创建卷组目录
- 3.2、创建分布式复制卷
- 3.3、查看models卷
- 3.4、启动models卷
- 四、kvm客户端挂载glusterfs卷
- 4.1、安装glusterfs客户端软件
- 4.2、创建挂载目录
- 4.3、永久挂载
- 4.4、查看挂载卷
- 五、KVM使用卷创建虚拟机
- 5.1、创建虚拟机
- 5.2、验证存储
资源列表
操作系统 | 配置 | 主机名 | IP | 所需软件 |
---|---|---|---|---|
CentOS 7.9 | 2C4G | kvm | 192.168.93.11 | GlusterFS 9.6 |
CentOS 7.9 | 2C4G | node1 | 192.168.93.101 | GlusterFS 9.6 |
CentOS 7.9 | 2C4G | node2 | 192.168.93.102 | GlusterFS 9.6 |
CentOS 7.9 | 2C4G | node3 | 192.168.93.103 | GlusterFS 9.6 |
CentOS 7.9 | 2C4G | node4 | 192.168.93.104 | GlusterFS 9.6 |
基础环境
- 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
- 关闭内核安全机制
setenforce 0
sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
- 修改主机名
hostnamectl set-hostname kvm
hostnamectl set-hostname node1
hostnamectl set-hostname node2
hostnamectl set-hostname node3
hostnamectl set-hostname node4
- 绑定主机名解析
cat >> /etc/hosts << EOF
192.168.93.11 kvm
192.168.93.101 node1
192.168.93.102 node2
192.168.93.103 node3
192.168.93.104 node4
EOF
一、安装部署KVM
- 开启虚拟化支持
1.1、安装KVM
# 安装GNOME桌面环境,如果已经是桌面环境可以省略
yum -y groupinstall "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
1.2、验证
- 查看是否支持虚拟化
- 查看是否安装KVM模块
# intel的CPU查看方法
[root@kvm ~]# cat /proc/cpuinfo | egrep "vmx|svm"
# AMD的CPU查看方法
[root@kvm ~]# cat /proc/cpuinfo | grep svm
# 检查KVM模块是否安装
[root@kvm ~]# lsmod | grep kvm
kvm_amd 2177304 0
kvm 637515 1 kvm_amd
irqbypass 13503 1 kvm
1.3、开启libvirtd服务
# 图形化系统默认已经安装
[root@kvm ~]# systemctl restart libvirtd
[root@kvm ~]# systemctl enable libvirtd
1.4、配置KVM桥接网络
[root@kvm ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
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=4ae7185c-c305-460c-b880-a11110a6dc91
DEVICE=ens33
ONBOOT=yes
#IPADDR=192.168.93.11
#NETMASK=255.255.255.0
#GATEWAY=192.168.93.2
#DNS1=114.114.114.114
#DNS2=8.8.8.8
BRIDGE=br0
[root@kvm ~]# cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-br0
[root@kvm ~]# vim /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge
BOOTPROTO=static
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.93.11
NETMASK=255.255.255.0
GATEWAY=192.168.93.2
DNS1=114.114.114.114
DNS2=8.8.8.8
# 重启network服务
[root@kvm ~]# systemctl restart network
# 确认IP地址信息
[root@kvm ~]# ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.93.11 netmask 255.255.255.0 broadcast 192.168.93.255
inet6 fe80::1ce6:1cff:fef6:c365 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:9b:ce:61 txqueuelen 1000 (Ethernet)
RX packets 31 bytes 6237 (6.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 49 bytes 6025 (5.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether 00:0c:29:9b:ce:61 txqueuelen 1000 (Ethernet)
RX packets 326619 bytes 489639434 (466.9 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 37105 bytes 2282458 (2.1 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
二、部署GlusterFS
- 所有node节点执行如下操作
2.1、安装GlusterFS软件
# 所有node节点都需要安装GlsterFS软件,以node1为例进行演示
# 安装官方YUM源
[root@node1 ~]# yum -y install centos-release-gluster
[root@node1 ~]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
# 查看GlsterFS版本
[root@node1 ~]# glusterfs -V
glusterfs 9.6
2.2、所有node节点启动GFS
- 以node1为例进行演示
[root@node1 ~]# systemctl start glusterd && systemctl enable glusterd
2.3、创建GFS群集
- 在node1上添加所有节点到群集中
# 如果报错,请检查防火墙、SElinux、主机名以及hosts文件是否正确
[root@node1 ~]# gluster peer probe node2
peer probe: success
[root@node1 ~]# gluster peer probe node3
peer probe: success
[root@node1 ~]# gluster peer probe node4
peer probe: success
2.4、查看群集状态
- 为了确保万无一失,每个node节点都查看一遍,以node1为例进行演示
[root@node1 ~]# gluster peer status
Number of Peers: 3
Hostname: node2
Uuid: 0bd64e4f-1629-4478-b4b2-b7572bbeed9d
State: Peer in Cluster (Connected)
Hostname: node3
Uuid: 0d51b2b4-7080-47ce-8e2f-2f69b88b0a6e
State: Peer in Cluster (Connected)
Hostname: node4
Uuid: 9dcd8692-a4d8-4ece-93ec-4d9feaeb9a69
State: Peer in Cluster (Connected)
三、创建GlusterFS分布式复制卷
- 当前一共有四个节点,设置为2x2=4,就是2个节点为一组,一个卷组两个节点会有相同的数据。从而达到虚拟机数据分布式存储并有冗余备份。
3.1、创建卷组目录
- 所有node节点创建/data目录
[root@node1 ~]# mkdir /data
[root@node2 ~]# mkdir /data
[root@node3 ~]# mkdir /data
[root@node4 ~]# mkdir /data
3.2、创建分布式复制卷
- 只在node1节点上操作即可
# 直接使用每个虚拟机的根分区存储量做分布式复制卷
[root@node1 ~]# gluster volume create models replica 2 node1:/data node2:/data node3:/data node4:/data force
volume create: models: success: please start the volume to access data
3.3、查看models卷
[root@node1 ~]# gluster volume info models
Volume Name: models
Type: Distributed-Replicate
Volume ID: 898feca1-a2d0-4831-a5a1-ea7d288a81ac
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:
cluster.granular-entry-heal: on
storage.fips-mode-rchecksum: on
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
3.4、启动models卷
[root@node1 ~]# gluster volume start models
volume start: models: success
四、kvm客户端挂载glusterfs卷
4.1、安装glusterfs客户端软件
[root@kvm ~]# yum -y install centos-release-gluster
[root@kvm ~]# yum -y install glusterfs glusterfs-fuse
4.2、创建挂载目录
[root@kvm ~]# mkdir /kvmdata
[root@kvm ~]# mount -t glusterfs node1:models /kvmdata/
4.3、永久挂载
[root@kvm ~]# echo "node1:models /kvmdata glusterfs defaules,_netdev 0 0" >> /etc/fstab
# 执行以下命令如果没有任何回显说明/etc/fstab没有配置错误
[root@kvm ~]# mount -a
4.4、查看挂载卷
[root@kvm ~]# df -hT | grep glusterfs
node1:models fuse.glusterfs 100G 5.0G 95G 5% /kvmdata
五、KVM使用卷创建虚拟机
- kvm指定虚拟机安装路径到已经挂载的目录下,从而达到虚拟机文件分布式存储并有冗余
5.1、创建虚拟机
# 创建虚拟机磁盘存储目录
[root@kvm ~]# mkdir /kvmdata/data
# 创建虚拟机所使用的镜像文件目录
[root@kvm ~]# mkdir /kvmdata/iso
# 用你自己的方式把CentOS镜像上传到/kvmdata/iso目录中
[root@kvm ~]# mv /tmp/VMwareDnD/Yiv4kW/CentOS-7-x86_64-DVD-2207-02.iso /kvmdata/iso
# 打开图形化虚拟机管理界面
[root@kvm ~]# virt-manager
- 右击新建虚拟机、添加镜像存储池iso
- 添加存储池data
- 上面的步骤有省略的,可以去翻看我第一个KVM文档,虚拟机指定安装地址,在创建虚拟机时把数据文件存放在刚刚建立的data存储池下
- 注意:在“引导选项”中勾选“主动引导时启动虚拟机”,并点击“应用”。然后开始安装虚拟机
5.2、验证存储
- 在四台节点上查看目录里是否存在虚拟机磁盘文件。可以看出虚拟机文件已经存放到第一组node1、node2里
- 可以多创建几次虚拟机确保两组卷节点都可以存储磁盘文件,因为使用了分布式卷,分布式卷的特性是随机存放数据的,不一定是卷组1也不一定是卷组2而是随机存放
[root@node1 ~]# ll -lh /data/data/
总用量 3.9M
-rw------- 2 107 107 21G 5月 26 11:19 centos7.qcow2
[root@node2 ~]# ll -lh /data/data/
总用量 3.9M
-rw------- 2 107 107 21G 5月 26 11:19 centos7.qcow2
[root@node3 ~]# ll -lh /data/data/
总用量 0
[root@node4 ~]# ll -lh /data/data/
总用量 0
# 从上面的结果看,虚拟机已经同步到卷组node1、node2当中,再发生宿主机宕机后将不会影响虚拟机正常使用