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

一、案例分析

        本案例主要使用 KVM 及 GlusterFS 技术,结合起来从而实现KVM 高可用。利用GlusterFs分布式复制卷,对KVM虚拟机文件进行分布存储和冗余。分布式复制卷主要用于需要冗余的情况下把一个文件存放在两个或两个以上的节点,当其中一个节点数据丢失或者损坏之后,KVM仍然能够通过卷组找到另一节点上存储的虚拟机文件,以保证虚拟机正常运行。当节点修复之后,GlusterFS会自动同步同一组卷组里面有数据的节点数据。

1.Glusterfs简介

        GlusterFS 分布式文件系统是一个可扩展的分布式文件系统,可用于大型的、分布式的、对大量数据进行访问的应用。它可运行于廉价的普通硬件上,并提供容错功能;也可以给大量的用户提供总体性能较高的服务。GlusterFs可以根据存储需求快速调配存储,内含丰富的自动故障转移功能,且摒弃集中元数据服务器的思想。适用于数据密集型任务的可扩展网络文件系统,且免费开源。

2.Glusterfs特点

        GlusterFS 体系结构,将计算、存储和 IO 资源聚合到全局名称空间中,每台服务器都被视为节点,通过添加附加节点或向每个节点添加额外存储来扩展容量。通过在更多节点之间部署存储来提高性能。
        GlusterFS 支持基于文件的镜像和复制、分条、负载平衡、故障转移、调度、磁盘缓存、存储配额、卷快照等功能。
        GlusterFS 各客户端之间无连接,本身依赖于弹性哈希算法,而不是使用集中式或分布式元数据模型。
        GlusterFS 通过各种复制选项提供数据可靠性和可用性,例如复制卷、分布卷。

3.案例环境

主机

操作系统

主机名/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

二、案例实施

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

(1)部署Glusterfs

        在所有节点上执行如下命令:

关闭防所有节点的防火墙、SELiunx

systemctl stop firewalld
systemctl disable 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
[root@node1 ~]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma(已经被glusterfs取代)

启动 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

(2)创建 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存储

(1)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 ~]# vim /etc/fstab

node1:models        /kvmdata     glusterfs  defaults,_netdev  0 0

(2)在kvm01上安装虚拟机

拷贝qcow2磁盘文件

        将实验用到的系统镜像上传到KVM主机的root目录中。这里直接使用CentOS官方提供的qcow2格式的系统镜像(CentOS-7-x86_64-GenericCloud-2009.qcow2),这个镜像可以直接部署到kvm的平台中。

[root@kvm01 ~]# cp CentOS-7-x86_64-GenericCloud-2009.qcow2 /kvmdata/test01.qcow2

部署虚拟机

[root@kvm01 ~]# yum -y install libguestfs-tools
[root@kvm01 ~]# gpasswd -a qemu root
[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

安装命令各选项的具体作用如下所示:
        --disk:指定存储设备及其属性
        device:设备类型,如cdrom、disk或floppy等,默认为disk;
        bus:磁盘总线类型,其值可以为ide、scsi、usb、virtio或xen
        --virt-type:使用的hypervisor(虚拟机监视器),如kvm、qemu、xen等
        --boot cdrom,hd,network:指定引导次序;

3.测试实时迁移环境

(1)配置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

(2)将test01虚拟机从kvm01主机迁移到kvm02主机

[root@kvm01 ~]# virsh migrate --persistent --undefinesource test01 qemu+ssh://kvm02/system
[root@kvm01 ~]# virsh list --all

迁移成功后,在kvm01主机就没有了test01的资源

(3)查看kvm02主机上的虚拟机状态

[root@kvm01 ~]# virsh --connect=qemu+ssh://kvm02/system list

(4)将test01从kvm02主机迁移到kvm01主机

[root@kvm01 ~]# virsh --connect=qemu+ssh://kvm02/system migrate --persistent --undefinesource test01 qemu+ssh://kvm01/system

 4.创建虚拟机资源

(1)为配置文件创建共享目录

[root@kvm01 ~]# mkdir /kvmdata/config

(2)将test01的配置文件拷贝到共享目录

[root@kvm01 ~]# cp /etc/libvirt/qemu/test01.xml /kvmdata/config/

(3)取消定义test01虚拟机

[root@kvm01 ~]# virsh shutdown test01
[root@kvm01 ~]# virsh undefine test01
[root@kvm01 ~]# virsh list --all

(4)重新定义test01虚拟机

[root@kvm02 ~]# virsh define /kvmdata/config/test01.xml
[root@kvm01 ~]# virsh start test01

域 test01 已开始

[root@kvm01 ~]# virsh list --all

5.部署群集

(1)群集组件的安装(kvm01和kvm02都安装)

[root@kvm01 ~]# yum -y install pcs pacemaker fence-agents-all

        Pacemaker 是一个集群管理器。它利用OpenAIS 或 heartbeat提供的消息和成员能力,由辅助节点和系统进行故障检测和回收,实现性群集服务(亦称资源)的高可用性。
        Fence agent是集群管理中的一个概念,用于在发生电源故障或其他故障时确保集群的稳定性。
        pcs 是集群管理的一个守护进程,利用pcs提供的工具可以对集群环境进行状态的管理

两台kvm主机的密码要一致

[root@kvm01 ~]# passwd hacluster
[root@kvm01 ~]# systemctl start pcsd
[root@kvm01 ~]# systemctl enable pcsd

接下的只在kvm01上操作

(2)认证组成群集的节点

[root@kvm01 ~]# pcs cluster auth kvm01 kvm02 -u hacluster -p aptech

(3)自动生成配置文件

[root@kvm01 ~]# pcs cluster setup --name cluster-kvm kvm01 kvm02

(4)启动群集

[root@kvm01 ~]# pcs cluster start --all
[root@kvm01 ~]# pcs cluster enable --all

(5)在任意一个kvm主机上查看pcs群集状态

[root@kvm01 ~]# pcs status

(6)将其中一个节点关闭,查看群集状态

[root@kvm01 ~]# pcs cluster stop kvm01

在另一个节点查看状态

[root@kvm02 ~]# pcs status

(7)查看后再开启,让群集正常运行

[root@kvm01 ~]# pcs cluster start kvm01

(8)关闭隔离设备的功能(每个设备都执行)

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

pcs property set stonith-enabled=false

(9)向群集中添加资源

[root@kvm01 ~]# pcs resource create test01 VirtualDomain hypervisor="qemu:///system" config="/kvmdata/config/test01.xml" migration_transport=ssh meta allow-migrate="true"

(10)查看当前群集状态

[root@kvm01 ~]# pcs status

6.KVM群集验证

(1)在两台kvm主机上分别查看虚拟机状态

[root@kvm01 ~]# virsh list --all
[root@kvm02 ~]# virsh list --all

(2)删除资源test01的约束

清除某个 pcs 资源只能在某个主机上运行的限制

[root@kvm01 ~]# pcs resource clear test01
[root@kvm01 ~]# pcs constraint ##查询限制情况,如下显示结果为无限制

Location Constraints:
Ordering Constraints:
Colocation Constraints:
Ticket Constraints:

备注:
        如果冒号后没有任何信息,表示没有约束,如果有约束会有警告提示
        当把虚拟机迁移到了另一台主机,会出现约束,要想将虚拟机迁移回来,需要先清除约束

(3)手动迁移

[root@kvm01 ~]# pcs resource move test01

(4)kvm01上查看状态

[root@kvm01 ~]# virsh list --all
[root@kvm01 ~]# pcs status

(5)kvm02上查看状态

迁移后,test01运行在kvm02上

[root@kvm02 ~]# virsh list --all

(6)将kvm02挂起,模拟故障

如果kvm01上对test01有约束,需要在kvm01上清除约束,才能将test01迁移回来

[root@kvm01 ~]# pcs resource clear test01

(7)查看kvm01中的状态

[root@kvm01 ~]# pcs status
[root@kvm01 ~]# virsh list --all

你可能感兴趣的:(分布式)