RHEL7 配置 LVM Mirror 创建共享卷

2023-09-22 11:04:49


前言

某用户场景下使用两台存储设备为前端两台业务主机提供存储资源,用户希望各有一份数据落入到对应的存储设备中,并且当其中某一台业务主机发生故障时,可以快速在另外一台主机上继续启用业务;那么配置 LVM Mirror 创建共享卷不失为是一种解决方法。

本文将通过一台 iSCSI Server 提供多个块设备给两台业务主机使用,以此来模拟用户场景,目前两台业务主机识别到的块设备信息如下所示:

[root@iscsi-client1 ~]# for i in {a..d};do echo "/dev/sd$i  `/lib/udev/scsi_id -g -d /dev/sd$i`";done
/dev/sda  36001405775772069d764482a66301992
/dev/sdb  360014058bfdc6d5e5e34b88ad4cdcd88
/dev/sdc  360014056d29955d120f4783ad95480ef
/dev/sdd  36001405795c8999ccd34cf7920d0cf91

[root@iscsi-client2 ~]# for i in {a..d};do echo "/dev/sd$i  `/lib/udev/scsi_id -g -d /dev/sd$i`";done
/dev/sda  36001405775772069d764482a66301992
/dev/sdb  360014058bfdc6d5e5e34b88ad4cdcd88
/dev/sdc  360014056d29955d120f4783ad95480ef
/dev/sdd  36001405795c8999ccd34cf7920d0cf91

通过上面的信息不难发现,两台业务主机都识别到了 sda-sdd 四块磁盘,实际上就是 iSCSI Server 通过网络形式将自己的四块磁盘同时映射给两台业务主机;其中 sda 设备和 sdb 设备将模拟用户场景中两台存储设备各自映射的磁盘。

我们需要将 sda 设备和 sdb 设备做成 LVM Mirror 为应用程序提供文件系统,默认我们在业务主机1(iscsi-client1)上激活 VG 并使用,当业务主机1发生故障时,可以快速在业务主机2(iscsi-client2)上激活 VG 并使用,以确保业务迅速恢复,逻辑示意图如下所示:

在这里插入图片描述


1. 配置 LVM 镜像卷

1.1. 创建 PV

[root@iscsi-client1 ~]# pvcreate /dev/sda /dev/sdb
  Physical volume "/dev/sda" successfully created.
  Physical volume "/dev/sdb" successfully created.

1.2. 创建 VG

[root@iscsi-client1 ~]# vgcreate vg01_mirror /dev/sda /dev/sdb
  Volume group "vg01_mirror" successfully created

1.3. 创建 LV

[root@iscsi-client1 ~]# lvcreate -n lv01_mirror -m1 -l 100%FREE vg01_mirror /dev/sda /dev/sdb
  Logical volume "lv01_mirror" created.

1.4. 查看 LV

[root@iscsi-client1 ~]# lvs -a -o +devices
  LV                     VG          Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert Devices                                        
  root                   rhel        -wi-ao---- <83.51g                                                     /dev/vda3(4096)                                
  swap                   rhel        -wi-ao----  16.00g                                                     /dev/vda3(0)                                   
  lv01_mirror            vg01_mirror rwi-a-r---  49.99g                                    1.49             lv01_mirror_rimage_0(0),lv01_mirror_rimage_1(0)
  [lv01_mirror_rimage_0] vg01_mirror Iwi-aor---  49.99g                                                     /dev/sda(1)                                    
  [lv01_mirror_rimage_1] vg01_mirror Iwi-aor---  49.99g                                                     /dev/sdb(1)                                    
  [lv01_mirror_rmeta_0]  vg01_mirror ewi-aor---   4.00m                                                     /dev/sda(0)                                    
  [lv01_mirror_rmeta_1]  vg01_mirror ewi-aor---   4.00m                                                     /dev/sdb(0)              

1.5. 格式化文件系统

[root@iscsi-client1 ~]# mkfs.xfs /dev/vg01_mirror/lv01_mirror

1.6. 创建挂载点并挂载

[root@iscsi-client1 ~]# mkdir /data
[root@iscsi-client1 ~]# mount /dev/vg01_mirror/lv01_mirror /data

1.7. 写入测试数据

[root@iscsi-client1 ~]# for i in {1..100};do echo $i >> /data/test.txt;done

2. 切换 LVM 共享卷

2.1. 计划内切换

所谓计划内切换,即管理员为了验证或者演练所执行的计划内的变更,而不是在发生异常后进行的紧急变更。

2.1.1. 检查 I/O 流量

既然是计划内切换,那么第一步应该是停用和当前 /data 文件系统有关的应用或业务,保证上层没有 I/O 继续写入;我们可以使用 lsof 来检查当前是否有进程在占用此文件系统。

[root@iscsi-client1 ~]# lsof /data

2.1.2. 节点一卸载挂载点

当确认没有 I/O 继续写入 /data 文件系统,此时可以进行卸载操作。

[root@iscsi-client1 ~]# umount /data

2.1.3. 节点一禁用 LV

[root@iscsi-client1 ~]# lvchange -an /dev/vg01_mirror/lv01_mirror
[root@iscsi-client1 ~]# lvs -a -o +devices
  LV                     VG          Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert Devices                                        
  root                   rhel        -wi-ao---- <83.51g                                                     /dev/vda3(4096)                                
  swap                   rhel        -wi-ao----  16.00g                                                     /dev/vda3(0)                                   
  lv01_mirror            vg01_mirror rwi---r---  49.99g                                                     lv01_mirror_rimage_0(0),lv01_mirror_rimage_1(0)
  [lv01_mirror_rimage_0] vg01_mirror Iwi---r---  49.99g                                                     /dev/sda(1)                                    
  [lv01_mirror_rimage_1] vg01_mirror Iwi---r---  49.99g                                                     /dev/sdb(1)                                    
  [lv01_mirror_rmeta_0]  vg01_mirror ewi---r---   4.00m                                                     /dev/sda(0)                                    
  [lv01_mirror_rmeta_1]  vg01_mirror ewi---r---   4.00m                                                     /dev/sdb(0)    

2.1.4. 节点一禁用 VG

[root@iscsi-client1 ~]# vgchange -an vg01_mirror 
  0 logical volume(s) in volume group "vg01_mirror" now active

2.1.5. 节点一导出 VG

[root@iscsi-client1 ~]# vgexport vg01_mirror 
  Volume group "vg01_mirror" successfully exported

2.1.6. 节点二导入 VG

[root@iscsi-client2 ~]# vgimport vg01_mirror
  Volume group "vg01_mirror" successfully imported

2.1.7. 节点二激活 VG

[root@iscsi-client2 ~]# vgchange -ay vg01_mirror
  1 logical volume(s) in volume group "vg01_mirror" now active
[root@iscsi-client2 ~]# lvs -a -o +devices
  LV                     VG          Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert Devices                                        
  root                   rhel        -wi-ao---- <83.51g                                                     /dev/vda3(4096)                                
  swap                   rhel        -wi-ao----  16.00g                                                     /dev/vda3(0)                                   
  lv01_mirror            vg01_mirror rwi-a-r---  49.99g                                    71.61            lv01_mirror_rimage_0(0),lv01_mirror_rimage_1(0)
  [lv01_mirror_rimage_0] vg01_mirror Iwi-aor---  49.99g                                                     /dev/sda(1)                                    
  [lv01_mirror_rimage_1] vg01_mirror Iwi-aor---  49.99g                                                     /dev/sdb(1)                                    
  [lv01_mirror_rmeta_0]  vg01_mirror ewi-aor---   4.00m                                                     /dev/sda(0)                                    
  [lv01_mirror_rmeta_1]  vg01_mirror ewi-aor---   4.00m                                                     /dev/sdb(0)       

2.1.8. 节点二创建挂载点并挂载

[root@iscsi-client2 ~]# mkdir /data
[root@iscsi-client2 ~]# mount /dev/vg01_mirror/lv01_mirror /data

2.1.9. 节点二读写测试

[root@iscsi-client2 ~]# ls -ltr /data/
total 4
-rw-r--r-- 1 root root 292 Sep 21 15:37 test.txt
[root@iscsi-client2 ~]# for i in {101..200};do echo $i >> /data/test.txt;done
[root@iscsi-client2 ~]# tail -n 10 /data/test.txt 
191
192
193
194
195
196
197
198
199
200

2.2. 计划外切换

直接将节点二关机,以此模拟生产业务主机宕机。

2.2.1. 节点二关机

[root@iscsi-client2 ~]# shutdown -h now

2.2.2. 节点一导入 VG

[root@iscsi-client1 ~]# vgimport vg01_mirror
  Volume group "vg01_mirror" is not exported

2.2.3. 节点一激活 VG

[root@iscsi-client1 ~]# vgchange -ay vg01_mirror
  1 logical volume(s) in volume group "vg01_mirror" now active

2.2.4. 节点一挂载文件系统

[root@iscsi-client1 ~]# mount /dev/vg01_mirror/lv01_mirror /data

总结

用户的这种场景主要是为了提高架构的可靠性和高可用性,当后端任意一台存储设备出现故障,或者前端任意一台业务主机出现故障,都可以快速恢复业务。

博主目前接触到要使用 LVM Mirror 的场景并不多,在这种高可用场景中,规划设计的时候可以考虑存储双活方案,或者应用本身可以提供双活或主备的切换方案。


更多推荐

使用JavaScript实现无限滚动的方法

前言在网页设计中,无限滚动是一种常见的交互方式,用户可持续地加载更多内容而无需刷新页面,提高用户体验。本文将介绍如何运用JavaScript实现无限滚动的效果,使网页能够自动加载更多数据,减轻用户加载新页的负担,为用户提供更好的访问体验。原理理解无限滚动的原理无限滚动的原理是当用户滚动到页面底部时,自动加载更多内容。这

计算机视觉的应用15-图片旋转验证码的角度计算模型的应用,解决旋转图片矫正问题

大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用15-图片旋转验证码的角度计算模型的应用,解决旋转图片矫正问题,在CV领域,图片旋转验证码的角度计算模型被广泛应用于解决旋转图片矫正问题,有效解决机器识别图片验证码的问题。旋转图片验证码常用于验证用户身份,但由于图片可能被以不同角度旋转,识别难度比较大。本文提出了

HTML+CSS+JavaScript 大学生网页设计制作作业实例代码 200套静态响应式前端网页模板(全网最全,建议收藏)

目录1.介绍2.这样的响应式页面这里有200套不同风格的1.介绍资源链接📚web前端期末大作业(200套)集合Web前端期末大作业通常是一个综合性的项目,旨在检验学生在HTML、CSS和JavaScript等前端技术方面的能力和理解。以下是一些可能的Web前端期末大作业的示例和介绍:网页类型举例📘响应式网站开发:学

【接口自动化测试】Eolink Apilkit 安装部署,支持 Windows、Mac、Linux 等系统

EolinkApikit有三种客户端,可以依据自己的情况选择。三种客户端的数据是共用的,因此可以随时切换不同的客户端。我们推荐使用新推出的ApikitPC客户端,PC端拥有线上产品所有的功能,并且针对本地测试、自动化测试以及使用体验等方面进行了强化,可以提供最佳的使用感受。建议对本地测试有需求的用户使用PC端,可满足更

全球公链进展| Metis 将成为完全去中心化的 L 2 网络;Circle在NEAR和Noble上推出原生 USDC

一周速览过去一周,明星项目动态如下:Gethv1.13.1修补程序已发布,修复区块生产等问题Metis计划年内成为完全去中心化的Layer2网络Sui主网已升级至V1.9.1版本Circle在NEAR和Noble上推出原生USDCPolygon发布关于2.0升级和POL代币迁移的三项提案CosmosHub已完成「Gai

权限提升数据库(基于MySQL的UDF,MOF,启动项提权)

获取数据库权限如何获取数据库的最高权限用户的密码,常用方法有这些网站存在高权限SQL注入点数据库的存储文件或备份文件网站应用源码中的数据库配置文件采用工具或脚本爆破网站存在高权限SQL注入点可以通过sqlmap拿到user表的账号密码,密码可能是MD5加密的。可以通过下面网站进行解密md5在线解密破解,md5解密加密(

Python自动化测试实战

接口自动化测试是指通过编写程序来模拟用户的行为,对接口进行自动化测试。Python是一种流行的编程语言,它在接口自动化测试中得到了广泛应用。下面详细介绍Python接口自动化测试实战。1、接口自动化测试框架在Python接口自动化测试中,我们可以使用很多开源的测试框架,例如unittest、pytest和nose等。这

JVM——9.对象的访问定位方式

前一篇文章,我们详细的了解了对象在堆内存中是如何分配的。现在,对象已经分配好了,那么要如何访问定位呢?下面,我们一起来了解一下。目录1.概述2.句柄法3.直接指针法4.小结1.概述创建对象是为了使用该对象,Java程序会通过栈上的reference数据来操作堆上的具体对象。由于reference类型在《Java虚拟机规

C++day7

仿照vector手动实现自己的myVector,最主要实现二倍扩容功能代码头文件#ifndefTEST_H#defineTEST_H#include<iostream>#include<cstring>#include<vector>usingnamespacestd;template<typenameT>classM

网站排名下降的原因和解决方法(SEO优化失误可能导致网站排名下降)

SEO优化是网站推广的重要环节,它可以提升网站的访问量和排名。但是,SEO优化不当也可能会导致网站排名下降。本文将分析SEO优化失误可能导致网站排名下降的原因,并提供相应的解决方法。一:标题——SEO优化过度SEO优化的目的是为了提升网站排名,但是如果优化过度,可能会被搜索引擎认为是作弊行为而被惩罚。过度使用关键字、频

数据结构——AVL树

目录1.什么是AVL树?2.AVL树插入的模拟实现①节点定义②插入③旋转⑴右单旋⑵左单旋⑶双旋(右左旋)⑷双旋(左右旋)⑸完整的插入代码3.AVL树的性能分析1.什么是AVL树?AVL树是一种自平衡二叉查找树,也被称为高度平衡树。它具有以下特点:它本身是一棵二叉搜索树,即每个结点包含一个关键字和两个子结点,且满足左子树

热文推荐