RHCS高可用集群下的iscsi共享磁盘与GFS2全局文件系统(实现多点写入)
一.iscsi共享磁盘(挂载在数据库的数据目录中)
第一步:
首先两台主机关闭apache服务(也可以直接在网页中将其disabled)
clusvcadm -d apache
使用以下命令是开启apache服务
clusvcadm -e apache
在hang13中添加一个硬盘(大小为8G)
hang13这台主机主要用来做存储:做共享存储,给hang11和hang12使用
第二步:
配置服务端,在hang13主机上,安装scsi并编辑磁盘共享配置文件
yum install -y iscsi-*
yum install scsi-*
vim /etc/tgt/targets.conf
在里面修改
<target iqn.2019-07.com.example:server.target1>
backing-store /dev/vda
</target>
/etc/init.d/tgtd start
第三步:
配置客户端,在hang11和hang12安装并获取共享设备
yum install -y iscsi-*
iscsiadm -m discovery -t st -p 172.25.11.13 #检测共享磁盘
fdisk -l #此时没有共享磁盘
iscsiadm -m node -l #连接共享磁盘
fdisk -l #此刻有共享磁盘
主要演示hang11,hang12过程相同
在hang12
此块可以做一个分区表备份的实验
fdisk -cu /dev/sdb
mkfs.ext4 /dev/sdb1
mount /dev/sdb1 /mnt
cd /mnt
ls
touch file
ls
cd
umount /mnt
dd if=/dev/sdb of=mbr bs=512 count=1 备份分区表
cat /proc/partitions
dd if=/dev/zero of=/dev/sdb bs=512 count=1 将分区表损坏
reboot 重新加载
此时再去挂载发现分区表损坏,不能挂载
cat /proc/partitions 此时没有我们已经格式化好的磁盘,磁盘不可用
dd if=mbr of=/dev/sdb 恢复分区表
reboot
此时可以挂载
cat /proc/partitions 此时磁盘可用
这个实验告诉我们在企业的时候,无论删除什么,最好在之前做好备份,要不然删错了,到时候恢复不了,哪可就要苦唧唧了。
做完这个实验后,为了更好的进行下个实验,我们不对磁盘进行分区:
第四步:
配置mysql服务
给hang11和hang12安装mysql
第五步:
将共享设备挂载至mysql的数据目录下(无法成功挂载,故对其进行格式化)
mkfs.ext4 /dev/sdb #格式化磁盘
mount /dev/sdb /var/lib/mysql/ #数据库的数据目录
df
cd /var/lib/mysql/
ls
ll -d /var/lib/mysql/ #挂载的时候数据目录的所属都是root
umount /var/lib/mysql/
ll -d /var/lib/mysql/ #不挂载,数据目录的原本所属都是mysql
我们查看mysql配置文件的权限,会发现在挂载后,配置文件的所属用户和所属组都是root,而将其卸载后,再次查看时发现其所属用户和所属组都是mysql,故更改其权限后再次查看权限(必须在挂载后再更改其权限)
mount /dev/sdb /var/lib/mysql/
chown mysql.mysql /var/lib/mysql/
/etc/init.d/mysqld start #启动mysql,生成基础的数据和测试库
cd /var/lib/mysql/
ll
为了下一步实验,我们将服务关掉,取消挂载
/etc/init.d/mysqld stop
cd
umount /var/lib/mysql/
/etc/init.d/mysqld status
第六步:
在浏览器中修改配置
<1>在Failover Domains中增加故障转移并设置hang11和hang12的优先级
最后如下图所示:
<2>在Resources上增加资源(IP Address,Script,File System)
<3>在Service Groups增加一个服务并将其资源增加进去
在这里插入图片描述
开启服务,最后结果如下图所示,因为hang11的优先级高:
输入clustat可以查看到apache服务是disaled,而sql服务是在hang11中运行(因为hang11的优先级设置的高)
可以看见服务,挂载,虚拟ip都在hang11上面开启
hang12上面没有
使用以下命令将11的sql服务转到12中,使用df命令查看时,会发现在12*享设备已经成功挂载在了数据库的配置文件下
clusvcadm -r sql -m hang12
运行独占测试
将apache**,发现apache在hang11上面运行
将apache修改为12运行,失败,因为它是运行独占的,所以我们查看的时候它依旧在11上面运行
将运行独占取消掉:
再去修改apache的运行主机为12,发现成功
第七步:
单点写入
在12上的操作:
此时11和12都在挂载,同时挂载时,在12的mysql的数据目录下创建一个文件,在11上查看,发现无法查看到,说明是单点写入,即只能一个设备写入
无法查看到。
发现不能实现数据的同步。
二.GFS2全局文件系统(实现多点写入)
- 我们的某个服务需要通过将数据目录挂载到共享存储上,每个节点都能访问存储中的数据,以实现多节点的集群高可用,此时就可以使用GFS2文件系统。
GFS2是一个原生的(native)文件系统,它直接和Linux内核文件系统接口的VFS层进行通信。GFS2使用分布式元数据和多个日志来优化群集操作。要维护文件系统的完整性,GFS2使用一个分布式锁管理器(DLM,DistributedLock
Manager)来协调I/O,当一个节点操作系统时,会进行加锁。当节点修改了GFS2文件系统上的数据,这个改动马上为使用这个文件系统的其他群集节点可见。
第一步:
将两个服务组都disabled
在11和12开启clvmd服务并查看是否是**状态
- CLVM(Cluster Logical Volume Manager,群集逻辑卷管理器)是LVM的一组群集的扩展,作用类似与LVM,但集群文件系统后期如果有规划在线扩容的操作必须要开启clvmd(分发逻辑卷的状态更新),这些扩展允许计算机群集使用LVM管理共享存储(例如:在SAN中),当在一个节点上对共享存储进行LVM操作时,会通过高可用组件通知其他节点。
也可以使用命令**
注意:
locking_type = 3 中的3表示**状态
locking_type = 1 中的1表示不**状态
如果只开启一台主机,那么之后会在逻辑卷方面报错
第二步:
创建逻辑卷
pvcreate /dev/sdb
pvs
vgcreate clustervg /dev/sdb
vgs
vgdisplay
lvcreate -L 4G -n demo clustervg
实验证明ext4文件系统与GFS2系统的区别:
ext4文件系统:
mkfs.ext4 /dev/clustervg/demo
mount /dev/clustervg/demo /var/lib/mysql
11挂载(图没截上),并建立文件
12后挂载可以看见建立的文件
此时11和12都已经挂载共享磁盘,11再去建立文件
12看不见
说明ext4文件系统只能支持单个节点写入
GFS2文件系统:
将11和12的共享磁盘卸载,并移除11的已经创建的lv
lvremove /dev/clustervg/demo
lvcreate -L 4G -n demo clustervg
mkfs.gfs2 -t westos_ha:mygfs2 -p lock_dlm -j 2 /dev/clustervg/demo #格式化,-t后加集群名, -j表示几个节点
gfs2_tool sb /dev/clustervg/demo all #查看gfs2的工具
mount /dev/clustervg/demo /var/lib/mysql
11上面创建文件
12挂载并查看,发现可以看见
mount /dev/clustervg/demo /var/lib/mysql
cd /var/lib/mysql
ls
11建立haha
12同步更新可以看见
12复制文件
11也同步更新
证明GFS2是多点写入
在浏览器将GFS2文件系统加入服务组里面:
先将共享磁盘在11和12卸载
第一步:
在浏览器中将之前的dbdata从服务组中移除,再从资源中移除
第二步:
如下图所示:
第三步:
将新的GFS2添加至服务组中
启动sql服务组
第四步:
11里面挂载上了
也支持多点写入
hang12需要手动挂载上去,建立文件
11可以看见