准备环境
node1:192.168.139.2
node2:192.168.139.4
node4:192.168.139.8
node5:192.168.139.9
node1 作为target端
node2 node4 node5 作为initiator端
并且将node2 node4 node5安装cman+rgmanager后配置成一个三节点的RHCS高可用集群,因为gfs2为一个集群文件系统,必须借助HA高可用集群将故障节点Fence掉,及借助Message Layer进行节点信息传递。
因为要将发现并登入的target做成集成文件系统,所以必须在node2 node4 node5上安装gfs2-utils
先将原来用luci/ricci创建的集群服务stop掉(我以前实验做的一个集群服务,与此实验无关)
[[email protected] mnt]# clusvcadm -d Web_Service
Local machine disabling service:Web_Service...
[[email protected] mnt]# clustat
Cluster Status for zxl @ Wed Dec 21 17:55:46 2016
Member Status: Quorate
Member Name ID Status
------ ---- ---- ------
node2.zxl.com 1 Online, Local, rgmanager
node4.zxl.com
2 Online, rgmanager
Service Name Owner (Last) State
------- ---- ----- ------ -----
service:Web_Service (node2.zxl.com) disabled
[[email protected] mnt]# service rgmanager stop
[[email protected] mnt]# service cman stop
[[email protected] mnt]# service rgmanager stop
[[email protected] mnt]# service cman stop
[[email protected] mnt]# rm -rf /etc/cluster/cluster.conf
[[email protected] mnt]# rm -rf /etc/cluster/cluster.conf
每次配置文件改变都会有备份也删掉
[[email protected] mnt]# ls /etc/cluster/
cluster.conf.bak cman-notify.d
[[email protected] mnt]# rm -f /etc/cluster/*
如果没有装cman,rgmanager,执行如下命令
[[email protected] mnt]#yum -y install cman rgmanager
用css_tool命令创建一个集群,集群名称mycluster
[[email protected] mnt]# ccs_tool create mycluster
[[email protected] mnt]# cat /etc/cluster/cluster.conf
<?xml version="1.0"?>
<cluster name="mycluster" config_version="1">
<clusternodes>
</clusternodes>
<fencedevices>
</fencedevices>
<rm>
<failoverdomains/>
<resources/>
</rm>
</cluster>
添加Fence设备(RHCS集群必须有)
[[email protected] mnt]# ccs_tool addfence meatware fence_manual
[[email protected] mnt]# ccs_tool lsfence
Name Agent
meatware fence_manual
-v 指定节点拥有票数
-n 指定节点标识符
-f 指定Fence设备名称
添加三个节点,RHCS集群至少要有三个节点
[[email protected] mnt]# ccs_tool addnode -v 1 -n 1 -f meatware node2.zxl.com
[[email protected] mnt]# ccs_tool addnode -v 1 -n 2 -f meatware node4.zxl.com
[[email protected] mnt]# ccs_tool addnode -v 1 -n 3 -f meatware node5.zxl.com
查看集群节点
[[email protected] mnt]# ccs_tool lsnode
Cluster name: mycluster, config_version: 5
Nodename Votes Nodeid Fencetype
node2.zxl.com 1 1 meatware
node4.zxl.com 1 2 meatware
node5.zxl.com 1 3 meatware
复制配置文件,RHCS集群会借助cssd进程自动同步
[[email protected] mnt]# scp /etc/cluster/cluster.conf node4:/etc/cluster/
[[email protected] mnt]# scp /etc/cluster/cluster.conf node5:/etc/cluster/
每个节点启动cman rgmanager
[[email protected] mnt]# service cman start
[[email protected] mnt]# service rgmanager start
[[email protected] mnt]# service cman start
[[email protected] mnt]# service rgmanager start
[[email protected] mnt]# service cman start
[[email protected] mnt]# service rgmanager start
[[email protected] mnt]# clustat
Cluster Status for mycluster @ Wed Dec 21 18:40:26 2016
Member Status: Quorate
Member Name ID Status
------ ---- ---- ------
node2.zxl.com 1 Online, Local
node4.zxl.com 2 Online
node5.zxl.com 3 Online
[[email protected] mnt]# rpm -ql gfs2-utils
/etc/rc.d/init.d/gfs2
/sbin/fsck.gfs2
/sbin/mkfs.gfs2 \\格式化创建gfs2文件系统的
/sbin/mount.gfs2 \\挂载gfs2文件系统的
/usr/sbin/gfs2_convert
mkfs.gfs2命令的使用
-j 指定日志区域个数,有几个就能被几个节点挂载,因为格式化为集群文件系统后,每个节点都要有日志记录
-J 指定日志大小,默认128M
-p {lock_dlm|lock_nolock} 分布式锁管理|不用锁
-t <name> 指定锁表的名称
注:一个集群可以有多个文件系统,如一个集群中共享了两个磁盘,两个磁盘可以是gfs2和ocfs2文件系统,不同的文件系统进行加锁时,要用不同的锁表进行唯一标示,所以每个锁都要有锁名称
锁表名称的格式
cluster_name:锁表名
如:mycluster:lock_sda
-D 显示详细的Debug信息
登入target,并格式化为gfs2文件系统
[[email protected] mnt]# iscsiadm -m node -T iqn.2016-12.com.zxl:store1.disk1 -p 192.168.139.2 -l
[[email protected] mnt]# mkfs.gfs2 -j 2 -p lock_dlm -t mycluster:lock_sde1 /dev/sde1
Are you sure you want to proceed? [y/n] y
Device: /dev/sde1
Blocksize: 4096
Device Size 3.00 GB (787330 blocks)
Filesystem Size: 3.00 GB (787328 blocks)
Journals: 2
Resource Groups: 13
Locking Protocol: "lock_dlm"
Lock Table: "mycluster:lock_sde1"
UUID: 9ebdc83b-9a61-9a4a-3ba7-9c80e59a0a2d
格式化完成,挂载测试
[[email protected] mnt]# mount -t gfs2 /dev/sde1 /mnt
[[email protected] mnt]# cd /mnt
[[email protected] mnt]# ll
total 0
[[email protected] mnt]# cp /etc/issue ./
[[email protected] mnt]# ll
total 8
-rw-r--r--. 1 root root 47 Dec 21 19:06 issue
ok,换node4
[[email protected] ~]# iscsiadm -m node -T iqn.2016-12.com.zxl:store1.disk1 -p 192.168.139.2 -l
node4不用再次格式化,直接挂载
[[email protected] ~]# mount -t gfs2 /dev/sdc1 /mnt
[[email protected] ~]# cd /mnt
[[email protected] mnt]# ll \\可以看到node1复制的文件
total 8
-rw-r--r--. 1 root root 47 Dec 21 19:06 issue
node4创建一个文件a.txt,会立马通知给其他节点,让其看到,这就是集群文件系统gfs2的好处
[[email protected] mnt]# touch a.txt
[[email protected] mnt]# ll
total 16
-rw-r--r--. 1 root root 0 Dec 21 19:10 a.txt
-rw-r--r--. 1 root root 47 Dec 21 19:06 issue
在加一个节点node5
[[email protected] ~]# iscsiadm -m node -T iqn.2016-12.com.zxl:store1.disk1 -p 192.168.139.2 -l
挂载不上去,因为只创建了两个集群日志文件,有几个日志几个节点就能挂载
[[email protected] ~]# mount -t gfs2 /dev/sdc1 /mnt
Too many nodes mounting filesystem, no free journals
添加日志
[[email protected] mnt]# gfs2_jadd -j 1 /dev/sde1 \\-j 1 增加一个日志
Filesystem: /mnt
Old Journals 2
New Journals 3
[[email protected] mnt]# gfs2_tool journals /dev/sde1 \\此命令可以查看有几个日志,每个默认大小128M
journal2 - 128MB
journal1 - 128MB
journal0 - 128MB
3 journal(s) found.
[[email protected] ~]# mount -t gfs2 /dev/sdc1 /mnt \\node5挂载成功
[[email protected] ~]# cd /mnt
[[email protected] mnt]# touch b.txt
[[email protected] mnt]# ll
total 24
-rw-r--r--. 1 root root 0 Dec 21 19:10 a.txt
-rw-r--r--. 1 root root 0 Dec 21 19:18 b.txt
-rw-r--r--. 1 root root 47 Dec 21 19:06 issue
gfs2集群文件系统一般支持的集群数量不能超过16个,超过后,性能直线下降