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

news2024/12/23 17:06:22

概述

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

实验前置知识点

1. Glusterfs简介

        GlusterFS 分布式文件系统是由 Gluster 公司的创始人兼首席技术官 Anand Babu Periasamy 编写。一个可扩展的分布式文件系统,可用于大型的、分布式的、对大量数据进行访问的应用。它可运行于廉价的普通硬件上,并提供容错功能;也可以给大量的用户提供 总体性能较高的服务。GlusterFS 可以根据存储需求快速调配存储,内含丰富的自动故障转移功能,且摒弃集中元数据服务器的思想。适用于数据密集型任务的可扩展网络文件系统, 且免费开源。Gluster 于 2011 年 10 月 7 日被 Red Hat 收购

2. Glusterfs特点

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

实验环境

1. 实验环境 

        公司由于大规模使用 KVM 虚拟机来运行业务,为了保证公司虚拟机能够安全稳定运行,决定采用 KVM+GlusterFS 模式,来保证虚拟机存储的分布部署,以及分布冗余。避免当虚拟机文件损坏,或者丢失。从而在损坏或就丢失时有实时备份,保证业务正常运行

本实验环境如图

2. 实验需求

(1)部署GlusterFS文件系统

(2)实现KVM虚拟主机不会因宿主机宕机而宕机

3. 实验实验思路

(1)安装KVM

(2)所有节点部署GlusterFS

(3)客户端挂载GlusterFS

(4)KVM使用挂载的GlusterFS目录创建虚拟机

实验实施

1. 安装部署KVM虚拟化平台

(1)安装KVM虚拟化平台

 在 CentOS 的系统光盘镜像中,已经提供了安装 KVM 所需软件。通过部署基于光盘镜像的本地 YUM 源,直接使用 YUM 命令安装所需软件即可,安装 KVM 所需软件具体包含以下几个

[root@kvm01 ~]# yum -y install qemu-kvm qemu-kvm-tools virt-install qemu-img bridge-utils libvirt

(2)验证

重启系统后,把这个勾选上

查看 CPU 是否支持虚拟化,对于 Intel 的服务器可以通过以下命令查看,只要有输出就说明 CPU 支持虚拟化;AMD 服务器可用 cat/proc/cpuinfo | grep smv 命令查看 

检查KVM模块是否安装

[root@kvm01 ~]# lsmod | grep kvm
kvm_intel             183621  0 
kvm                   586948  1 kvm_intel
irqbypass              13503  1 kvm

(3)开启libvirtd服务

[root@kvm01 ~]# systemctl start libvirtd
[root@kvm01 ~]# systemctl enable libvirtd

(4) 设置KVM网络为桥接模式

[root@kvm01 ~]# cd /etc/sysconfig/network-scripts/
[root@kvm01 network-scripts]# cp ifcfg-ens33 ifcfg-br0
[root@kvm01 network-scripts]# vim ifcfg-ens33 
TYPE="Ethernet"
UUID="8b7a6370-b54d-428f-bab7-104c308715e3"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
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"
DEVICE="ens33"
ONBOOT="yes"
IPV6_PRIVACY="no"
BRIDGE=br0


[root@kvm01 network-scripts]# vim ifcfg-br0 
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.161.200
NETMASK=255.255.255.0
GATEWAY=192.168.161.2
DNS1=202.96.128.86
DNS2=119.29.29.29
TYPE=Bridge

(5)重启网络服务查看IP地址

[root@kvm01 network-scripts]# systemctl restart network

2. 部署GlusterFS

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

(1)关闭防火墙、SELinux,将四台服务器的主机名分别改为node1、node2、node3、node4。下面以node1为例进行操作

[root@node1 ~]# systemctl status firewalld.service 
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)
[root@node1 ~]# cat /etc/sysconfig/selinux | grep disabled
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
[root@node1 ~]# 

(2)编写hosts文件

[root@node1 ~]# vim /etc/hosts
192.168.161.10 node1
192.168.161.11 node2
192.168.161.12 node3
192.168.161.13 node4
192.168.161.200 kvm01

(3)安装软件

[root@node1 ~]# yum -y install centos-release-gluster
[root@node1 ~]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma --skip-broken

(4)启动GlusterFS

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

(5)在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 ~]# 

(6)查看群集状态

[root@node1 ~]# gluster peer status
Number of Peers: 3

Hostname: node2
Uuid: bf0fafed-a1fd-4830-b36d-fe6719c33a7d
State: Peer in Cluster (Connected)

Hostname: node3
Uuid: 9d9ac472-2bf6-4a9c-8fcc-193ed83728ef
State: Peer in Cluster (Connected)

Hostname: node4
Uuid: 3e842864-cda8-4247-931f-114ec8569168
State: Peer in Cluster (Connected)
[root@node1 ~]# 

3. 创建GlusterFS分布式复制卷

当前一共有四个节点,设置为 2x2=4,就是 2 个节点为一组,一个卷组两个节点会有相同的数据。从而达到虚拟机数据分布式存储并有冗余备份

(1)给每台服务器加一块硬盘

(2)进行分区格式化

[root@node1 ~]# fdisk /dev/sdb
[root@node1 ~]# mkfs.xfs /dev/sdb1

(3)创建目录并挂载

[root@node1 ~]# mkdir /data
[root@node1 ~]# mount /dev/sdb1 /data/
[root@node1 ~]# df -Th
文件系统       类型      容量  已用  可用 已用% 挂载点
/dev/sda3      xfs        18G  4.7G   14G   26% /
devtmpfs       devtmpfs  471M     0  471M    0% /dev
tmpfs          tmpfs     487M     0  487M    0% /dev/shm
tmpfs          tmpfs     487M  8.3M  479M    2% /run
tmpfs          tmpfs     487M     0  487M    0% /sys/fs/cgroup
/dev/sda1      xfs      1014M  164M  851M   17% /boot
tmpfs          tmpfs      98M  8.0K   98M    1% /run/user/42
tmpfs          tmpfs      98M     0   98M    0% /run/user/0
/dev/sdb1      xfs        20G   33M   20G    1% /data

(4)创建分布式复制卷

[root@node1 ~]# gluster volume create aaa replica 2 node1:/data node2:/data node3:/data node4:/data force
volume create: aaa: success: please start the volume to access data

(5)启动并查看卷

[root@node1 ~]# gluster volume start aaa
volume start: aaa: success
[root@node1 ~]# gluster volume info aaa
 
Volume Name: aaa
Type: Distributed-Replicate
Volume ID: 668e2a4d-b464-4817-90b6-308a6d0eef3e
Status: Started
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

 4. 客户端挂载glusterfs卷

(1)安装glusterfs客户端软件

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

(2)编写hosts文件

[root@kvm01 ~]# vim /etc/hosts
192.168.161.10 node1
192.168.161.11 node2
192.168.161.12 node3
192.168.161.13 node4
192.168.161.200 kvm01

(3)创建挂载目录,并挂载aaa卷

[root@kvm01 ~]# mkdir /kvmdata
[root@kvm01 ~]# mount -t glusterfs node1:aaa /kvmdata/
[root@kvm01 ~]# df -Th
文件系统       类型            容量  已用  可用 已用% 挂载点
/dev/sda3      xfs              74G  5.3G   69G    8% /
devtmpfs       devtmpfs        3.9G     0  3.9G    0% /dev
tmpfs          tmpfs           3.9G     0  3.9G    0% /dev/shm
tmpfs          tmpfs           3.9G   13M  3.9G    1% /run
tmpfs          tmpfs           3.9G     0  3.9G    0% /sys/fs/cgroup
/dev/sda1      xfs            1014M  164M  851M   17% /boot
tmpfs          tmpfs           797M  8.0K  797M    1% /run/user/42
tmpfs          tmpfs           797M   60K  797M    1% /run/user/0
/dev/sr0       iso9660          11G   11G     0  100% /run/media/root/CentOS 7 x86_64
node1:aaa      fuse.glusterfs   40G  475M   40G    2% /kvmdata

 5. KVM使用卷创建虚拟机

(1)先把需要的镜像文件上传

[root@kvm01 ~]# cd /kvmdata/
[root@kvm01 kvmdata]# mkdir iso
[root@kvm01 kvmdata]# cd iso
[root@kvm01 iso]# ls
CentOS-7-x86_64-Minimal-1810.iso

 (2)创建虚拟机

[root@kvm01 ~]# virt-install -n test01 -r 1024 --vcpus=1 --disk path=/kvmdata/test01.qcow2,size=10 -w bridge:br0 --virt-type=kvm --accelerate --autostart -c /kvmdata/iso/CentOS-7-x86_64-Minimal-1810.iso --vnc --vncport=5901 --vnclisten=0.0.0.0

 

 (3)使用vnc进行连接

这里就是正常的装Centos了

 

(4)查看创建的虚拟机状态

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

 实验验收

验证存储,在四台节点上查看目录里是否存在虚拟机文件。可以看到虚拟机文件已经存放到node3、node4里面了

[root@node3 ~]# ls /data/
iso  test01.qcow2
[root@node4 ~]# ls /data/
iso  test01.qcow2

 从上面结果看,虚拟机文件已同步到卷组 node3、node4 当中,再发生宿主机宕机后,将不会影响虚拟机正常使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1579635.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SSM+Jsp+Mysql的图书仓储管理系统

开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包…

JavaSE继承和多态(上)

目录 一.继承的基本使用 1.继承的概念 2.继承的语法 3.父类成员访问 (1)子类中访问父类的成员变量 1.子类和父类不存在同名成员变量 2.子类和父类成员变量同名 (2)子类中访问父类的成员方法 1.成员方法名字不同 2.成员方法名字相同 二.super关键…

SpringCloudAlibaba基础使用(2024最全、最新)

一、简介二、服务注册配置Nacos2.1 下载启动2.2 服务注册2.3 服务配置2.3.1 NameSpace-GroupID-DataId 三、熔断限流 Sentinel3.1 介绍3.2 下载安装3.3 如何使用3.3.1 流控规则流控模式流控效果 3.3.2 熔断规则慢调用比例异常比例异常数 3.3.3 SentinelResource3.3.4 热点规则3…

分布式ID生成的几种方案(后续待补充)

分布式ID生成的几种方案 分布式ID的特性 唯一性:确保生成的ID是全网唯一的; 高可用性:确保任何时候都能正确的生成ID; UUID 算法核心思想是结合机器的网卡、当地时间、一个随机数来生成UUID; 优点: 本地…

深度学习的数学基础--Homework2

学习资料:https://www.bilibili.com/video/BV1mg4y187qv/?spm_id_from333.788.recommend_more_video.1&vd_sourced6b1de7f052664abab680fc242ef9bc1 神经网络的特点:它不是一个解析模型,它的储存在一堆参数里面(确定一个超平…

sql注入方式之联合注入

1.1 靶场环境 系统centos7 IP地址192.168.1.24 1.2 联合注入原理 联合查询注入是联合两个表进行注入攻击,使用关键词 union select 对两个表进行联合查询。两个表的字段要数要相同,不然会出现报错。 1.3 找注入点 找注入点,当输入id1 an…

环形链表 II - LeetCode 热题 26

大家好!我是曾续缘😛 今天是《LeetCode 热题 100》系列 发车第 26 天 链表第 5 题 ❤️点赞 👍 收藏 ⭐再看,养成习惯 环形链表 II 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环&#xf…

linux特殊引号

可见引号的不同,可以实现对不同内容的引用以及解析

近50位科技企业大咖齐聚共探出海之道,中国企业出海应该怎么卷?

4月2日下午,由中国云产业联盟暨中关村云计算产业联盟(简称“云联盟”)组织召开的“科技企业出海经验分享”专题闭门研讨会成功召开,云联盟执行会长兼秘书长龚梅,云联盟副秘书长、汉能投资董事总经理赵兰洋以及来自中国…

若依自带vue-cropper上传图片(可旋转、缩放)

2024.4.4今天我学习了如何使用若依的vue-cropper上传图片组件,在工作中遇到一个需求,需要对上传的图片进行旋转的操作,然后我先找到el-upload组件,使用之后发现它有一个自动上传和非自动上传的功能,是不是就可以通过非…

二:深入理解 JAVA 内存模型 JMM

目录 1、为什么要有内存模型1.1、为什么要有多级缓存?1.2、缓存一致性问题1.3、处理器优化和指令重排 2、并发编程的三大问题2.1、原子性问题2.2、有序性问题2.3、可见性问题2.4、三大特性 3、什么是内存模型?3.1、概念3.2、内存模型到底是怎么保证缓存一…

自动驾驶基础技术-无迹卡尔曼滤波UKF

自动驾驶基础技术-无迹卡尔曼滤波UKF Unscented Kalman Filter是解决非线性卡尔曼滤波的另一种思路,它利用Unscented Transform来解决概率分布非线性变换的问题。UnScented Kalman Filter不需要像Extended Kalman Filter一样计算Jacobin矩阵,在计算量大…

LeetCode-热题100:K 个一组翻转链表

题目描述 给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改变节…

在一台恢复测试机器上验证oracle备份有效性

一 目的 定期将生产环境oracle数据库恢复到一台测试环境数据库服务器上,以验证备份是否有效,是否能正常恢复。 二 环境 这里以恢复orcl1库为例,计划在orcl这个实例上进行恢复测试。 三 实验步骤 3.1 在目标端创建和源端一样的备份目录 ①…

从零开始写 Docker(十)---实现 mydocker logs 查看容器日志

本文为从零开始写 Docker 系列第十篇,实现类似 docker logs 的功能,使得我们能够查查看容器日志。 完整代码见:https://github.com/lixd/mydocker 欢迎 Star 推荐阅读以下文章对 docker 基本实现有一个大致认识: 核心原理&#x…

51单片机之自己配串口寄存器实现波特率9600

本配置是根据手册进行开发配置的 1、首先配置SCON 所以综上所诉 SCON 0x40 (0100 0000) 2、PCON不用配置 3、配置定时器1 4、波特率的计算 5、配置AUXR 6、对比 7、实现 8、优化(实现字符串) 引入TI (智能延时&…

加州大学欧文分校英语基础语法专项课程03:Simple Past Tense 学习笔记(完结)

Learn English: Beginning Grammar Specialization Specialization Certificate course 3: Simple Past Tense Course Certificate 本文是学习 https://www.coursera.org/learn/simple-past-tense 这门课的学习笔记,如有侵权,请联系删除。…

Java基础笔记(一)

一、面向对象高级基础 1.Java的动态绑定机制 public class DynamicBinding {public static void main(String[] args) {//a 的编译类型 A, 运行类型 BA a new B();//向上转型System.out.println(a.sum());//40 子类sum()注释后-> 30System.out.println(a.sum1());//30 子类…

STM32无刷电机全套开发资料(源码、原理图、PCB工程及说明文档)

目录 1、原理图、PCB、BOOM表 2、设计描述 2.1 前言 2.2 设计电路规范 3、代码 4、资料清单 资料下载地址:STM32无刷电机全套开发资料(源码、原理图、PCB工程及说明文档) 1、原理图、PCB、BOOM表 2、设计描述 2.1 前言 经过一个星期的画PCB,今…

上传应用程序到苹果应用商店的工具和要点

引言 在今天的移动应用市场中,将应用程序上传到苹果应用商店(App Store)是许多开发者的首要任务之一。然而,不同操作系统下的开发者可能需要使用不同的工具和遵循不同的要求来完成这一任务。本文将介绍在 macOS、Windows 和 Linu…