赞
踩
iSCSI(二)iSCSI cLVM GFS2 配置共享存储
在《RHCS 及 RHCS配置》认识了RHCS并用cman+rgmanager进行了集群的相关配置,在前面《iSCSI 及 iSCSI配置》认识并配置了iSCSI,但在测试中发现了多个节点挂载同时使用很可能会造成数据崩溃的问题,下面将解决这个问题,在前文的基础上配置iSCSI+c.LVM+GFS2的共享存储。
GFS2(Global File System 2,全局文件系统v2)是一种由RedHat公司开发的,允许群集节点同时访问某个共享的块设备的群集文件系统。
GFS2是一个原生的(native)文件系统,它直接和Linux内核文件系统接口的VFS层进行通信。GFS2使用分布式元数据和多个日志来优化群集操作。要维护文件系统的完整性,GFS2使用一个分布式锁管理器(DLM,DistributedLock Manager)来协调I/O,当一个节点操作系统时,会进行加锁。当节点修改了GFS2文件系统上的数据,这个改动马上为使用这个文件系统的其他群集节点可见。
CLVM(Cluster Logical Volume Manager,群集逻辑卷管理器)是LVM的一组群集的扩展。这些扩展允许计算机群集使用LVM管理共享存储(例如:在SAN中),当在一个节点上对共享存储进行LVM操作时,会通过高可用组件通知其他节点。
要使用CLVM,则必须运行红帽集群套件,其中包括clvmd守护进程。 clvmd守护进程是LVM的关键集群扩展。clvmd 在每个集群节点中运行,并在集群中发布LVM元数据更新,用相同的逻辑卷视图来显示每个集群节点。
1、各主机系统:RHEL 5.8 64bit
2、Target:
Soft:scsi-target-utils
IP:192.168.18.240
LUN1:/dev/sda5 50G(以分区代替)
LUN2:/dev/sda6 20G
3、三台节点主机node1,node2,node3:
Soft:
iscsi-initiator-utils
cman, rgmanger
lvm2-cluster
gfs2-utils
Node1: IP:192.168.18.241 host name:node1.tjiyu,com;
Node2: IP:192.168.18.242 host name:node2.tjiyu.com;
Node3: IP:192.168.18.243 host name:node3.tjiyu.com;
1、像在前面《iSCSI 及 iSCSI配置》配置iSCSI,可以在各节点上识别到两个LUN为磁盘设备:
2、像在《RHCS 及 RHCS配置》配置cman+rgmanager集群,不用配置资源,到"4-4、启动cman和rgmanager"使群集可以正常运行就可以了。注意,本文主要不是配置高可用集群,所以像配置clvmd资源,gfs2资源挂载都不进行。集群状态如下:
配置好yum源,直接各节点上分别执行安装lvm2-cluster和gfs2-utils,当然也可以在Target上通过SSH执行,但那是串行的,不如分别在各节点上分别执行快;注意,这两个只是管理工具(类似ipvsadm),具体的数据处理模块已整合在内核中,如下:
[plain] view plain copy
- [root@node3 ~]# yum install -y lvm2-cluster gfs2-utils
各节点LVM功能默认不是开启集群功能的,需要手动配置使用,可以用lvmconf --enable-cluster命令开启,这命令实际上是使得/etc/lvm/lvm.conf配置文件里的locking_type为3(默认为1),如下:
[plain] view plain copy
- [root@localhost ~]# ssh_node 'lvmconf --enable-cluster'; done
- [root@localhost ~]# ssh_node 'grep "locking_type = 3" /etc/lvm/lvm.conf'; done
上面认识cLVM时就说到lvmd守护进程是LVM的关键集群扩展,必须在每个集群节点中运行,所以可以把这个配置成集群的clone资源,但本文简单处理就不配置了,直接在各节点上配置开机启动,然后启动服务,如下:
[plain] view plain copy
- [root@localhost ~]# ssh_node 'chkconfig clvmd on'; done
- [root@localhost ~]# ssh_node 'service clvmd start'; done
前面配置iSCSI后,在各节点可以识别到两个磁盘设备/dev/sdb和/dev/sdc,测试时还把/dev/sdb格式化一个分区,这里就用另外一个20G的/dev/sdc,先在node1创建物理卷,然后创建卷组,最后创建一个2G的逻辑卷(空间小点,加快测试),如下:
[plain] view plain copy
- [root@node1 cluster]# pvcreate /dev/sdc
- [root@node1 cluster]# vgcreate clustervg /dev/sdc
- [root@node1 cluster]# vgs
- [root@node1 cluster]# lvcreate -L 2G -n clusterlv clustervg
- [root@node1 cluster]# lvs
在node1上创建好后,在其他节点也可以识别到,如下:
[plain] view plain copy
- [root@localhost ~]# ssh_node 'lvs'; done
将上面创建的集群逻辑卷格式化为GFS2,这需要使用mkfs.gfs2命令工具,mkfs.gfs2用法如下:
[plain] view plain copy
- mkfs.gfs2
- -j #: 指定日志区域的个数,有几个就能够被几个节点所挂载;
- -J #: 指定日志区域的大小,默认为128MB;
- -p {lock_dlm|lock_nolock}:所使用的锁协议名称,集群需要使用lock_dlm;
- -t <name>: 锁表的名称,格式为clustername:fsname, clustername为当前节点所在的集群的名称,这也是为什么要使用RHCS;fsname文件系统名称,自定义,要在当前集群惟一,这也叫锁表名称,表明是分布式锁的范围。
下面我们在node1先格式化创建两个日志区,测试下看三个节点能否都挂载上来,操作如下:
[plain] view plain copy
- [root@node1 cluster]# mkfs.gfs2 -j 2 -p lock_dlm -t tjiyu_cluster:sharedstorage /dev/clustervg/clusterlv
在各节点创建挂载目录/sharedstore,测试下看三个节点能否都挂载上来,可以看到提示日志区不够,如下:
[plain] view plain copy
- [root@localhost ~]# ssh_node 'mkdir /sharedstore'; done
- [root@localhost ~]# ssh_node 'mount -t gfs2 /dev/clustervg/clusterlv /sharedstore'; done
然后在node1上操作增加集群逻辑卷的日志区,再各节点重新挂载,成功,如下:
[plain] view plain copy
- [root@node1 cluster]# gfs2_jadd -j 1 /dev/clustervg/clusterlv
当各节点成功挂载后,可以查看挂载点的参数,这些参数都是可调的,其中有一个参数new_files_directio,为1时写入数据不会缓存,直接写到存储设备中,这样一个节点的操作另一个节点会立即看到,但性能比较差;注意在node1上设置,其他节点不会生效,操作如下:
[plain] view plain copy
- [root@node1 cluster]# gfs2_tool gettune /sharedstore
- [root@node1 cluster]# gfs2_tool settune /sharedstore new_files_directio 1
- [root@node1 cluster]# gfs2_tool gettune /sharedstore
上面我们创建集群逻辑卷时只给了2G空间,之后可以进行扩展,先要扩展集群逻辑卷大小,还需要扩展GFS2的边界,这些操作在一个节点上进行,其他节点也生效,如下:
[plain] view plain copy
- [root@node1 cluster]# lvextend -L 3G /dev/clustervg/clusterlv
- [root@node1 cluster]# lvs
- [root@node1 cluster]# gfs2_grow /dev/clustervg/clusterlv
1、在node1上复制/etc/fstab进去挂载点/sharedstore,可以在各节点上立即看到,如下:
2、在node2上创建两个文件到挂载点/sharedstore,可以在各节点上立即看到,如下:
到这里,配置iSCSI+c.LVM+GFS2的共享存储就可以正常运行了,但一些高可用配置没有进行,像clvmd和gfs2目录挂载等都可以作为clone资源运行在高可用集群上, 不过在多节点数据访问量大的情况下这种集群文件系统性能较差,一般都使用分布式的集群文件系统;后面将会认识、配置keepalived、nginx等集群相关组件……
【参考资料】
1、RedHat官方文档:https://access.redhat.com/documentation/zh_cn/red-hat-enterprise-linux/?version=5/
2、iSCSI 及 iSCSI配置:http://blog.csdn.net/tjiyu/article/details/52811458
3、RHCS 及 RHCS配置:http://blog.csdn.net/tjiyu/article/details/52736285
4、RHEL7 – Configuring GFS2 on Pacemaker/Corosync Cluster:http://www.unixarena.com/2016/01/rhel7-configuring-gfs2-on-pacemakercorosync-cluster.html
5、CentOS6.4+cman+rgmanager+iscsi+gfs2+cLVM 实现廉价的可扩展的集群共享存储:http://freeloda.blog.51cto.com/2033581/1279063
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。