小阿轩yx-KVM+GFS 分布式存储系统构建 KVM 高可用

小阿轩yx-KVM+GFS 分布式存储系统构建 KVM 高可用

案例分析

案例概述

  • 使用 KVM 及 GlusterFS 技术,结合起来实现 KVM 高可用
  • 利用 GlusterFS 分布式复制卷对 KVM 虚拟机文件进行分布存储和冗余

分布式复制卷

  • 主要用于需要冗余的情况下把一个文件存放在两个或两个以上的节点,当其中一个节点数据丢失或损坏后,KVM 仍然能够通过卷组找到另一个节点上存储的虚拟机文件,保证虚拟机正常运行
  • 节点修复后,GlusterFS 会自动同步同一组卷组里有数据的节点数据

案例前置知识点

GlusterFS 分布式文件系统简介

  • 由 Gluster 公司创始人兼首席执行官 Anand BabuPeriasamy 编写
  • 于 2011 年 10 月 7 日被 Red Hat 收购

特性

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

优势

  • 可用于大型的、分布式的、对大量数据进行访问的应用

特点

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

案例环境

主机

操作系统

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

案例需求
  • 部署 GlusterFS 文件系统
  • 实现 KVM 虚拟主机不会因宿主机宕机而宕机
案例实现思路
  • 安装 KVM
  • 所有节点部署 GlusterFS
  • 客户端挂载 GlusterFS
  • KVM 使用挂载的 GlusterFS 目录创建虚拟机
案例实施
部署 GFS 高可用分布式存储环境

安装部署 KVM 虚拟化平台

部署 GlusterFS

先开启四台机器,并会话同步

  • 192.168.10.101
  • 192.168.10.102
  • 192.168.10.103
  • 192.168.10.104

关闭防火墙、内核机制

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0

修改 hosts 文件

[root@localhost ~]# 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

设置好阿里巴巴仓库

[root@localhost ~]# rm -rf /etc/yum.repos.d/*
[root@localhost ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
[root@localhost ~]# curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
[root@localhost ~]# yum clean all

安装 GlusterFS 包

[root@localhost ~]# yum -y install centos-release-gluster 

进入目录查看文件

[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
Cent0s-Base.repo ent0S-Gluster-9.mepo Cent0S-Storage-common.repo epel.repo

查看当前查看状态

[root@localhost ~]# yum repolist

这一步的状态都是0,下面解决方法

修改 GlusterFS 文件

[root@localhost yum.repos.d]# vim CentOS-Gluster-9.repo
//修改前
mirrorlist=http://mirrorlist.centos.org?arch=$basearch&release=$releasever&repostorage-qluster-9
#baseurl=http://mirror.centos,org/$contentdir/$releasever/storage/$basearch/gluste~-9/
//修改后
#mirrorlist=http://mirrorlist.centos.org?arch=$basearch&release=$releasever&repostorage-qluster-9
baseurl=http://mirrors.aliyun.com/$contentdir/$releasever/storage/$basearch/gluste~-9/

再次查看

[root@localhost ~]# yum repolist
源标识                      源名称                                            状态
base/7/x86 64              Cent0S-7- Base - mirrors.aliyun.com               10,072
centos-gluster9/7/x86_64   Cent0s-7 - Gluster 9                              181
epel/x86_64                Extra Packages for Enterprise Linux 7 - x86 64    13,791
extras/7/x86_64            Cent0S-7- Updates - mirrors.aliyun.com            526
updates/7/x86 64           Cent0S-7-Extras - mirrors.aliyun.com              6,173
repolist: 30,743

安装软件包

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

启动服务并设置开机自启

[root@localhost ~]# systemctl start glusterd
[root@localhost ~]# systemctl enable glusterd

这里取消会话同步

在101上加入其它节点

[root@localhost ~]# gluster peer probe node2
peer probe: success
[root@localhost ~]# gluster peer probe node3
peer probe: success
[root@localhost ~]# gluster peer probe node4
peer probe: success

查看状态

[root@localhost ~]# gluster peer status
Hostname: node2
Uuid:b5f43fc7-2f68-4bf9-8721-eb6d1bbdd98b
State: Peer in Cluster (connected)

Hostname: node3
Uuid:bblcdlad-f396-403e-bf68-c96147466043
State: Peer in Cluster (Connected)

Hostname: node4
Uuid: ea66c509-4fcf-4b17-9bf-1d7b00608a7e
State: Peer in Cluster (Connected)

开启会话同步

创建目录

[root@localhost ~]# mkdir /data

取消会话同步

在101上创建分布式复制卷

[root@localhost ~]# 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

启动

[root@localhost ~]# gluster volume start models

查看信息

[root@localhost ~]# gluster volume info models

201和202恢复kvm01快照,XShell 连接客户端

  • 192.168.10.201
  • 192.168.10.202

开启会话同步

打开 hosts 文件添加节点

[root@localhost ~]# vim /etc/hosts
//添加节点
192.168.10.101 node1
192.168.10.102 node2
192.168.10.103 node3
192.168.10.104 node4

安装 glusterfs 客户端软件

[root@kvm01 ~]# yum -y install glusterfs glusterfs-fuse

创建挂载目录

[root@kvm01 ~]# mkdir /kvmdata

挂载 models 卷

[root@kvm01 ~]# mount -t glusterfs node1:models /kvmdata/

修改 fstab 文件

[root@localhost ~]# vi /etc/fstab
//添加配置
node1:models        /kvmdata     glusterfs  defaults,_netdev  0 0

查看挂载卷

[root@kvm01 ~]# df

取消会话同步

进入目录
[root@kvm01 ~]# cd /opt
在201上打开 Xftp把用到的系统镜像上传到/opt目录中。这里直接使用CentOS官方提供的qcow2格式的系统镜像(CentOS-7-x86_64-GenericCloud-2009.qcow2),这个镜像可以直接部署到kvm或openstack的平台中

 拷贝镜像到新目录下
[root@kvm01 opt]# cp CentOS-7-x86_64-GenericCloud-2009.qcow2 /kvmdata/test01.qcow2

为系统镜像设置密码

[root@kvm01 ~]# virt-customize -a /kvmdata/test01.qcow2 --root-password password:123
[  0.0] Examining the guest ...
[ 17.3] Setting a random seed
[ 17.4] Setting passwords
[ 19.3] Finishing off
用新的镜像文件生成虚拟机
[root@kvm01 opt]# 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
登录测试
[root@kvm01 opt]# virt-manager
测试实时迁移环境

配置kvm01的无密码登录环境(生成密钥对)

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

把公钥拷贝给kvm02

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

kvm01留一份

[root@kvm01 ~]# ssh-copy-id kvm01

配置kvm02的无密码登录环境(生成密钥对)

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

拷贝给kvm01

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

再拷贝给自己

[root@kvm02 ~]# ssh-copy-id kvm02

将 kvm01 迁移到 kvm02 上

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

查看状态

[root@kvm01 opt]# virsh list --all
Id            名称        状态
--------------------------------

查看 kvm02 上的状态

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

把 kvm02 迁回到 kvm01上

[root@kvm01 opt]# virsh migrate --persistent --undefinesource test01 qemu+ssh://kvm01/system

202上查看状态

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

201再查看状态

[root@kvm01 opt]# virsh list --all
Id        名称        状态
---------------------------------
3         test01      running
创建虚拟机资源

退出 /opt 目录,为配置文件创建共享目录

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

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

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

关闭 test01

[root@kvm01 ~]# virsh shutdown test01
域    test01 被关闭

取消定义 test01 虚拟机

[root@kvm01 ~]# virsh undefine test01
域    test01 已经被取消定义

查看状态

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

重新定义 test01 虚拟机

[root@kvm02 ~]# virsh define /kvmdata/config/test01.xml
定义域    test01 (从 /kvmdata/config/test01.xml)

查看状态

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

启动 test01

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

再查看状态

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

202 进入目录并查看状态

[root@kvm02 ~]# cd /kvmdata/
[root@kvm02 kvmdata]# ls
test01.qcow2
[root@kvm02 kvmdata]# virsh list --all
Id                名称            状态
--------------------------------------
部署群集

这里201和202会话同步

设置好阿里巴巴仓库

[root@kvm01 ~]# rm -rf /etc/yum.repos.d/*
[root@kvm01 ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
[root@kvm01 ~]# curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
[root@kvm01 ~]# yum clean all

安装群集组件(201和202都要安装)

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

查看 passwd 检查 hacluster 账号

[root@kvm01 ~]# cat /etc/passwd
hacluster:x:189:189:cluster user:/home/hacluster:/sbin/nologin

设置密码

[root@kvm01 ~]# passwd hacluster

  • 两台 kvm 机器密码要一致

启动服务并设置开机自启

[root@kvm01 ~]# systemctl start pcsd
[root@kvm01 ~]# systemctl enable pcsd
Created symlink from /etc/systemd/system/multi-user.target.wants/pcsd.service to
/usr/lib/systemd/system/pcsd.service.

取消会话同步

认证组成群集的节点(只在kvm01上操作)

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

自动生成配置文件(只在kvm01上操作)

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

启动群集(只在kvm01上操作)

[root@kvm01 ~]# pcs cluster start --all
kvm01: Starting Cluster (corosync)...
kvm02: Starting Cluster (corosync)...
kvm0l: Starting Cluster (pacemaker)...
kvm@2: Starting Cluster (pacemaker)...

设置开机自启

[root@kvm01 ~]# pcs cluster enable --all
kvm01: Cluster Enabled
kvm02: Cluster Enabled
  • enable:将群集设置为开机自启

201和202查看pcs群集状态

[root@kvm01 ~]# pcs status

2 nodes configured
0 resource instances configured

Online: [ kvm01 kvm02 ]

No resource
[root@kvm02 ~]# pcs status

2 nodes configured
0 resource instances configured

Online: [ kvm01 kvm02 ]

No resource

关闭其中一个节点

[root@kvm01 ~]# pcs cluster stop kvm01
kvm01: Stopping Cluster (pacemaker)...
kvm01: Stopping Cluster (corosync)...

在另一个节点查看状态

[root@kvm02 ~]# pcs status

Online: [ kvm02 ]
OFFLINE: [ kvm01 ]

启动服务

[root@kvm01 ~]# pcs cluster start kvm01
kvm01: Starting Cluster (pacemaker)...
kvm01: Starting Cluster (corosync)...

查看状态

[root@kvm02 ~]# pcs status

2 nodes configured
0 resource instances configured

Online: [ kvm01 kvm02 ]

No resource

开启会话同步

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

[root@kvm01 ~]# pcs property set stonith-enabled=false

取消会话同步

向群集中添加资源

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

Assumed agent name 'ocf:heartbeat:VirtualDomain'(deduced from 'VirtualDomain')
  • meta allow-migrate="true"  :允许迁移模式

查看群集状态

[root@kvm01 ~]# pcs status
Cluster name: cluster-kvm

WARNINGS:
No stonith devices and stonith-enabled is not false

Stack: corosync
Current DC: kvm02 (version 1.1.23-1.el7_9.1-9acf116022) - partition with quorum
Last updated: Wed Aug 31 19:55:48 2022
Last change: Wed Aug 31 19:55:43 2022 by root via cibadmin on kvm01

2 nodes configured
1 resource instance configured

Online: [ kvm01 kvm02 ]

Full list of resources:

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

Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled
KVM 群集验证

kvm01 的状态

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

查看资源限制

[root@kvm01 ~]# pcs constraint
//查询限制情况,如下显示结果为无限制
Location Constraints:
Ordering Constraints:
Colocation Constraints:
Ticket Constraints:

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

[root@kvm01 ~]# pcs resource clear test01

手动迁移

[root@kvm01 ~]# pcs resource move test01
Warning: Creating location constraint cli-ban-test01-on-kvm@l with a score of -INFINITY for resource test@l on node kvm01.
This will prevent test0l from running on kvm0l until the constraint is removed.his will be the case even if kvm0l is the last node in the cluster.
  • 会自动选择其他节点进行迁移

201上查看状态

[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
[root@kvm01 ~]# virsh list --all
 Id    名称                         状态
----------------------------------------------------
 -     test01                         关闭

202上查看状态

[root@kvm02 ~]# virsh list --all
 Id    名称                         状态
----------------------------------------------------
 2     test01                         running
  • 迁移后,test01运行在kvm02上

查看是否有限制

[root@kvm02 ~]# pcs constraint
Location Constraints:
    Resource: test0l
        Disabled on: kvm01(score:-INFINITY)(role: Started)
Ordering Constraints:
Colocation Constraints:
Ticket Constraints:
  • Resource: test01:被限制了 

202上清除 test01 限制

[root@kvm02 ~]# pcs resource clear test01

202查看限制情况

[root@kvm02 ~]# pcs constraint
//查询限制情况,如下显示结果为无限制
Location Constraints:
Ordering Constraints:
Colocation Constraints:
Ticket Constraints:

201查看限制情况

[root@kvm01 ~]# pcs constraint
//查询限制情况,如下显示结果为无限制
Location Constraints:
Ordering Constraints:
Colocation Constraints:
Ticket Constraints:

202虚拟机挂起模拟故障

201上查看状态

[root@kvm01 ~]# pcs status

2 nodes configured
1 resource instance configured

Online: [ kvm@l ]
OFFLINE: [ kvm02 ]

Full list of resources:
    test01 (ocf::heartbeat:VirtualDomain): Started kvm01

查看状态

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

小阿轩yx-KVM+GFS 分布式存储系统构建 KVM 高可用

KVM(GFS)分布式存储系统构建可以通过以下步骤来实现高可用性: 1. 构建GFS集群:首先,需要构建一个GFS集群,这可以通过安装和配置GFS软件来完成。具体的实验过程可以参考引用中的相关内容。 2. 安装KVM虚拟机:在GFS集群节点服务器上,安装和配置KVM虚拟机。这样,可以通过KVM虚拟化技术来创建和管理虚拟机,从而提供更高的灵活性和可靠性。 3. GFS集群节点服务器添加磁盘:在每个GFS集群节点服务器上,添加额外的磁盘用于存储虚拟机的镜像文件和数据。这样,可以实现虚拟机的高可用性和故障恢复能力。 4. KVM宿主机部署成GFS客户端:将KVM宿主机配置为GFS客户端,可以使得虚拟机在不同的宿主机之间进行迁移和故障转移,从而提供高可用性和负载均衡的支持。 5. 验证存储:进行存储验证,确保GFS分布式存储系统在不同节点之间的数据一致性和可靠性。可以通过数据写入和读取测试来验证存储系统的功能和性能。 6. 进行高可用测试:进行高可用性测试,模拟故障情况,验证系统在节点故障或其他异常情况下的自动故障转移和恢复能力。可以参考引用中的OpenStack和libvirt相关内容来实现高可用性的控制和管理。 通过以上步骤,可以构建一个具有高可用性的KVM(GFS)分布式存储系统,提供可靠的虚拟化环境和数据存储服务。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [2.KVM+GFS分布式存储系统构建KVM高可用](https://blog.csdn.net/a3409148395/article/details/128648676)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [KVM+GFS分布式系统构建KVM高可用](https://download.csdn.net/download/weixin_38579899/14038636)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值