欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

马哥 41_03 _Linux集群系列之二十一——iSCSI、cLVM和gfs2 有大用

image.png

image.png


在内核当中所实现的机制,它不会永久有效,要借助于用户空间的文件,,,,永久有效

我们要借助于客户端,需要首先去发现target,然后将发现的结果保存至文件系统的某个路径当中,下一次借助于某个服务(比如客户端的iscsi服务) iscsi, iscsid(iscsi会调用iscsid),iscsi服务脚本启动的时候,就会将保存至某个文件系统上的已经发现的设备将它们重新应用起来,将此前发现的设备重新在内核中建立起来关联关系,并跟target端建立会话的,,,,,,,,,,,,,,服务器端也依然在内核空间中提供此功能,在实现解析报文封装的时候,依然遵循同样的规范,iscsi的服务器端,必须随时接受客户端请求,所以它应该处于监听(服务)状态,监听在某个套接字上,随时接受客户端的访问,,,,监听(即服务),,服务通常是工作在用户空间的服务,所以当一个用户的请求,到达我们本机所监听的某个套接字的时候,首先到达我们本机的网卡,由我们的TCP/IP协议栈解码处理以后,发现是对3260套接字的请求,然后转交请求到TCP/IP的3260上监听的进程,这个进程最终发现用户请求的是iscsi的请求,然后转交给iscsi,由iscsi本身完成拆掉iscsi的首部封装,然后看到里面的iscsi的指令(是scsi指令?),最终将用户的请求的读取或写入数据在本机存储完成

图一

image.png

图二

image.png


同一个target,同一个iscsi服务器可以同时接受多个客户端请求的,,,,,,,,,,iscsi需要用户随时读写数据的,由此客户端和服务器端应该建立持久的会话连接,客户端和服务器端随时连接,建立传输,会话是持久存在的,可以理解成TCP/IP的隧道,

在隧道内可以不停地发送iscsi报文,

服务器端也需要启动一个服务,iscsi的服务器端也依然在内核空间的,所以不会永久有效,所以必须要保证开机以后将此前曾经建立过的iscsi设备,通过3260端口,向外进行输出,,,,,,,,,tgtadm可以用来实现手动在命令行下创建target,也可以使用tdt-admin结合主配置文件 /etc/tgt/targets.conf 来实现对各target的管理;;;;;;;;;要确保服务 tgtd 服务开机启动起来(手动启动起来也行)


客户端:

iscsi-initiator-utils , 为何叫utils(工具)?因为iscsi本身是内核中的功能,所以它只需要提供一个管理界面iscsi-initiator-utils

服务端:

scsi-target-utils , 为什么不是iscsi,因为服务器端提供的是scsi服务,,,,,虽然叫iscsi服务,但是最终要还原成scsi功能的,它模拟的是scsi的设备,

image.png


gfs2文件系统

    在iscsi设备上来创建gfs2文件系统,全局文件系统,只是一种集群文件系统 还有一种ocfs2

    gfs2文件系统在实现接受每个客户端,每个节点挂载的时候,必须要为每个节点提供日志,所以创建 gfs2文件系统时,要指定日志个数, -j 指定,

    集群文件系统要加锁,并通知其它节点,由此我们必须要指定锁类型,因为gfs2文件系统支持单机或集群环境

    gfs2文件系统  -p 指定锁协议

                         在集群环境下时锁协议 lock_dlm  

                         在单机环境下锁协议 lock_nolock (事实上单机时没必要使用集群文件系统,因为集群开销大)

                    

    使用 mkfs.gfs2 创建集群文件系统时 还应该指定锁表   -t  指定

            clustername:tablelockname

            clustername 集群名称一定是当前集群文件系统所在集群的集群名,这是rhcs的机制

            tablelockname 只需唯一,就可以了

    挂载  mount -t gfs2 (不指文件系统类型也可以,因为自动识别,)

image.png


如何实现去创建iscsi的服务器端,,,,,,并且能够让客户端发现服务器端,

使用硬盘设备(不是分区)来模拟一个target



在 target  192.168.0.100 上

[root@steppingstone ~]# fdisk -l


Disk /dev/sda: 21.4 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *           1          13      104391   83  Linux

/dev/sda2              14        2610    20860402+  8e  Linux LVM


Disk /dev/sdb: 107.3 GB, 107374182400 bytes

255 heads, 63 sectors/track, 13054 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sdb4               1       13054   104856223+   5  Extended

/dev/sdb5               1        6080    48837537   83  Linux

/dev/sdb6            6081        8513    19543041   83  Linux


Disk /dev/sdc: 137.4 GB, 137438953472 bytes

255 heads, 63 sectors/track, 16709 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


Disk /dev/sdc doesn't contain a valid partition table

[root@steppingstone ~]#

1)  (我已经安装了)安装 scsi-target-utils image.png

           不使用 tgtadm 吧;;;;tgtadm 是模式化的命令

           image.png


  iscsiadm 也是模式化的命令
                                    image.png

2)     

[root@steppingstone ~]# vim /etc/tgt/targets.conf  #把原来的关于target的删除,替换成如下

...........................................................................................................................

<target iqn.2013-05.com.magedu:tsan.disk1>

        <backing-store /dev/sdc>

                vendor_id MageEdu

                lun 1

        </backing-store>

        initiator-address 192.168.0.0/24

        incominguser sanuser sanpass

</target>

...........................................................................................................................


在 target 192.18.0.100 上

[root@steppingstone ~]# service tgtd start        #启动tgtd 

Starting SCSI target daemon:                               [确定]

[root@steppingstone ~]#

[root@steppingstone ~]# service tgtd restart

Stopping SCSI target daemon: Stopping target framework daemon

Some initiators are still connected - could not stop tgtd        #为什么不能停止,需要所有的 initiator 登出吗? ( 在三个 initiator上执行 # iscsiadm -m node -T iqn.2013-05.com.magedu:teststore.disk1 -p 192.168.0.100 -u 进行登出 )

[root@steppingstone ~]# 


在 target 192.18.0.100 上

[root@steppingstone ~]# tgtadm --lld iscsi -m target --op show

Target 1: iqn.2013-05.com.magedu:tsan.disk1

    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

            Readonly: No

            Backing store type: null

            Backing store path: None

            Backing store flags:

        LUN: 1        #有个 LUN 1 了

            Type: disk

            SCSI ID: IET     00010001

            SCSI SN: beaf11

            Size: 137439 MB, Block size: 512

            Online: Yes

            Removable media: No

            Readonly: No

            Backing store type: rdwr

            Backing store path: /dev/sdc

            Backing store flags:

    Account information:

        sanuser    #绑定的用户名

    ACL information:

        192.168.0.0/24  #授权的IP网络地址

[root@steppingstone ~]# 

[root@steppingstone ~]# netstat -tnlp

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name

tcp        0      0 127.0.0.1:2208              0.0.0.0:*                   LISTEN      3919/./hpiod

tcp        0      0 0.0.0.0:736                 0.0.0.0:*                   LISTEN      3522/rpc.statd

tcp        0      0 0.0.0.0:2049                0.0.0.0:*                   LISTEN      -

tcp        0      0 0.0.0.0:41704               0.0.0.0:*                   LISTEN      -

tcp        0      0 0.0.0.0:810                 0.0.0.0:*                   LISTEN      4022/rpc.rquotad

tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      3472/portmap

tcp        0      0 0.0.0.0:851                 0.0.0.0:*                   LISTEN      4064/rpc.mountd

tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      3942/sshd

tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      3956/cupsd

tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      4167/sendmail

tcp        0      0 0.0.0.0:3260                0.0.0.0:*                   LISTEN      5521/tgtd        # 3260 打开了

tcp        0      0 127.0.0.1:2207              0.0.0.0:*                   LISTEN      3924/python

tcp        0      0 :::22                       :::*                        LISTEN      3942/sshd

tcp        0      0 :::3260                     :::*                        LISTEN      5521/tgtd

[root@steppingstone ~]#

[root@steppingstone ~]# iptables -L -n        #防火墙 没屏蔽 地址及端口 

Chain INPUT (policy ACCEPT)

target     prot opt source               destination


Chain FORWARD (policy ACCEPT)

target     prot opt source               destination


Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination


Chain RH-Firewall-1-INPUT (0 references)

target     prot opt source               destination

[root@steppingstone ~]#

[root@steppingstone ~]# chkconfig tgtd on           # 开机自动启动

[root@steppingstone ~]# chkconfig --list tgtd         

tgtd            0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭

[root@steppingstone ~]#



在第一个initiator节点 192.168.0.45 上

[root@node1 iscsi]# iscsi-iname -p iqn.2013-05.com.magedu    #自动生成一个initiator的名称

iqn.2013-05.com.magedu:c3cecf23a7c

[root@node1 iscsi]#


在target 192.168.0.100 上 (跳转机)

[root@steppingstone ~]# alias ha='for I in {1..3}; do'

[root@steppingstone ~]#

[root@steppingstone ~]# ha ssh node$I 'echo "InitiatorName=`iscsi-iname -p iqn.2013-05.com.magedu`" > /etc/iscsi/initiatorname.iscsi'; done            #自动生成一个initiator的名称,把这个名称保存至配置文件

[root@steppingstone ~]#


在第一个initiator节点 192.168.0.45 上

[root@node1 iscsi]# cat /etc/iscsi/initiatorname.iscsi     #验证一下是否正确

InitiatorName=iqn.2013-05.com.magedu:d5fc3cf98c

[root@node1 iscsi]#


在target 192.168.0.100 上 (跳板机)

[root@steppingstone ~]# ha ssh node$I 'sed -i "s@#node.session.auth.authmethod = CHAP@node.session.auth.authmethod = CHAP@" /etc/iscsi/iscsid.conf';done

[root@steppingstone ~]#



在第一个initiator节点 192.168.0.45 上

看  /etc/iscsi/iscsid.conf     里面的 #node.session.auth.authmethod 有没有作相应的修改



在target 192.168.0.100 上 (跳转机)

[root@steppingstone ~]# vim iscsi.sed        #可能替换的内容有问题 ,但是这里不管了,只要知道 sed -i -f 的用法就可以了

s@node.session.auth.username = iscsiuser@node.session.auth.username = sanuser@

s@node.session.auth.password = iscsiuser@node.session.auth.password = sanpass@

[root@steppingstone ~]# sed -i -f iscsi.sed iscsid.conf        

[root@steppingstone ~]#


把 iscsi.sed 脚本复制到 每一个initiator上执行一遍就可以了 (本质上是这样,,可能  iscsi.sed 脚本 里替换的内容有问题) 

[root@steppingstone ~]# alias ha='for I in {1..3}; do'

再执行 # ha scp iscsi.sed node$I:/tmp/; ssh node$I 'sed -i -f /tmp/iscsi.sed /etc/iscsi/iscsid.conf' ; done


我还是自己手动通过另一种方法来执行吧


在第一个initiator节点 192.168.0.45 上   

[root@node1 ~]# sed -i -e 's@node.session.auth.username = iscsiuser@node.session.auth.username = sanuser@'  -e 's@node.session.auth.password = iscsiuser@node.session.auth.password = sanpass@' /etc/iscsi/iscsid.conf

# 温习了 sed -f 和 -e 的用法

[root@node1 ~]# less /etc/iscsi/iscsid.conf        #最后保证如下的结果,就是对的了

............................................................................................................

node.session.auth.authmethod = CHAP


# To set a CHAP username and password for initiator

# authentication by the target(s), uncomment the following lines:

node.session.auth.username = sanuser

node.session.auth.password = sanpass

............................................................................................................

保证  在第二个initiator节点 192.168.0.55 上  在第三个initiator节点 192.168.0.65 上

# less /etc/iscsi/iscsid.conf  的结果 与 在第一个initiator节点 192.168.0.45 上 是一样的


确保 三个initiator上 清除以前的三步骤  1) 到以前的target都登出了,,,, 2) service iscsi status 为停止,,,, 3) 删除了以前的登录信息 rm -Rf /var/lib/iscsi/send_targets/192.168.0.100,3260/


在target 192.168.0.100 上 (跳转机)


[root@steppingstone ~]# ha ssh node$I 'service iscsi start;chkconfig iscsi on ' ; done        #像马哥一样批量执行,为什么报错 (但马哥执行的没报错)

iscsid 已停

[确定]ng iSCSI daemon: [确定]

[确定]

设置 iSCSI 目标:iscsiadm: Could not login to [iface: default, target: iqn.2013-05.com.magedu:teststore.disk1, portal: 192.168.0.100,3260].

iscsiadm: initiator reported error (19 - encountered non-retryable iSCSI login failure)

iscsiadm: Could not log into all portals

Logging in to [iface: default, target: iqn.2013-05.com.magedu:teststore.disk1, portal: 192.168.0.100,3260] (multiple)

[确定]

iscsid 已停

[确定]ng iSCSI daemon: [确定]

[确定]

设置 iSCSI 目标:iscsiadm: Could not login to [iface: default, target: iqn.2013-05.com.magedu:teststore.disk1, portal: 192.168.0.100,3260].

iscsiadm: initiator reported error (19 - encountered non-retryable iSCSI login failure)

iscsiadm: Could not log into all portals

Logging in to [iface: default, target: iqn.2013-05.com.magedu:teststore.disk1, portal: 192.168.0.100,3260] (multiple)

[确定]

iscsid 已停

[确定]ng iSCSI daemon: [确定]

[确定]

设置 iSCSI 目标:Logging in to [iface: default, target: iqn.2013-05.com.magedu:teststore.disk1, portal: 192.168.0.100,3260] (multiple)

iscsiadm: Could not login to [iface: default, target: iqn.2013-05.com.magedu:teststore.disk1, portal: 192.168.0.100,3260].

iscsiadm: initiator reported error (19 - encountered non-retryable iSCSI login failure)

iscsiadm: Could not log into all portals

[确定]

You have new mail in /var/spool/mail/root

[root@steppingstone ~]# 


我在每个 initiator 上执行,  清除以前的三步骤 然后 发现 ,然后启动 iscsi 就可以了

# iscsiadm -m discovery -t st -p 192.168.0.100  #这两步顺序颠倒下应该也可以?

# service iscsi start 

就可以了

image.png


马哥的发现 和 登录 依然是批量执行

我已经单个执行发现了, 我批量执行 登录吧

在target 192.168.0.100 上 (跳转机)

[root@steppingstone ~]#  ha ssh node$I 'iscsiadm -m node -T iqn.2013-05.com.magedu:tsan.disk1 -p 192.168.0.100 -l '; done            #是不是上面# service iscsi start 启动时已经登录了,所以这里没有信息显示了

[root@steppingstone ~]#



在第一个initiator节点 192.168.0.45 上

[root@node1 ~]# fdisk -l


Disk /dev/sda: 21.4 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *           1          13      104391   83  Linux

/dev/sda2              14        2610    20860402+  8e  Linux LVM


Disk /dev/sdb: 21.4 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1        2610    20964793+   5  Extended

/dev/sdb5               1         200     1606437   8e  Linux LVM

/dev/sdb6             201         323      987966   83  Linux


Disk /dev/sdc: 137.4 GB, 137438953472 bytes    #硬盘显示出来了

255 heads, 63 sectors/track, 16709 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


Disk /dev/sdc doesn't contain a valid partition table

[root@node1 ~]#




三个initiator 安装,配置集群,使用集群逻辑卷

安装 cman,rgmanager,gfs2-utils lvm2-cluster

lvm2 是集群逻辑卷,软件包的名字叫  lvm2-cluster

image.png

我只需安装 lvm2-cluster




[root@steppingstone ~]# ha ssh node$I 'yum -y install lvm2-cluster' ; done

image.png


马哥找一个 initiator 来配置集群,,,我这边不用配置了(因为以前配置好了)

image.png





cLVM: 集群逻辑卷,共享存储作成逻辑卷

           借用HA的机制,心跳转输机制以及通信机制,及以脑裂的阻止机制,让多个节点同时能够对一个LVM的物理设备(或逻辑设备)发起管理操作,但是某一个节点发起管理操作的时候,它能够加锁,并通知给其它节点,对逻辑卷的操作能够立即通知给其它节点,,让其它节点很快能够看到,,,,所以创建了一个物理卷,其它节点随时可以看到,

            cLVM是集群当中使用了一个分布式协作工具,打开这个工具以后,一个控制结构,它能够在各节点之间借助于HA的功能进行通信,,,,

            我们对于逻辑卷的管理,仍然都使用本地命令,,,,,,,,,前提cLVM需要在各节点上启动一个服务,这个服务就是让各个节点之间通过这个服务进行通信的,,,,,,,,我们在启动服务之前,得打开LVM功能的应用在集群环境中的协作机制,(叫作集群的类型???LVM的类型???) (/etc/lvm/lvm.conf     locking_type 默认为1,应改为3),,然后将clvm的服务启动起来

            clvm 依基于cman的rgmanager的启动


在第一个initiator节点 192.168.0.45 上

[root@node1 ~]# cd /etc/lvm/

[root@node1 lvm]# vim lvm.conf

.....................................................................................

 locking_type = 1  #改为3

.....................................................................................


马哥配置集群


创建集群

增加fence设备

列了fence

image.png

添加节点


image.png


列出节点

image.png

启动cman服务,(和rgmanager服务)要三个一起才能启动

image.png


在第一个initiator节点 192.168.0.45 上

[root@node1 lvm]# service cman start

Starting cluster:

   Loading modules... done

   Mounting configfs... done

   Starting ccsd... done

   Starting cman... done

   Starting daemons... done

   Starting fencing... done

   Tuning DLM... done

                                                           [确定]

在第二个initiator节点 192.168.0.55 上

[root@node2 ~]# service cman start

Starting cluster:

   Loading modules... done

   Mounting configfs... done

   Starting ccsd... done

   Starting cman... done

   Starting daemons... done

   Starting fencing... done

   Tuning DLM... done

                                                           [确定]

在第三个initiator节点 192.168.0.65 上

[root@node3 ~]# service cman start

Starting cluster:

   Loading modules... done

   Mounting configfs... done

   Starting ccsd... done

   Starting cman... done

   Starting daemons... done

   Starting fencing... done

   Tuning DLM... done

                                                           [确定]


马哥 启动 三个 cman 停在这儿了

image.png

马哥解决思路:看日志

image.png


马哥时间已同步,,,,主机名是对的

image.png

马哥 iptables 没问题

image.png

只有节点一 Online

image.png

# 看看状态

image.png


看下配置

image.png

image.png

列出 fence

image.png


image.png


image.png


看看 cluster.conf.old 内容

image.png



image.png

image.png

马哥删了,重来一次

image.png



image.png


image.png   # 为什么有old???old 上面 仅有 node1 node2?????为什么?

image.png


# 删掉 cluster.conf.old

image.png

#能ping 通 node2

image.png


# 三个节点 启动 cman 还是不行

image.png


仍是同一个错误

image.png



# Name 为啥叫 meat 不是 meatware

# 节点 为什么是 node1.chris.com   node2.chris.com   node3.chris.com ???

冲突了?

image.png

可能是组播 ip 地址冲突???

image.png

image.png

image.png

node1 一上线,马上加入它的集群了,所以  node2 , node3 启动不起来了???


删掉 cluster.conf

image.png


再来一遍

image.png

image.png  还是没有看出啥错误?????

image.png

安装下 # system-config-cluster

image.png

image.png

手动改acno???文档有问题,所以演示能行的办法,

所以用另一种方法

image.png


image.png

image.png

image.png

image.png


image.png    # 没看到这里,刚刚弄的主播地址

image.png


启动 三个 cman    

能启动了,但是仍然有故障

image.png




node2 node3 删掉rhcs的配置文件 cluster.conf

image.png

image.png



在第一个node 上 

删掉以前两个版本

image.png


image.png   # 为啥没看到组播地址

image.png


打开 图形管理界面看看

image.png



image.png

image.png


image.png


先启动 node1 的 cman 仍然会报错

image.png


image.png


image.png


是此前曾经启动的进程到这儿了,,,,,,


启动三个节点的 cman  还是不行

image.png




image.png

由下图,看到了组播地址

image.png


image.png


在第二个节点上 没看到配置文件传过来

image.png

image.png

把配置文件 从 node1 复制到 node2 node3

image.png


三个节点 cman 好像 可以启动

image.png

马哥说 可能集群太多,基于节点刚初始化的时候,里面没有配置文件,可能会接受任何人的ccsd所传过来的信息,所以导致三台主机无论如何自己无法通信了,(刚启动的时候,如果里面没有任何配置文件,启动ccsd进程以后,网络内的任意主机的ccsd通信都会接收,所以导致多个集群产生交叉,尤其是第一次初始化的时候)

处理方法:手动复制配置文件,,,因为事先已定义好组播地址了,这样就不会冲突了


所以处理方法 1)通过 system-config-cluster & 图形界面,自己编个组播ip地址 2) 手动复制cluster.conf到其它节点上

不要使用桥接,因为教室里所有人都在实行组播通信


在三个节点上把集群的逻辑卷的功能给它启用起来


# lvmconf 命令

[root@node1 lvm]# lvmconf -h

usage: /usr/sbin/lvmconf <command>


Commands:

Enable clvm:  --enable-cluster [--lockinglibdir <dir>] [--lockinglib <lib>]

        #   --enable-cluster 表示修改修改 locking_type 为3 的

Disable clvm: --disable-cluster

Set locking library: --lockinglibdir <dir> [--lockinglib <lib>]


Global options:

Config file location: --file <configfile>


[root@node1 lvm]#



在target 192.168.0.100 上 (跳转机)

[root@steppingstone lvm]# ha ssh node$I 'lvmconf --enable-cluster'; done        # 三个initiator上的locking_type 都为3了

[root@steppingstone lvm]#


在第一个initiator节点 192.168.0.45 上

[root@node1 lvm]# cd /etc/lvm/

[root@node1 lvm]# 

[root@node1 lvm]# grep "locking_type" lvm.conf        #看到为3了

    locking_type = 3

    # NB. This option only affects locking_type = 1 viz. local file-based

    # The external locking library to load if locking_type is set to 2.

[root@node1 lvm]#


在第一个initiator节点 192.168.0.45 上

在三个节点上启动集群逻辑卷

image.png


[root@steppingstone lvm]# ha ssh node$I 'service clvmd start'; done

Starting clvmd:

Activating VG(s):   1 logical volume(s) in volume group "myvg" now active

  clvmd not running on node node3.magedu.com

  clvmd not running on node node2.magedu.com

  2 logical volume(s) in volume group "VolGroup00" now active

  clvmd not running on node node3.magedu.com

  clvmd not running on node node2.magedu.com

[确定]

Starting clvmd:

Activating VG(s):   1 logical volume(s) in volume group "myvg" now active

  clvmd not running on node node3.magedu.com

  2 logical volume(s) in volume group "VolGroup00" now active

  clvmd not running on node node3.magedu.com

[确定]

Starting clvmd:

Activating VG(s):   1 logical volume(s) in volume group "myvg" now active

  2 logical volume(s) in volume group "VolGroup00" now active

[确定]

[root@steppingstone lvm]#



在第三个initiator节点 192.168.0.65 上      验证一下

[root@node3 ~]# service clvmd status

clvmd (pid  7800) 正在运行...

Clustered Volume Groups: (none)

Active clustered Logical Volumes: (none)

[root@node3 ~]#


在target 192.168.0.100 上 (跳转机) 上

[root@steppingstone lvm]# ha ssh node$I 'chkconfig clvmd on; chkconfig cman on;chkconfig rgmanager on'; done;                # 开机自动启动

[root@steppingstone lvm]#



在第一个initiator节点 192.168.0.45 上

[root@node1 ~]# cd

[root@node1 ~]# lvs

  LV       VG         Attr   LSize   Origin Snap%  Move Log Copy%  Convert

  LogVol00 VolGroup00 -wi-ao  17.88G

  LogVol01 VolGroup00 -wi-ao   2.00G

  mydata2  myvg       -wi-ao 200.00M

[root@node1 ~]#

[root@node1 ~]# fdisk -l


Disk /dev/sda: 21.4 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *           1          13      104391   83  Linux

/dev/sda2              14        2610    20860402+  8e  Linux LVM


Disk /dev/sdb: 21.4 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1        2610    20964793+   5  Extended

/dev/sdb5               1         200     1606437   8e  Linux LVM

/dev/sdb6             201         323      987966   83  Linux


Disk /dev/sdc: 137.4 GB, 137438953472 bytes

255 heads, 63 sectors/track, 16709 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


Disk /dev/sdc doesn't contain a valid partition table

[root@node1 ~]#


创建逻辑卷

[root@node1 ~]# pvcreate /dev/sdc        #整个盘全做成物理卷  创建物理卷

  Writing physical volume data to disk "/dev/sdc"

  Physical volume "/dev/sdc" successfully created

[root@node1 ~]#

[root@node1 ~]# pvs            

  PV         VG         Fmt  Attr PSize   PFree

  /dev/sda2  VolGroup00 lvm2 a--   19.88G      0

  /dev/sdb5  myvg       lvm2 a--    1.53G   1.34G

  /dev/sdc              lvm2 a--  128.00G 128.00G            # 物理卷

[root@node1 ~]#



在第二个initiator节点 192.168.0.55 上

[root@node2 ~]# pvs            #也能够看到物理卷

  PV         VG         Fmt  Attr PSize   PFree

  /dev/sda2  VolGroup00 lvm2 a--   19.88G      0

  /dev/sdb5  myvg       lvm2 a--    1.53G   1.34G

  /dev/sdc              lvm2 a--  128.00G 128.00G

[root@node2 ~]#



在第一个initiator节点 192.168.0.45 上

[root@node1 ~]# vgcreate clustervg /dev/sdc        #创建卷组

  Clustered volume group "clustervg" successfully created

[root@node1 ~]# vgs

  VG         #PV #LV #SN Attr   VSize   VFree

  VolGroup00   1   2   0 wz--n-  19.88G      0

  clustervg    1   0   0 wz--nc 128.00G 128.00G    #创建的卷组

  myvg         1   1   0 wz--n-   1.53G   1.34G

[root@node1 ~]#


在第三个initiator节点 192.168.0.65 上

[root@node3 ~]# vgs

  VG         #PV #LV #SN Attr   VSize   VFree

  VolGroup00   1   2   0 wz--n-  19.88G      0

  clustervg    1   0   0 wz--nc 128.00G 128.00G        #能看到卷组

  myvg         1   1   0 wz--n-   1.53G   1.34G

[root@node3 ~]#


在第一个initiator节点 192.168.0.45 上

[root@node1 ~]# lvcreate -L 10G -n clusterlv clustervg    #创建逻辑卷   10G吧,不要太大,因为太大,可能格式化等操作会花费很长时间

  Logical volume "clusterlv" created

[root@node1 ~]#


在第三个initiator节点 192.168.0.65 上

[root@node3 ~]# lvs

  LV        VG         Attr   LSize   Origin Snap%  Move Log Copy%  Convert

  LogVol00  VolGroup00 -wi-ao  17.88G

  LogVol01  VolGroup00 -wi-ao   2.00G

  clusterlv clustervg  -wi-a-  10.00G        #看到了刚创建的逻辑卷

  mydata2   myvg       -wi-ao 200.00M

[root@node3 ~]#


在第一个initiator节点 192.168.0.45 上

格式化为集群文件系统,而且创建两个日志,等会儿加上去一个日志

[root@node1 ~]# mkfs.gfs2 -j 2 -p lock_dlm -t tcluster:lktb1 /dev/clustervg/clusterlv

# 它实现对这个集群文件系统中的每一位都要格式化,而且格式化以后每一位都要创建相关数据,而后还要通知给其它节点,所以它是让其它节点立即看得到的才行 (马哥说此时格式化所以速度慢,但是我感觉不太慢)

This will destroy any data on /dev/clustervg/clusterlv.


Are you sure you want to proceed? [y/n] y


Device:                    /dev/clustervg/clusterlv

Blocksize:                 4096

Device Size                10.00 GB (2621440 blocks)

Filesystem Size:           10.00 GB (2621438 blocks)

Journals:                  2

Resource Groups:           40

Locking Protocol:          "lock_dlm"

Lock Table:                "tcluster:lktb1"

UUID:                      CA716E46-CC11-BADC-D1D3-C2E2A83F46A0


[root@node1 ~]#

[root@node1 ~]# mkdir /mydataclvm

[root@node1 ~]# mount -t gfs2 /dev/clustervg/clusterlv /mydataclvm/        #挂上去了

[root@node1 ~]#


[root@node1 ~]# gfs2_tool df /mydataclvm/       # df 子命令可以查看文件系统

/mydataclvm:

  SB lock proto = "lock_dlm"

  SB lock table = "tcluster:lktb1"

  SB ondisk format = 1801

  SB multihost format = 1900

  Block size = 4096

  Journals = 2          # 这是日志个数

  Resource Groups = 40

  Mounted lock proto = "lock_dlm"

  Mounted lock table = "tcluster:lktb1"

  Mounted host data = "jid=0:id=458753:first=1"

  Journal number = 0

  Lock module flags = 0

  Local flocks = FALSE

  Local caching = FALSE


  Type           Total Blocks   Used Blocks    Free Blocks    use%

  ------------------------------------------------------------------------

  data           2621144        66195          2554949        3%

  inodes         2554965        16             2554949        0%

[root@node1 ~]#



在第二个initiator节点 192.168.0.55 上

[root@node2 ~]# mkdir  /mydataclvm

[root@node2 ~]# mount -t gfs2 /dev/clustervg/clusterlv /mydataclvm/    #挂载成功

[root@node2 ~]#

[root@node2 ~]# ls /mydataclvm/

[root@node2 ~]# cd /mydataclvm/

[root@node2 mydataclvm]#

[root@node2 mydataclvm]# touch a.txt

[root@node2 mydataclvm]#



在第一个initiator节点 192.168.0.45 上

[root@node1 ~]# ls /mydataclvm/        # 立即看到了  集群文件系统为了能够保证其它节点能够立即访问它所创建的数据,默认情况下都是同步的,在内存在不会停留太久;;;;所以性能很差,一个简单的touch也会卡一下

a.txt

[root@node1 ~]#

[root@node1 ~]# gfs2_tool -h

Clear a flag on a inode

  gfs2_tool clearflag flag <filenames>


Do a GFS2 specific "df":

  gfs2_tool df <mountpoint>


Freeze a GFS2 cluster:

  gfs2_tool freeze <mountpoint>        #冻结gfs2文件系统,就是只读的了(跟mysql一样,锁定所有表为读方式后,只允许读,不允许写) 可以cat,


Print the current mount arguments of a mounted filesystem:

  gfs2_tool getargs <mountpoint>        #可以查看当前的挂载参数


Get tuneable parameters for a filesystem

  gfs2_tool gettune <mountpoint>        #能够获取到设备的挂载点的文件系统的所有可调参数


List the file system's journals:

  gfs2_tool journals <mountpoint>


List filesystems:

  gfs2_tool list


Have GFS2 dump its lock state:

  gfs2_tool lockdump <mountpoint> [buffersize]


Provide arguments for next mount:

  gfs2_tool margs <mountarguments>


Tune a GFS2 superblock

  gfs2_tool sb <device> proto [newval]

  gfs2_tool sb <device> table [newval]

  gfs2_tool sb <device> ondisk [newval]

  gfs2_tool sb <device> multihost [newval]

  gfs2_tool sb <device> all


Set a flag on a inode

  gfs2_tool setflag flag <filenames>


Tune a running filesystem

  gfs2_tool settune <mountpoint> <parameter> <value>        # 调整 挂载点 参数 值


Shrink a filesystem's inode cache:

  gfs2_tool shrink <mountpoint>


Unfreeze a GFS2 cluster:

  gfs2_tool unfreeze <mountpoint>


Print tool version information

  gfs2_tool version


Withdraw this machine from participating in a filesystem:

  gfs2_tool withdraw <mountpoint>

[root@node1 ~]#


[root@node1 ~]# gfs2_tool gettune /mydataclvm/        #斜线不能写

gfs2_tool: gfs2 Filesystem /mydataclvm/ is not mounted.

[root@node1 ~]#

[root@node1 ~]# gfs2_tool gettune /mydataclvm

new_files_directio = 0        #直接IO,这个数据是直接写到磁盘上去的,默认为0表示还没有直接写到磁盘上去,,,刚刚卡的原因是它向其它节点通知其状态信息的,,要立即写到磁盘上去,并且要能够立即让其它节点访问,值需调整为1,,,调整为1则性能更差的

new_files_jdata = 0

quota_scale = 1.0000   (1, 1)

logd_secs = 1

recoverd_secs = 60

statfs_quantum = 30

stall_secs = 600

quota_cache_secs = 300

quota_simul_sync = 64

statfs_slow = 0

complain_secs = 10

max_readahead = 262144

quota_quantum = 60

quota_warn_period = 10

jindex_refresh_secs = 60

log_flush_secs = 60

incore_log_blocks = 1024

[root@node1 ~]#


[root@node1 ~]# gfs2_tool settune /mydataclvm new_files_directio 1        #挂载点  /mydataclvm 后面不能加斜线

[root@node1 ~]#


[root@node1 ~]# gfs2_tool gettune /mydataclvm            

new_files_directio = 1        #此时值为1了

new_files_jdata = 0

quota_scale = 1.0000   (1, 1)

logd_secs = 1

recoverd_secs = 60

statfs_quantum = 30

stall_secs = 600

quota_cache_secs = 300

quota_simul_sync = 64

statfs_slow = 0

complain_secs = 10

max_readahead = 262144

quota_quantum = 60

quota_warn_period = 10

jindex_refresh_secs = 60

log_flush_secs = 60        #日志多长时间自动刷新一次,,,,调长点能提高性能

incore_log_blocks = 1024

[root@node1 ~]#


[root@node1 ~]# touch /mydataclvm/b.txt

[root@node1 ~]# gfs2_tool freeze /mydataclvm        #冻结文件系统   进行文件备份的时候,比较好用

[root@node1 ~]# touch /mydataclvm/c.txt        #冻结后不能创建文件了


打开另一个窗口,解冻

[root@node1 ~]# gfs2_tool unfreeze /mydataclvm

[root@node1 ~]#

[root@node1 ~]#  gfs2_tool getargs /mydataclvm    #获取挂载参数

statfs_percent 0

data 2

suiddir 0

quota 0

posix_acl 0

upgrade 0

debug 0

localflocks 0

localcaching 0

ignore_local_fs 0

spectator 0

hostdata jid=0:id=262145:first=1

locktable

lockproto

[root@node1 ~]#


[root@node1 ~]# gfs2_tool setargs  debug 1            #setargs好像不行

gfs2_tool: unknown action: setargs

[root@node1 ~]#


[root@node1 ~]# gfs2_tool journals /mydataclvm        #只有两个日志

journal1 - 128MB

journal0 - 128MB

2 journal(s) found.

[root@node1 ~]#

[root@node1 ~]# gfs2_jadd -h

Usage:


gfs2_jadd [options] /path/to/filesystem


Options:


  -c <MB>           Size of quota change file

  -D                Enable debugging code

  -h                Print this help, then exit

  -J <MB>           Size of journals

  -j <num>          Number of journals    #指定加几个日志  每加1个,要128M空间,还要通知其它节点

  -q                Don't print anything

  -V                Print program version information, then exit

[root@node1 ~]#

[root@node1 ~]# gfs2_jadd -j 1 /mydataclvm        #加的过程中死机了



在第一个initiator节点 192.168.0.45 上        #重新开机试一下

[root@node1 ~]# gfs2_jadd -j 1 /dev/clustervg/clusterlv    #应该是跟设备,而不是挂载点吧

Filesystem:            /mydataclvm

Old Journals           2

New Journals           3

[root@node1 ~]#



在第二个initiator节点 192.168.0.55 上

[root@node2 ~]# lvs

  LV        VG         Attr   LSize   Origin Snap%  Move Log Copy%  Convert

  LogVol00  VolGroup00 -wi-ao  17.88G

  LogVol01  VolGroup00 -wi-ao   2.00G

  clusterlv clustervg  -wi-a-  10.00G    #看到了它

  mydata2   myvg       -wi-ao 200.00M

[root@node2 ~]#

[root@node2 ~]# gfs2_tool journals /mydataclvm        #看到了 

journal2 - 128MB

journal1 - 128MB

journal0 - 128MB

3 journal(s) found.

[root@node2 ~]#


马哥在第一个节点上 添加 journal,发现死机了

image.png

但是马哥由于第一个节点死机,所以没有看到新加的journal

image.png

马哥在第二个节点上 添加成功了 journal

image.png


做这些操作时,网卡狂闪

image.png


马哥 重启 node1 ,发现 三个节点都已经上线了

image.png


[root@node1 ~]# clustat        #都上线了

Cluster Status for tcluster @ Thu Feb 25 09:38:11 2021

Member Status: Quorate


 Member Name                             ID   Status

 ------ ----                             ---- ------

 node1.magedu.com                            1 Online, Local

 node2.magedu.com                            2 Online

 node3.magedu.com                            3 Online


[root@node1 ~]#


[root@node1 ~]# lvs

  LV        VG         Attr   LSize   Origin Snap%  Move Log Copy%  Convert

  LogVol00  VolGroup00 -wi-ao  17.88G

  LogVol01  VolGroup00 -wi-ao   2.00G

  clusterlv clustervg  -wi-ao  10.00G

  mydata2   myvg       -wi-ao 200.00M

[root@node1 ~]#



[root@node1 ~]# gfs2_tool journals /mydataclvm/

gfs2_tool: gfs2 Filesystem /mydataclvm/ is not mounted.

[root@node1 ~]# gfs2_tool journals /mydataclvm        #看到三个日志了

journal2 - 128MB

journal1 - 128MB

journal0 - 128MB

3 journal(s) found.

[root@node1 ~]#


在第三个initiator节点 192.168.0.65 上

[root@node3 ~]# mkdir /mydataclvm

[root@node3 ~]# mount -t gfs2 /dev/clustervg/clusterlv /mydataclvm

[root@node3 ~]#



扩展集群逻辑卷

马哥不演示扩展物理卷了


[root@node1 ~]# lvextend -L 15G /dev/clustervg/clusterlv        #扩展逻辑卷(的物理边界)到15G (原来是10G,这里使用+5G也行)

  Extending logical volume clusterlv to 15.00 GB

  Logical volume clusterlv successfully resized

[root@node1 ~]#

[root@node1 ~]# lvs

  LV        VG         Attr   LSize   Origin Snap%  Move Log Copy%  Convert

  LogVol00  VolGroup00 -wi-ao  17.88G

  LogVol01  VolGroup00 -wi-ao   2.00G

  clusterlv clustervg  -wi-ao  15.00G        #15G了

  mydata2   myvg       -wi-ao 200.00M

[root@node1 ~]#


[root@node1 ~]# mount

/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

devpts on /dev/pts type devpts (rw,gid=5,mode=620)

/dev/sda1 on /boot type ext3 (rw)

tmpfs on /dev/shm type tmpfs (rw)

/dev/mapper/myvg-mydata2 on /mydata2 type ext3 (rw)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

none on /sys/kernel/config type configfs (rw)

nfsd on /proc/fs/nfsd type nfsd (rw)

/dev/mapper/clustervg-clusterlv on /mydataclvm type gfs2 (rw,hostdata=jid=0:id=131073:first=1)

[root@node1 ~]#

[root@node1 ~]# df -lh

文件系统              容量  已用 可用 已用% 挂载点

/dev/mapper/VolGroup00-LogVol00

                       18G  8.1G  8.4G  49% /

/dev/sda1              99M   13M   82M  13% /boot

tmpfs                 506M     0  506M   0% /dev/shm

/dev/mapper/myvg-mydata2

                      194M   48M  137M  26% /mydata2

/dev/mapper/clustervg-clusterlv        #为啥这里逻辑卷的逻辑边界显示为10G

                       10G  388M  9.7G   4% /mydataclvm

[root@node1 ~]#


为什么有时创建文件快,有时慢,,,,,,此时曾经在这个节点上访问过iscsi设备的话,因为连接建立起来了,第二次比较快,,,,,,,,,因为客户端对scsi端的访问并不是实时在线的,所以长时间不访问的,可能连接会断掉,所以访问时间会比较长



在target 192.168.0.100  上执行  # tgtadm --lld iscsi --mode target --op show

image.png

在target 192.168.0.100  上又执行 # tgtadm --lld iscsi --mode target --op show

image.png

在target 192.168.0.100  上 马哥 tgtd 服务停了,,导致马哥 连接有IO错误,,重启一下 # service tgtd restart     马哥的initiator 连接就好了 ???

image.png

image.png

在第一个initiator节点 192.168.0.45 上

[root@node1 ~]# df -lh

文件系统              容量  已用 可用 已用% 挂载点

/dev/mapper/VolGroup00-LogVol00

                       18G  8.1G  8.4G  49% /

/dev/sda1              99M   13M   82M  13% /boot

tmpfs                 506M     0  506M   0% /dev/shm

/dev/mapper/myvg-mydata2

                      194M   48M  137M  26% /mydata2

/dev/mapper/clustervg-clusterlv

                       10G  388M  9.7G   4% /mydataclvm            #逻辑卷的逻辑边界还是10G



[root@node1 ~]#


在第一个initiator节点 192.168.0.45 上


[root@node1 ~]# gfs2_grow -h        #扩展逻辑卷的逻辑边界

Usage:


gfs2_grow [options] /path/to/filesystem


Options:

  -h               Usage information

  -q               Quiet, reduce verbosity

  -T               Test, do everything except update FS        #做测试

  -V               Version information

  -v               Verbose, increase verbosity

[root@node1 ~]#

[root@node1 ~]# gfs2_grow /dev/clustervg/clusterlv        #不使用-T 直接扩展

FS: Mount Point: /mydataclvm

FS: Device:      /dev/mapper/clustervg-clusterlv

FS: Size:        2621438 (0x27fffe)

FS: RG size:     65533 (0xfffd)

DEV: Size:       3932160 (0x3c0000)

The file system grew by 5120MB.

Error fallocating extra space : 文件过大

gfs2_grow complete.

[root@node1 ~]#

[root@node1 ~]# df -lh

文件系统              容量  已用 可用 已用% 挂载点

/dev/mapper/VolGroup00-LogVol00

                       18G  8.1G  8.4G  49% /

/dev/sda1              99M   13M   82M  13% /boot

tmpfs                 506M     0  506M   0% /dev/shm

/dev/mapper/myvg-mydata2

                      194M   48M  137M  26% /mydata2

/dev/mapper/clustervg-clusterlv        #逻辑卷的物理边界扩展了 看到15G了

                       15G  388M   15G   3% /mydataclvm

[root@node1 ~]#




gfs2_tool

gfs2_jadd -j

gfs2_grow 


mkfs.gfs2  

fsck.gfs2    # 检测文件系统的


集群文件系统不可靠,严重依赖于集群功能


普通分类: