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

概述

        本章利用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 daemonLoaded: 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: 3Hostname: 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 aaaVolume 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 --allId    名称                         状态
----------------------------------------------------1     test01                         running

 实验验收

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

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

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

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

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

相关文章

雪花飘,购物抛物线,进度条等四个案列,带入走进 CSS transition

前言 今天从四个案例,我们一起走进 CSS Transition。 源码 以及 在线演示地址 源码地址: 四个案例, CSS Transition 源码 在线演示地址:(兼容移动端) 贝塞尔曲线运动进度条雪花飘飘效果购物车抛物线效果 案例演示 内置贝塞…

windows server 2019 -DNS服务器搭建

前面是有关DNS的相关理论知识,懂了的可以直接跳到第五点。 说明一下:作为服务器ip最好固定下来,以DNS服务器为例子,如果客户机的填写DNS信息的之后,服务器的ip如果变动了的话,客户机都得跟着改&#xff0c…

深入浅出Redis(九):Redis的发布订阅模式

引言 Redis是一款基于内存的键值对数据库,提供了多种数据结构存储数据,存取数据的速度还非常快,除了这些优点它还提供了其他特色功能,比如:管道、lua脚本、发布订阅模型 本篇文章主要描述发布订阅模型,将…

linux基础篇:Linux中磁盘的管理(分区、格式化、挂载)

Linux中磁盘的管理(分区、格式化、挂载) 一、认识磁盘 1.1 什么是磁盘 磁盘是一种计算机的外部存储器设备,由一个或多个覆盖有磁性材料的铝制或玻璃制的碟片组成,用来存储用户的信息,这种信息可以反复地被读取和改写…

Leetcode算法训练日记 | day22

一、二叉搜索树的最近公共祖先 1.题目 Leetcode:第 235 题 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足…

Python 发送邮件 (含代码)

通过Python代码来发送邮件。下面是步骤 先在某一个邮箱页面 开启 POP3/SMTP服务 获取授权码,这样免密码登录 授权码会用在代码里 获得 SMTP 服务器地址 代码 import smtplib from email.mime.text import MIMEText from email.utils import formataddr ms…

一例简单的文件夹病毒的分析

概述 这是一个典型的文件夹病毒,使用xp时代的文件夹图标,通过可移动存储介质传播,会向http://fionades.com/ABIUS/setup.exe下载恶意载荷执行。 其病毒母体只是一个加载器,会在内存是解密加载一个反射型的dll,主要的…

OOM三大场景和解决方案

目录 首先,说说什么是OOM? Java OOM的三大核心场景 场景一、堆内存OOM 类型一:在线OOM分析,这个属于轻量级的分析: 类型二:离线OOM分析,这个属于轻量级的分析: 场景二&#xf…

Ant Design Vue

Ant Design Vue是一个由阿里巴巴团队打造的Vue组件库,它以其优雅的设计和丰富的功能集成而被广泛使用。以下是对Ant Design Vue的简单介绍: 首先,Ant Design Vue采用了精良的设计风格,为用户提供了简约、美观的界面,符…

类和对象—初阶

目录 1.面向过程和面向对象初步认识 2.类的引入 3.类的定义 4.类的访问限定符及封装 4.1 访问限定符 【面试题】 4.2 封装 【面试题】 5.类的作用域 6.类的实例化 7.类对象模型 7.1 如何计算类对象的大小 7.2 类对象的存储方式 7.3 结构体内存对齐规则 【面试题】…

LMDoply部署实战

使用LMDeoply部署各类开源大模型,进行推理实践。 一. 环境准备 1. 创建Conda环境 studio-conda -t lmdeploy -o pytorch-2.1.2 2. 安装LMDeploy 激活刚刚创建的虚拟环境。 conda activate lmdeploy 安装0.3.0版本的lmdeploy。 pip install lmdeploy[all]0.3.…

Chrome谷歌下载入口

​hello,我是小索奇 发现好多人说谷歌浏览器在哪里下载呀,哪里可以找到? 你可能会心想,一个浏览器你还不会下载啊? 还真是,有很多伙伴找不到下载入口,为什么呢? Bing进行搜索&am…

4.进程相关 2

8.内存映射 8.1 内存映射相关定义 创建一个文件,将保存在磁盘中的文件映射到内存中,后期两个进程之间对内存中的数据进行操作,大大减少了访问磁盘的时间,也是一种最快的 IPC ,因为进程之间可以直接对内存进行存取 8.…

面试经典算法系列之双指针1 -- 合并两个有序数组

面试经典算法题1 – 合并两个有序数组 LeetCode.88 公众号:阿Q技术站 问题描述 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#…

【讲解下Fiddler的安装和使用】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

宠物救助系统|基于Springboot和vue的流浪猫狗救助救援系统设计与实现(源码+数据库+文档)

宠物救助目录 基于Springboot和vue的流浪猫狗救助救援系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1、前台: 2、后台 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌…

面试经典算法系列之链表2 -- 环形链表

面试经典算法8-环形链表 LeetCode.141 公众号:阿Q技术站 问题描述 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环&am…

【C++成长记】C++入门 |函数重载、引用、内联函数

🐌博主主页:🐌​倔强的大蜗牛🐌​ 📚专栏分类:C❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、函数重载 1、函数重载概念 二、引用 1、引用概念 2、引用特性 3、常引用 4、使用场景 5、…

数据库之DCL操作(用户、访问权限。)

DCL英文全称是Data control language(数据控制语言),用来管理数据库用户、控制数据库的访问权限。 1.管理用户 1.1查询用户 select * from mysql.user; 其中 Host代表当前用户访问的主机,如果为localhost,仅代表只能够在当前本机访问&…

深入浅出 -- 系统架构之微服务中OpenFeign最佳实践

前面我们讲了一下 Ribbon 和 RestTemplate 实现服务端通信的方法,Ribbon 提供了客户端负载均衡,而 RestTemplate 则对 http 进行封装,简化了发送请求的流程,两者互相配合,构建了服务间的高可用通信。 但在使用后也会发…