KVM+GFS分布存储系统构建KVM高可用

案例环境

1.案例环境

|-----|-----------|----------------------|-------------------|
| 主机 | 操作系统 | 主机名/IP地址 | 主要软件及版本 |
| 服务器 | CentOS7.9 | node1/192.168.10.101 | GlusterFS 3.10.2 |
| 服务器 | CentOS7.9 | node2/192.168.10.102 | GlusterFS 3.10.2 |
| 服务器 | CentoS7.9 | node3/192.168.10.103 | GlusterFS 3.10.2 |
| 服务器 | CentoS7.9 | node4/192.168.10.104 | GlusterFS 3.10.2 |
| 服务器 | CentoS7.9 | kvm/192.168.10.201 | KVMGluster-client |
| 服务器 | CentoS7.9 | kvm/192.168.10.202 | KVMGluster-client |

2.案例需求

  1. 部署 GlusterFS 文件系统
  2. 实现 KVM 虚拟主机不会因宿主机宕机而宕机

3.实现思路

  1. 安装 KVM。
  2. 所有节点部署 GlusterFS。
  3. 客户端挂载 GlusterFS
  4. KVM 使用挂载的 GlusterFS 目录创建虚拟机。

案例实施

1.部署GFS高可用分布式存储环境

cpp 复制代码
//安装部署 KVM 虚拟化平台
步骤在上一篇

//部署 GlusterFS

//关闭防所有节点的防火墙和内核防护
systemctl stop firewalld
setenforce 0


//编写 hosts 文件
[root@node1 ~]# vim /etc/hosts
............
192.168.10.101 node1
192.168.10.102 node2
192.168.10.103 node3
192.168.10.104 node4
192.168.10.201 kvm01
192.168.10.202 kvm02


//安装软件
注意:先设置阿里yum仓库
[root@node1 ~]# yum -y install centos-release-gluster 
修改源为 mirros.alyun.com

[root@node1 ~]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma

//启动 GlusterFS
在所有节点Gluster执行以下操作

[root@node1 ~]# systemctl start glusterd.service && systemctl enable glusterd.service


//在 node1 上添加所有节点
[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.

//查看集群状态 
[root@node1 ~]# gluster peer status

//创建 GlusterFS 分布式复制卷

//在所有节点创建/data 目录
[root@node1 ~]# mkdir /data

//创建分布式复制卷。 
[root@node1 ~]# gluster volume create models replica 2 node1:/data node2:/data node3:/data node4:/data force


//查看 models 卷
[root@node1 ~]# gluster volume info models

//启动 models 卷 
[root@node1 ~]# gluster volume start models

2.为KVM主机部署GFS存储

cpp 复制代码
//KVM挂载 glusterfs 卷(所有kvm主机上都配置)
    //安装 glusterfs 客户端软件。 
[root@kvm01 ~]# yum -y install glusterfs glusterfs-fuse 
    //创建挂载目录,并挂载 models 卷。 
[root@kvm01 ~]# mkdir /kvmdata 
[root@kvm01 ~]# mount -t glusterfs node1:models /kvmdata/ 


[root@localhost ~]# vi /etc/fstab        //永久挂载
node1:models        /kvmdata     glusterfs  defaults,_netdev  0 0

//查看挂载卷。 
[root@kvm01 ~]# df 


//在kvm01上安装虚拟机
//拷贝qcow2磁盘文件
[root@kvm01 ~]# cp CentOS-7-x86_64-GenericCloud-2009.qcow2 /kvmdata/test01.qcow2

//部署虚拟机
//修改磁盘文件密码
[root@kvm01 ~]# virt-customize -a /kvmdata/test01.qcow2 --root-password password:aptech

[root@kvm01 ~]# virt-install --name=test01 -r 1024 --vcpus=1 --disk device=disk,bus=virtio,path='/kvmdata/test01.qcow2',size=10 -w bridge:br0 --virt-type=kvm --boot hd

//登录测试

3.测试实时迁移环境

cpp 复制代码
//配置kvm01和kvm02的无密码登录环境
[root@kvm01 ~]# ssh-keygen -t rsa
[root@kvm01 ~]# ssh-copy-id kvm02
[root@kvm01 ~]# ssh-copy-id kvm01


[root@kvm02 ~]# ssh-keygen -t rsa
[root@kvm02 ~]# ssh-copy-id kvm01
[root@kvm02 ~]# ssh-copy-id kvm02



//将test01虚拟机从kvm01主机迁移到kvm02主机
[root@kvm01 ~]# virsh migrate --persistent --undefinesource test01 qemu+ssh://kvm02/system
[root@kvm01 ~]# virsh list --all

//查看kvm02主机上的虚拟机状态
[root@kvm01 ~]# virsh --connect=qemu+ssh://kvm02/system list
 Id    名称                         状态
----------------------------------------------------
 1     test01                         running


//将test01从kvm02主机迁移到kvm01主机
[root@kvm01 ~]# virsh --connect=qemu+ssh://kvm02/system migrate --persistent --undefinesource test01 qemu+ssh://kvm01/system

4.创建虚拟机资源

cpp 复制代码
//为配置文件创建共享目录
[root@kvm01 ~]# mkdir /kvmdata/config

//将test01的配置文件拷贝到共享目录
[root@kvm01 ~]# cp /etc/libvirt/qemu/test01.xml /kvmdata/config/

//取消定义test01虚拟机
[root@kvm01 ~]# virsh shutdown test01
[root@kvm01 ~]# virsh undefine test01
[root@kvm01 ~]# virsh list --all

//重新定义test01虚拟机
[root@kvm02 ~]# virsh define /kvmdata/config/test01.xml 

[root@kvm01 ~]# virsh start test01
域 test01 已开始

[root@kvm01 ~]# virsh list --all
 Id    名称                         状态
----------------------------------------------------
 6     test01                         running

5.部署群集

cpp 复制代码
//安装群集部件(在两个kvm节点操作)
[root@kvm01 ~]# yum -y install pcs pacemaker fence-agents-all

//设置程序用户密码,两台主机密码要一致
[root@kvm01 ~]# passwd hacluster

[root@kvm01 ~]# systemctl start pcsd

//认证组成群集的节点(只在kvm01上操作)
[root@kvm01 ~]# pcs cluster auth kvm01 kvm02 -u hacluster -p aptech

/自动生成配置文件(只在kvm01上操作)
[root@kvm01 ~]# pcs cluster setup --name cluster-kvm kvm01 kvm02

//启动群集(只在kvm01上操作)
[root@kvm01 ~]# pcs cluster start --all

//在任意一个kvm主机上查看pcs群集状态
[root@kvm01 ~]# pcs status

//将其中一个节点关闭,查看群集状态
[root@kvm01 ~]# pcs cluster stop kvm01

//在另一个节点查看状态
[root@kvm02 ~]# pcs status

Online: [ kvm02 ]
OFFLINE: [ kvm01 ]

//查看后再开启,让群集正常运行
[root@kvm01 ~]# pcs cluster start kvm01

//关闭隔离设备的功能(每个设备都执行)
pcs property set stonith-enabled=false

备注:
测试环境用的 VMware的环境,没有隔离设备,必须要关闭,否则无法实现高可用

//向群集中添加资源
[root@kvm01 ~]# pcs resource create test01 VirtualDomain hypervisor="qemu:///system" config="/kvmdata/config/test01.xml" migration_transport=ssh meta allow-migrate="true" 

//查看当前群集状态
[root@kvm01 ~]# pcs status
............
 test01	(ocf::heartbeat:VirtualDomain):	Started kvm01
............

6.KVM群集验证

cpp 复制代码
1:在两台kvm主机上分别查看虚拟机状态
//kvm01
[root@kvm01 ~]# virsh list --all
 Id    名称                         状态
----------------------------------------------------
 6     test01                         running

//kvm02
[root@kvm02 ~]# virsh list --all
 Id    名称                         状态
----------------------------------------------------


//删除资源test01的约束
//清除某个 pcs 资源只能在某个主机上运行的限制
[root@kvm01 ~]# pcs resource clear test01
[root@kvm01 ~]# pcs constraint		##查询限制情况,如下显示结果为无限制
Location Constraints:
Ordering Constraints:
Colocation Constraints:
Ticket Constraints:

//手动迁移
[root@kvm01 ~]# pcs resource move test01 


//kvm01上查看状态
[root@kvm01 ~]# virsh list --all
 Id    名称                         状态
----------------------------------------------------
 -     test01                         关闭


[root@kvm01 ~]# pcs status
Cluster name: cluster-kvm
Stack: corosync
Current DC: kvm01 (version 1.1.23-1.el7_9.1-9acf116022) - partition with quorum
Last updated: Wed Aug 31 21:54:15 2022
Last change: Wed Aug 31 21:52:31 2022 by root via crm_resource on kvm01

2 nodes configured
1 resource instance configured

Online: [ kvm01 kvm02 ]

Full list of resources:

 test01	(ocf::heartbeat:VirtualDomain):	Started kvm02

Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled


//kvm02上查看状态

[root@kvm02 ~]# virsh list --all
 Id    名称                         状态
----------------------------------------------------
 2     test01                         running


备注:
迁移后,test01运行在kvm02上

//将kvm02挂起,模拟故障
注意:
如果kvm01上对test01有约束,需要在kvm01上清除约束,才能将test01迁移回来
pcs resource clear test01

//查看kvm01中的状态
[root@kvm01 ~]# pcs status
Cluster name: cluster-kvm
Stack: corosync
Current DC: kvm01 (version 1.1.23-1.el7_9.1-9acf116022) - partition with quorum
Last updated: Wed Aug 31 21:56:26 2022
Last change: Wed Aug 31 21:52:31 2022 by root via crm_resource on kvm01

2 nodes configured
1 resource instance configured

Online: [ kvm01 ]
OFFLINE: [ kvm02 ]

Full list of resources:

 test01	(ocf::heartbeat:VirtualDomain):	Started kvm01

Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled


[root@kvm01 ~]# virsh list --all
 Id    名称                         状态
----------------------------------------------------
 5     test01                         running
相关推荐
吃肉不能购37 分钟前
Label-studio-ml-backend 和YOLOV8 YOLO11自动化标注,目标检测,实例分割,图像分类,关键点估计,视频跟踪
运维·yolo·自动化
学Linux的语莫41 分钟前
Ansible使用简介和基础使用
linux·运维·服务器·nginx·云计算·ansible
qq_312920111 小时前
docker 部署 kvm 图形化管理工具 WebVirtMgr
运维·docker·容器
踏雪Vernon1 小时前
[OpenHarmony5.0][Docker][环境]OpenHarmony5.0 Docker编译环境镜像下载以及使用方式
linux·docker·容器·harmonyos
Onlooker1291 小时前
云服务器部署WebSocket项目
服务器
学Linux的语莫1 小时前
搭建服务器VPN,Linux客户端连接WireGuard,Windows客户端连接WireGuard
linux·运维·服务器
legend_jz1 小时前
【Linux】线程控制
linux·服务器·开发语言·c++·笔记·学习·学习方法
Komorebi.py1 小时前
【Linux】-学习笔记04
linux·笔记·学习
黑牛先生1 小时前
【Linux】进程-PCB
linux·运维·服务器
Karoku0661 小时前
【企业级分布式系统】ELK优化
运维·服务器·数据库·elk·elasticsearch