设为首页 收藏本站
查看: 3784|回复: 0

[经验分享] gfs2共享集群存储

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-9-10 09:02:36 | 显示全部楼层 |阅读模式
本文系统Centos 6.5 x64
共四台主机,
192.168.100.128 Aries.lansgg.com               存储共享服务器
192.168.100.129 node1.lansgg.com             测试客户端
192.168.100.130 node2.lansgg.com             测试客户端
192.168.100.131 node3.lansgg.com             测试客户端
目的:存储server通过iscsi共享,node 1 2 3 三台主机挂载存储,达到高可用,灵活性机制。利用RHCS搭建GFS2高可用集群文件系统,且保证3个节点对存储设备能够同时读写访问。
wKioL1XuVkqixrR7AAFwwVPUkjM292.jpg

1、GFS2
是一个基于GFS的先进的集群文件系统,能够同步每台主机的集群文件系统的metadata,能够进行文件锁的管理,并且必须要redhat cluster suite(RHCS)支持,GFS2可以grow,进行容量的调整,不过这是在LVM基础上。
GFS是Redhat公司开发的一款集群文件系统,目前的最新版本是GFS2,GFS文件系统允许多个服务同时读写一个磁盘分区,通过GFS可以实现数据的集中管理,免去了数据同步和拷贝的麻烦,但GFS并不能孤立的存在,安装GFS需要RHCS的底层组件支持
2、CLVM (Cluster Logical Volume Manager )
Cluster逻辑卷管理,即CLVM,是LVM的扩展,这种扩展允许cluster中的机器使用LVM来管理共享存储
3、iSCSI
iSCSI是一种在Internet协议上,特别是以太网上进行数据块传输的标准,它是一种基于IP Storage理论的新型存储技术,RHCS可以通过ISCSI技术来导出和分配共享存储的使用。
4、CMAN (Cluster Manager,简称CMAN)
是一个分布式集群管理工具,它运行在集群的各个节点上,为RHCS提供集群管理任务。
CMAN用于管理集群成员、消息和通知。它通过监控每个节点的运行状态来了解节点成员之间的关系,当集群中某个节点出现故障,节点成员关系将发生改变,CMAN及时将这种改变通知底层,进而做出相应的调整。
CMAN通过监视集群节点提供一个法定节点数(quorum),当集群中有多于一半的节点处于活跃状态时,此时符合法定节点数,集群继续可用,当只有有一半或少于一半的节点处于活跃状态是则已达到不到法定节点数,此时整个集 群变得不可用。CMAN通过监控集群中节点来确定各节点的成员关系,当集群中的成员关系发生改变,CMAN会通架构中其它组件来进行相应的调整
5、rgmanager
RHCS通过rgmanager来管理集群服务,rgmanager运行在每个集群节点上,在服务器上对应的进程为clurgmgrd。
在一个RHCS集群中,高可用**包含集群服务和集群资源两个方面,集群服务其实就是应用服务,例如apache、mysql等,集群资源有很多种,例如一个IP地址、一个运行脚本、ext3/GFS文件系统等
一、配置登录方式
1
[iyunv@Aries ~]# ssh-keygen -t rsa



wKiom1XueFaQw9EeAAH52MVvZ8w127.jpg

1
2
3
[iyunv@Aries ~]# ssh-copy-id -i node1.lansgg.com
[iyunv@Aries ~]# ssh-copy-id -i node2.lansgg.com
[iyunv@Aries ~]# ssh-copy-id -i node3.lansgg.com



wKioL1XuexCS5xgsAAbMrBpiuJE500.jpg

1
2
[iyunv@Aries ~]# for i in 1 2 3; do ssh node${i}.lansgg.com 'service iptables stop';done
[iyunv@Aries ~]# for i in 1 2 3; do ssh node${i}.lansgg.com 'setenforce 0';done



二、集群插件安装
集群安装
RHCS的核心组件为cman和rgmanager,其中cman为基于openais的“集群基础架构层”,rgmanager为资源管理器。RHCS的集群中资源的配置需要修改其主配置文件/etc/cluster/cluster.xml实现,cman和rgmanager需要分别安装在集群中的每个节点上。这里选择将此三个rpm包分别安装在了集群中的每个节点上
1
[iyunv@Aries ~]# for i in 1 2 3; do ssh node${i}.lansgg.com 'yum -y install cman rgmanager';done



为集群创建配置文件
RHCS的配置文件/etc/cluster/cluster.conf,其在每个节点上都必须有一份,且内容均相同,其默认不存在,因此需要事先创建,ccs_tool命令可以完成此任务。另外,每个集群通过集群ID来标识自身,因此,在创建集群配置文件时需要为其选定一个集群名称,这里假设其为tcluster。此命令需要在集群中的节点上执行。ccs_tool命令用于在线更新CCS的配置文件
1
[iyunv@Aries ~]# for i in 1 2 3; do ssh node${i}.lansgg.com 'ccs_tool create testCluster';done



查看生成的配置文件的内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[iyunv@node1 ~]# hostname
node1.lansgg.com
[iyunv@node1 ~]# cat /etc/cluster/cluster.conf
<?xml version="1.0"?>
<cluster name="testCluster" config_version="1">

  <clusternodes>
  </clusternodes>

  <fencedevices>
  </fencedevices>

  <rm>
    <failoverdomains/>
    <resources/>
  </rm>
</cluster>



为集群添加节点
RHCS集群需要配置好各节点及相关的fence设备后才能启动,因此,这里需要事先将各节点添加进集群配置文件。每个节点在添加进集群时,需要至少为其配置node id(每个节点的id必须惟一),ccs_tool的addnode子命令可以完成节点添加。将前面规划的三个集群节点添加至集群中,可以使用如下命令实现。
1
2
3
[iyunv@Aries ~]# for i in 1 2 3; do ssh node${i}.lansgg.com 'ccs_tool addnode -n 1 node1.lansgg.com';done
[iyunv@Aries ~]# for i in 1 2 3; do ssh node${i}.lansgg.com 'ccs_tool addnode -n 2 node2.lansgg.com';done
[iyunv@Aries ~]# for i in 1 2 3; do ssh node${i}.lansgg.com 'ccs_tool addnode -n 3 node3.lansgg.com';done



查看已经添加完成的节点及相关信息:
1
[iyunv@Aries ~]# for i in 1 2 3; do ssh node${i}.lansgg.com ' ccs_tool lsnode';done



wKiom1XugIPynnVjAAHy64BQix0354.jpg

启动集群
RHCS集群会等待各节点都启动后方才进入正常工作状态,因此,需要把集群各节点上的cman服务同时启动起来。这分别需要在各节点上执行启动命令
1
[iyunv@node1 ~]# service cman start



推荐分别在主机同时启动,可能会报错,比如:
1
   Waiting for quorum... Timed-out waiting for cluster



1
2
3
4
[iyunv@Aries ~]# for i in 1 2 3; do ssh node${i}.lansgg.com 'service rgmanager start';done
Starting Cluster Service Manager: [确定]
Starting Cluster Service Manager: [确定]
Starting Cluster Service Manager: [确定]



查看集群状态信息:
1
[iyunv@Aries ~]# for i in 1 2 3; do ssh node${i}.lansgg.com 'clustat';done



wKiom1Xugl2gDRgPAAJ9eo_ocok034.jpg

cman_tool的status子命令则以当前节点为视角来显示集群的相关信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[iyunv@node1 ~]# cman_tool status
Version: 6.2.0
Config Version: 4
Cluster Name: testCluster
Cluster Id: 44303
Cluster Member: Yes
Cluster Generation: 16
Membership state: Cluster-Member
Nodes: 3
Expected votes: 3
Total votes: 3
Node votes: 1
Quorum: 2  
Active subsystems: 8
Flags:
Ports Bound: 0 177  
Node name: node1.lansgg.com
Node ID: 1
Multicast addresses: 239.192.173.188
Node addresses: 192.168.100.129
[iyunv@node1 ~]#



cman_tool的nodes子命令则可以列出集群中每个节点的相关信息
1
2
3
4
5
[iyunv@node1 ~]# cman_tool nodes
Node  Sts   Inc   Joined               Name
   1   M      8   2015-09-08 14:36:27  node1.lansgg.com
   2   M     12   2015-09-08 14:36:27  node2.lansgg.com
   3   M     16   2015-09-08 14:36:30  node3.lansgg.com



cman_tool的services子命令则可以列出集群中每个服务的相关信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[iyunv@node1 ~]# cman_tool services
fence domain
member count  3
victim count  0
victim now    0
master nodeid 2
wait state    none
members       1 2 3

dlm lockspaces
name          rgmanager
id            0x5231f3eb
flags         0x00000000
change        member 3 joined 1 remove 0 failed 0 seq 3,3
members       1 2 3

[iyunv@node1 ~]#



ccs_tool  相关命令
1、 首先通过ccs_tool工具创建集群:

1
ccs_tool create NameofCluster



2、 通过ccs_tool工具创建fence设备:

1
ccs_tool addfence NameofFence AgentTypeofFence -C



3、 检查已经添加的fence设备:

1
2
ccs_tool lsfence  
Name             Agent fence-shared     fence_manual



4、 通过ccs_tool工具创建集群中的节点:

1
ccs_tool addnode NameofNode –v 1 –n 1 –f NameofFence -C



5、 检查已经添加的节点:

1
2
3
4
5
6
7
8
[iyunv@node1 ~]# ccs_tool lsnode

Cluster name: testCluster, config_version: 4

Nodename                        Votes Nodeid Fencetype
node1.lansgg.com                   1    1   
node2.lansgg.com                   1    2   
node3.lansgg.com                   1    3



6、 检查集群健康状态:

1
2
3
4
5
6
7
8
9
[iyunv@node1 ~]# clustat -i 3
Cluster Status for testCluster @ Tue Sep  8 14:45:06 2015
Member Status: Quorate

Member Name                                                     ID   Status
------ ----                                                     ---- ------
node1.lansgg.com                                                    1 Online, Local
node2.lansgg.com                                                    2 Online
node3.lansgg.com                                                    3 Online



8、 更新集群配置:

1
2
3
ccs_tool update /etc/cluster/cluster.conf  
Config file updated from version 6 to 7  
Update complete.



9、 删除集群节点:

1
ccs_tool delnode NameofNode



10、删除集群fence设备:

1
ccs_tool delfence NameofFence



三、iscsi 安装配置
1
2
[iyunv@Aries ~]# yum -y install scsi-target-utils
[iyunv@Aries ~]# for i in 1 2 3 ; do ssh node${i}.lansgg.com 'yum install iscsi-initiator* -y' ;done



编辑target配置,新增如下:
1
2
3
4
<target iqn.2015-09-08.com.lansgg:storage:disk.sdb>
        backing-store /dev/sdb
        initiator-address 192.168.100.0/24
</target>



Iqn.yyyy-mm.<reversed domain name>:[identifier]
Iqn:表示iscsi squalfled name 简称iqn
Yyyy-mmm:表示年份-月份。
Reversed domain name:表示倒过来的域名。
Identifier:标识识别代码。这里是storage.disk.sdb

backing-store:指定后端要共享的磁盘编号

initiator-address:授权客户端访问的网络地址

incominguser:设置登录用户的账号密码 (无)

启动服务,查看信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
[iyunv@Aries ~]# /etc/init.d/tgtd start
正在启动 SCSI target daemon:[确定]
[iyunv@Aries ~]# tgtadm -L iscsi -m target -o show
Target 1: iqn.2015-09-08.com.lansgg:storage:disk.sdb
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: IET     00010000
            SCSI SN: beaf10
            Size: 0 MB, Block size: 1
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: null
            Backing store path: None
            Backing store flags:
        LUN: 1
            Type: disk
            SCSI ID: IET     00010001
            SCSI SN: beaf11
            Size: 10737 MB, Block size: 512
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: rdwr
            Backing store path: /dev/sdb
            Backing store flags:
    Account information:
    ACL information:
        192.168.100.0/24



node节点发现target

1
2
3
4
5
6
7
[iyunv@Aries ~]# for i in 1 2 3 ; do ssh node${i}.lansgg.com 'iscsiadm -m discovery -t sendtargets -p 192.168.100.128' ;done
[确定]动 iscsid:[确定]
192.168.100.128:3260,1 iqn.2015-09-08.com.lansgg:storage:disk.sdb
[确定]动 iscsid:[确定]
192.168.100.128:3260,1 iqn.2015-09-08.com.lansgg:storage:disk.sdb
[确定]动 iscsid:[确定]
192.168.100.128:3260,1 iqn.2015-09-08.com.lansgg:storage:disk.sdb



服务启动
1
2
3
4
5
[iyunv@Aries ~]# for i in 1 2 3 ; do ssh node${i}.lansgg.com 'service iscsi start' ;done
正在启动 iscsi:[确定]
正在启动 iscsi:[确定]
正在启动 iscsi:[确定]
[iyunv@Aries ~]#



发现后进行登录target
1
[iyunv@Aries ~]# for i in 1 2 3 ; do ssh node${i}.lansgg.com 'iscsiadm -m node -T iqn.2015-09-08.com.lansgg:storage:disk.sdb -p 192.168.100.128 -l' ;done



这里的“-T”后面跟target名称,“ip-address”是target主机的ip地址,“port”是target主机的端口号,默认是3260 -l 代表 --login

查看node节点新的磁盘信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[iyunv@Aries ~]# for i in 1 2 3 ; do ssh node${i}.lansgg.com 'fdisk -l /dev/sdb' ;done

Disk /dev/sdb: 10.7 GB, 10737418240 bytes
64 heads, 32 sectors/track, 10240 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000


Disk /dev/sdb: 10.7 GB, 10737418240 bytes
64 heads, 32 sectors/track, 10240 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000


Disk /dev/sdb: 10.7 GB, 10737418240 bytes
64 heads, 32 sectors/track, 10240 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000



在其中一个节点上格式化一个分区
wKiom1XujD7RK1tjAAMRe-KPOWA193.jpg

安装 gfs2 进行 gfs 分区
1
[iyunv@Aries ~]# for i in 1 2 3 ; do ssh node${i}.lansgg.com 'yum -y install gfs2-utils' ;done



使用gfs2命令工具在之前创建好的/dev/sdb1上创建集群文件系统gfs2,可以使用如下命令
1
[iyunv@node1 ~]# mkfs.gfs2 -j 3 -p lock_dlm -t testCluster:sdb1 /dev/sdb1



mkfs.gfs2为gfs2文件系统创建工具,其一般常用的选项有:

-b BlockSize:指定文件系统块大小,最小为512,默认为4096;
-J MegaBytes:指定gfs2日志区域大小,默认为128MB,最小值为8MB;
-j Number:指定创建gfs2文件系统时所创建的日志区域个数,一般需要为每个挂载的客户端指定一个日志区域;有几个node节点就要指定几个

-p LockProtoName:所使用的锁协议名称,通常为lock_dlm或lock_nolock之一;
-t LockTableName:锁表名称,一般来说一个集群文件系统需一个锁表名以便让集群节点在施加文件锁时得悉其所关联到的集群文件系统,锁表名称为clustername:fsname,其中的clustername必须跟集群配置文件中的集群名称保持一致,因此,也仅有此集群内的节点可访问此集群文件系统;此外,同一个集群内,每个文件系统的名称必须惟一。
wKiom1XujT7zVW26AAF_pu4sDKE069.jpg

新建目录进行文件系统挂载
1
[iyunv@Aries ~]# for i in 1 2 3 ; do ssh node${i}.lansgg.com 'mkdir /test ' ;done



1
2
[iyunv@node1 ~]# mount /dev/sdb1 /test/
[iyunv@node1 ~]# echo "test" > /test/test.tt



如果分区无法识别,可以重启系统尝试

挂载gfs分区,查看是否存在node1上创建的text.tt
1
2
3
[iyunv@Aries ~]# for i in  2 3 ; do ssh node${i}.lansgg.com 'mount /dev/sdb1 /test/ ; cat /test/test.tt ' ;done
test
test



四、配置使用CLVM(集群逻辑卷)
在RHCS集群节点上安装lvm2-cluster
1
[iyunv@Aries ~]# for i in  1 2 3 ; do ssh node${i}.lansgg.com 'yum -y install lvm2-cluster ' ;done



在RHCS的各节点上,为lvm启用集群功能

1
[iyunv@Aries ~]# for i in  1 2 3 ; do ssh node${i}.lansgg.com 'lvmconf --enable-cluster' ;done



为RHCS各节点启动clvmd服务
1
[iyunv@Aries ~]# for i in  1 2 3 ; do ssh node${i}.lansgg.com 'service clvmd start' ;done



wKioL1XukxSi1D0gAAH1WNvxOmw004.jpg

创建物理卷、卷组和逻辑卷
1
2
3
4
5
6
7
[iyunv@node1 ~]# pvcreate /dev/sdb2
  Physical volume "/dev/sdb2" successfully created
[iyunv@node1 ~]# vgcreate vgCluster /dev/sdb2
  Clustered volume group "vgCluster" successfully created
[iyunv@node1 ~]#  lvcreate -L 2G -n lvCluster vgCluster
  Logical volume "lvCluster" created.
[iyunv@node1 ~]#



在其他节点也能看到对应的逻辑卷
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[iyunv@Aries ~]# for i in  1 2 3 ; do ssh node${i}.lansgg.com 'lvs' ;done
  LV        VG        Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv_root   VolGroup  -wi-ao----   8.54g                                                   
  lv_swap   VolGroup  -wi-ao---- 992.00m                                                   
  lvCluster vgCluster -wi-a-----   2.00g                                                   
  LV        VG        Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv_root   VolGroup  -wi-ao----   8.54g                                                   
  lv_swap   VolGroup  -wi-ao---- 992.00m                                                   
  lvCluster vgCluster -wi-a-----   2.00g                                                   
  LV        VG        Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv_root   VolGroup  -wi-ao----   8.54g                                                   
  lv_swap   VolGroup  -wi-ao---- 992.00m                                                   
  lvCluster vgCluster -wi-a-----   2.00g                                                   
[iyunv@Aries ~]#



格式化逻辑卷 为 gfs
1
[iyunv@node1 ~]# mkfs.gfs2 -p lock_dlm -j 2 -t testCluster:lvCluster /dev/vgCluster/lvCluster



wKioL1XulLKDNw-SAAHkNZL2Vfg528.jpg

挂载逻辑卷 到 /testClvm
1
[iyunv@Aries ~]# for i in  1 2 3 ; do ssh node${i}.lansgg.com 'mkdir /testClvm' ;done



1
2
3
4
[iyunv@node1 ~]# mount /dev/vgCluster/lvCluster /testClvm/
[iyunv@node2 ~]# mount /dev/vgCluster/lvCluster /testClvm/
[iyunv@node3 ~]# mount /dev/vgCluster/lvCluster /testClvm/
Too many nodes mounting filesystem, no free journals




# 发现node3挂载不了,因为刚才创建了2个journal,需要再添加一个
1
2
3
4
[iyunv@node1 ~]# gfs2_jadd -j 1 /dev/vgCluster/lvCluster
Filesystem:            /testClvm
Old Journals           2
New Journals           3



再次node3挂载
1
2
[iyunv@node3 ~]# mount /dev/vgCluster/lvCluster /testClvm/
[iyunv@node3 ~]#



扩展逻辑卷
       扩展前

wKiom1Xuk5rSYkPZAALYXrtTrfE907.jpg

1
2
3
4
5
6
7
8
9
10
11
[iyunv@node1 ~]# lvextend -L +2G /dev/vgCluster/lvCluster
  Size of logical volume vgCluster/lvCluster changed from 2.00 GiB (512 extents) to 4.00 GiB (1024 extents).
  Logical volume lvCluster successfully resized
[iyunv@node1 ~]# gfs2_grow /dev/vgCluster/lvCluster
FS: Mount Point: /testClvm
FS: Device:      /dev/dm-2
FS: Size:        524288 (0x80000)
FS: RG size:     65533 (0xfffd)
DEV: Size:       1048576 (0x100000)
The file system grew by 2048MB.
gfs2_grow complete.



     扩展后
wKiom1XulCKAy5-FAAEJL_vvrv8093.jpg


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-111749-1-1.html 上篇帖子: 2个免费的nas 下篇帖子: mysal
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表