KVM+GFS分布式存储

news2025/1/24 14:58:57

本章内容:
学会KVM+GFS分布式存储高可用

1.0 案例环境

1.案例环境

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

案例环境如表:

拓扑如下:

2.案例需求

1)部署GlusterFS 文件系统

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

3.案例实现思路

1)安装KVM

2)所有节点部署 GlusterFS

3)客户端挂载GlusterFS

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

1.1 安装部署KVM虚拟化平台

1)安装KVM 虚拟化平台

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

1)准备KVM装环境

cpu 2个4核心,内存32G,硬盘100G,配置CPU支持虚拟化

2) yum 安装 kvm
 yum -y install qemu-kvm qemu-kvm-tools virt-install qemu-img bridge-utils libvirt 
3)验证

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

检测KVM模块是否安装

[root@kvm03 ~]# lsmod | grep kvm
kvm_intel             183621  0 
kvm                   586948  1 kvm_intel
irqbypass              13503  1 kvm
[root@kvm03 ~]# 
4)开启libvirtd 服务
[root@kvm03 ~]# systemctl start libvirtd
[root@kvm03 ~]# systemctl enable libvirtd

2)设置 KVM 网络

        宿主服务器安装完成 KVM,首先要设定网络,在 libvirt 中运行 KVM 网络有两种方法: NAT 和 Bridge,默认是 NAT

关于两种网络模式的说明:

  • 用户模式,即 NAT 方式,这种方式是默认网络,数据包由 NAT 方式通过主机的网卡接 口进行传送,可以访问外网,但是无法让外部主机访问虚拟机内部网络
  • 桥接模式,这种模式允许虚拟机像一台独立的主机一样拥有网络,外部的机器可以直接 访问到虚拟机内部,但需要网卡支持,一般有线网卡都支持。

这里以 Bridge(桥接)为例进行操作演示。注:宿主机 IP 地址为 192.168.182.252 。

[root@kvm03 ~]# cd /etc/sysconfig/network-scripts/
[root@kvm03 network-scripts]# cp ifcfg-ens33 ifcfg-br0
[root@kvm03 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 
TYPE="Ethernet"
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"
UUID="731875a9-a25c-427b-b06f-c5560e1830ed"
DEVICE="ens33"
ONBOOT="yes"    
#IPADDR="192.168.182.252"    //#号注释
#PREFIX="24"
#GATEWAY="192.168.182.2"
#DNS1="202.96.128.86"
#DNS2="119.29.29.29"
IPV6_PRIVACY="no"
BRIDGE=br0    //添加这行内容
[root@kvm03 ~]# 
[root@kvm03 network-scripts]# cat ifcfg-br0 
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.182.252
NETMASK=255.255.255.0
GATEWAY=192.168.182.2
DNS1=202.96.128.86
DNS2=119.29.29.29
TYPE=Bridge
[root@kvm03 network-scripts]#

重启 network 服务

[root@kvm03 ~]# systemctl restart network

确认IP地址信息

出现以上信息,说明网卡桥接成功了

1.2 部署GlusterFS

每台节点硬件 最少4G内存 多添加一个硬盘

所有节点执行如下命令

1)关闭防火墙SELinux,将4台服务器主机名分别改为node01,node02,node03,node04 下面在node01上操作演示
[root@node01 ~]# systemctl stop firewalld && systemctl disable firewalld
[root@node01 ~]# setenforce 0
setenforce: SELinux is disabled
[root@node01 ~]#
2)编写 hosts 文件
[root@node01 ~]# vim /etc/hosts
[root@node01 ~]# cat /etc/hosts | grep node
192.168.182.102 node01
192.168.182.103 node02
192.168.182.104 node03
192.168.182.105 node04
[root@node01 ~]# 
3)安装软件

        件 本实验采用官方 YUM 源安装 GlusterFS 所需要软件,具体安装方法如下(在所有节点 上操作)。下面以 nod

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

如果出现以下报错

 

执行如下命令

[root@node01 ~]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma --skip-broken

 

4)启动 GlusterFS

在所有节点执行以下操作,下面以node01 为例进行操作演示

[root@node01 ~]# systemctl start glusterd && systemctl enable glusterd
5)只需要在node01上执行即可 在node01上添加所有节点,如果报错可以检测防火墙,SELinux,主机名及hosts 文件是否正确
[root@node01 ~]# gluster peer probe node02
peer probe: success
[root@node01 ~]# gluster peer probe node03
peer probe: success
[root@node01 ~]# gluster peer probe node04
peer probe: success
[root@node01 ~]# 
6)查看群集状态
[root@node01 ~]# gluster peer status
Number of Peers: 3

Hostname: node02
Uuid: 9825abc6-6620-486c-b405-ee68776cde66
State: Peer in Cluster (Connected)

Hostname: node03
Uuid: ef01a8e7-5049-4aba-b486-76c66c15a0df
State: Peer in Cluster (Connected)

Hostname: node04
Uuid: 3130907a-79fc-4d85-839f-0b9cf90ece11
State: Peer in Cluster (Connected)
[root@node01 ~]# 
7)格式化硬盘

配置文件类型为xfs 

[root@node01 ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=1310656 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=5242624, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@node01 ~]# 

挂载

[root@node01 ~]# mkdir /data
[root@node01 ~]# mount /dev/sdb1 /data/
[root@node01 ~]# df -Th
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs        17G  4.4G   13G   26% /
devtmpfs                devtmpfs  2.0G     0  2.0G    0% /dev
tmpfs                   tmpfs     2.0G     0  2.0G    0% /dev/shm
tmpfs                   tmpfs     2.0G   13M  2.0G    1% /run
tmpfs                   tmpfs     2.0G     0  2.0G    0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  166M  849M   17% /boot
tmpfs                   tmpfs     394M   12K  394M    1% /run/user/42
tmpfs                   tmpfs     394M     0  394M    0% /run/user/0
/dev/sdb1               xfs        20G   33M   20G    1% /data
[root@node01 ~]# 

1.3 创建 GlusterFS 分布式复制卷

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

1)创建分布式复制卷
[root@node01 ~]# gluster volume create models replica 2 node01:/data node02:/data node03:/data node04:/data force
volume create: models: success: please start the volume to access data
[root@node01 ~]# 
2)启动卷
[root@node01 ~]# gluster volume start models 
volume start: models: success
3)查看卷
[root@node01 ~]# gluster volume info models 
 
Volume Name: models
Type: Distributed-Replicate        //卷的类型(这里用分布式复制卷)
Volume ID: d8b03f2b-4913-4684-a9ef-a3b5c1d7b988
Status: Started    //启动状态
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:    //创建的主机中的块
Brick1: node01:/data
Brick2: node02:/data
Brick3: node03:/data
Brick4: node04:/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
[root@node01 ~]# 

1.4 客户端挂载GlusterFS卷

1)kvm 安装Glusterfs 客户端软件
[root@kvm03 ~]# yum -y install centos-release-gluster
2)创建挂载目录
[root@kvm03 ~]# yum -y install glusterfs glusterfs-fuse
3)配置hosts文件
[root@kvm03 ~]# cat /etc/hosts 
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.182.102 node01
192.168.182.103 node02
192.168.182.104 node03
192.168.182.105 node04
192.168.182.252 kvm
4)关闭防火墙 SELinux
[root@kvm03 ~]# systemctl stop firewalld && systemctl disable firewalld
[root@kvm03 ~]# setenforce 0
5)创建挂载目录,并挂载models卷
[root@kvm03 ~]# mkdir /kvmdata
[root@kvm03 ~]# mount -t glusterfs node01:models /kvmdata/
[root@kvm03 ~]# df -Th
文件系统       类型            容量  已用  可用 已用% 挂载点
/dev/sda3      xfs              90G  2.1G   88G    3% /
devtmpfs       devtmpfs         16G     0   16G    0% /dev
tmpfs          tmpfs            16G     0   16G    0% /dev/shm
tmpfs          tmpfs            16G   12M   16G    1% /run
tmpfs          tmpfs            16G     0   16G    0% /sys/fs/cgroup
/dev/sda2      xfs             5.0G   33M  5.0G    1% /home
tmpfs          tmpfs           3.2G     0  3.2G    0% /run/user/0
node01:models  fuse.glusterfs   40G  475M   40G    2% /kvmdata    //挂载成功
[root@kvm03 ~]# 

1.5 KVM 使用卷创建虚拟机

1)在kvmdata卷中创建iso存放镜像,创建volume文件存放虚拟机磁盘
[root@kvm03 ~]# mkdir /kvmdata/iso
[root@kvm03 ~]# mkdir /kvmdata/volume
[root@kvm03 ~]# ls /kvmdata/
iso  volume
[root@kvm03 ~]# 
2)上传镜像到iso文件中(如果本地有可以使用本地的)这里使用Centos7镜像
[root@kvm03 iso]# ls
CentOS-7-x86_64-DVD-2009.iso
3)创建虚拟机
[root@kvm03 ~]# virt-install -n test02 -r 1024 --vcpus=1 --disk path=/kvmdata/volume/test02.qcow2,size=10 -w bridge:br0 --virt-type=kvm --accelerate --autostart -c /kvmdata/iso/CentOS-7-x86_64-DVD-2009.iso --vnc --vncport=5902 --vnclisten=0.0.0.0
virt-install 安装命令各选项的具体作用如下所示:
-n :指定虚拟机的名字。
-r :指定内存大小。
--vcpu :指定虚拟 CPU 个数。
--disk :指定磁盘文件放置位置及大小。
-w :制定所使用的网桥。
--autostart :设置虚拟机在宿主机开机时启动。
-c :指定镜像文件。
--vncport :通过 vnc viewer 连接的端口。
--vnclisten :通过 vnc viewer 连接的 IP
上述命令执行后忽略如下所示报错信息,立刻双击打开图 2.4 VNC Viewer 创建的连
“192.168.182.252:5902”
        之所以会出现上述“ WARNING ERROR 信息,是因为宿主机的 CentOS 系统采用了文
本方式安装,没有图形化界面。这种情况不影响虚拟机的正常使用,可使用 VNC Viewer
软件来开始 CentOS 系统的安装
        通过 VNC Viewer 安装 test01 虚拟机的具体过程这里省略,实际就是 CentOS 7.3 系统
的安装过程,等虚拟机的操作系统安装完成后, test02  虚拟机就安装完成了。
5)验证存储,在四台节点上查看目录里是否存在虚拟机文件。可以看出虚拟机文件 已经存放在第二组 node3node4 里。
[root@node01 ~]# ll /data/volume/
总用量 0
[root@node02 ~]# ll /data/volume/
总用量 0
[root@node03 ~]# ll /data/volume/
总用量 2248
-rw-------. 2 qemu qemu 10739318784 4月   9 10:36 test02.qcow2
[root@node04 ~]# ll /data/volume/
总用量 2248
-rw------- 2 qemu qemu 10739318784 4月   9 10:36 test02.qcow2

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

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

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

相关文章

2024.4.11

1.思维导图 2.指针形式验证大小端存储 #include<myhead.h>int main(int argc, const char *argv[]) {int num 0x12345678;char* ptr (char *)&num;if(*ptr 0x12){printf("big endian\n");}else if(*ptr 0x78){printf("little endian\n");}r…

正则表达式与JSON序列化:去除JavaScript对象中的下划线键名

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

vue源码解析——v-if和v-for哪个优先级高,如何避免两者同时使用

首先&#xff0c;官方不推荐v-if和v-for在同一个元素上使用。其次&#xff0c;如果两者同时使用&#xff0c;v-if和v-for的优先级怎么确定&#xff1f;在vue2和vue3中这两者的优先级顺序不一样。vue2是v-for优先&#xff0c;条件不存在时也会渲染多个注释节点。在vue3中进行了改…

关于01背包和完全背包问题的细节思考

01背包问题 #include<iostream> #include<stdlib.h> #include<vector> #include<cmath> int main() {int M0; //材料数int N0; //背包容量std::cin>>M>>N;std::vector<int>space(M,0);for(int i0;i<M;i) std::cin>>…

Nodejs 第六十二章(短链接)

短链接介绍 短链接是一种缩短长网址的方法&#xff0c;将原始的长网址转换为更短的形式。它通常由一系列的字母、数字和特殊字符组成&#xff0c;比起原始的长网址&#xff0c;短链接更加简洁、易于记忆和分享。 短链接的主要用途之一是在社交媒体平台进行链接分享。由于这些…

Offline RL : Efficient Planning in a Compact Latent Action Space

ICLR 2023 paper Intro 采用Transformer架构的Planning方法对马尔可夫序列重构,(et. TT)在面对高维状态动作空间&#xff0c;容易面对计算复杂度高的问题。本文提出TAP算法&#xff0c;基于Transformer的VQ-VAE&#xff0c;利用提取的状态动作在隐空间的低微特征进行Planning…

表单,表格小练习

表格练习&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document&…

创新指南|战略衡量的增长组织:用人工智能增强关键绩效指标(KPI)

传统的关键绩效指标 (KPI)越来越无法提供领导者取得成功所需的信息和见解。他们在跟踪进展、协调人员和流程、确定资源优先级以及推进问责制方面存在不足。本文是 2024 年第一份麻省理工学院 SMR - BCG 人工智能和商业战略全球高管学习和研究项目的调查结果——人工智能和业务战…

成为 Jira 大师:效率达人的必备秘诀

&#x1f525; 效率达人喜欢使用 Jira 的快捷键和命令面板&#xff0c;因为他们能够在不移动鼠标的情况下&#xff0c;快速执行各种命令和导航操作&#xff0c;从而更有效地完成 Jira 中的常见任务。 &#x1f3d6;️ 通过熟练掌握这些快捷键和命令&#xff0c;效率达人能够更…

Python+Selenium+Unittest 之Unittest5(常用装饰器-跳过用例执行)

目录 1、unittest.skip()&#xff08;跳过该装饰器下的用例&#xff09; 2、unittest.skipIf()&#xff08;跳过该装饰器下判断条件为True的用例&#xff09; 3、unittest.skipUnless()&#xff08;跳过该装饰器下判断条件为False的用例&#xff09; 4、unittest.expectedF…

qt进阶2:windows下可执行程序崩溃生成dmp,定位崩溃问题。

系列文章目录 文章目录 系列文章目录前言一、dmp文件生成二、使用步骤1.代码案例2.运行截图 前言 qt编译的可执行程序在windows下崩溃可生成dmp文件&#xff0c;用于调试定位崩溃原因。 一、dmp文件生成 略 二、使用步骤 1.代码案例 代码如下&#xff08;示例&#xff09;&…

PCB封装库的创建及引入

法1 1.创建lib 2.放置 找到你想要画的封装的器件的数据手册了解相关信息。 直插式选Multi-layer 贴片选Top-layer 焊盘尺寸 焊盘空尺寸 法2 嘉立创eda直接copy 再嘉立创中找到你想要的pcb&#xff0c;导出为ad 然后再ad中找到我们导出的文件 复制他 然后再库中粘贴 pcb库…

十进制,二进制,八进制,十六进制之间转换

一. 十进制转二进制 二. 二进制转十进制 三. 十进制转八进制 四. 八进制转十进制 五. 十进制转十六进制

Java代码基础算法练习-统计学生成绩-2024.04.11

任务描述&#xff1a; 编写程序&#xff0c;输入n个(0<n<50)学生的成绩(输入-1结束)&#xff0c;要求统计并输出优秀(大任务描述:于85)、及格(60~84)和不及格(小于60)的学生人数。(成绩取值范围0~100) 任务要求&#xff1a; 代码示例&#xff1a; /*** 这个程序用于统计…

编程技巧(五) mysql中查询将行转为列逗号隔开拼接

让清单成为一种习惯 互联网时代的变革,不再是简单的开发部署上线,持续,正确,安全地把事情做好尤其重要;把事情做好的前提是做一个可量化可执行的清单,让工程师就可以操作的清单而不是专家才能操作: 设定检查点 根据节点执行检查程序操作确认或边读边做 二者选其一不要太…

近屿OJAC带你解读:什么是大模型幻觉?

概念介绍 大模型幻觉指的是大型语言模型&#xff08;LLM&#xff09;在生成内容时出现的与现实世界事实或用户输入不一致的现象&#xff0c;这种现象可以被视为模型的“胡说八道”。具体来说&#xff0c;大模型的幻觉可以分为事实性幻觉和忠实性幻觉。 事实性幻觉&#xff0c…

[StartingPoint][Tier2]Vaccine

Task 1 Besides SSH and HTTP, what other service is hosted on this box? (除了SSH和HTTP&#xff0c;这个盒子上还托管了什么其他服务) # nmap -sS -T4 10.129.230.43 --min-rate 1000 ftp Task 2 This service can be configured to allow login with any password fo…

Pycharm远程连接服务器配置详解

背景&#xff1a; 相信很多人都遇到了这种情况&#xff0c;日常的开发和程序的验证都需要在linux环境下验证&#xff0c;而我们都是使用本地windows来进行开发或者脚本的编写&#xff0c;然后再push到远程仓库&#xff0c;再到linux环境下pull下来代码验证&#xff0c;这样每次…

【2024】使用Rancher管理k8s集群和创建k8s集群

Rancher管理k8s集群及创建k8s集群。 Rancher版本为:2.8.2目录 rancher管理k8s集群rancher创建k8s集群rancher管理k8s集群 使用rancher管理已经存在的k8s集群。 本部分内容需要自行准备好k8s集群及rancher平台,部署请看本人其他文章 。 登录到rancher平台后,点击集群管理,…

FreeRTOS学习 -- 移植

一、添加FreeRTOS源码 在基础工程中新建一个名为FreeRTOS的文件夹&#xff0c;创建FreeRTOS文件夹以后将FreeRTOS的源码添加到这个文件夹中。 portable 文件夹&#xff0c;只需要保留keil、MemMang 和 RVDS这三个文件夹&#xff0c;其他的都可以删除掉。 移植FreeRTOSConfig…