【简介】 

GFS2是加入到内核中提供的某种功能或者服务

客户端跟服务器端建立一个持久的连接后,服务器端会将文件的动态显示到客户端

安装完成之后,可以直接启动服务,将本地一个磁盘输出为iscsi target

【准备工作】

1. 一台虚拟机用于做iSCSI服务器端,

在现有硬盘上添加两个分区、或者直接添加两块磁盘,装上scsi-target-utils软件包

笔者是添加了一块磁盘,然后在此块磁盘上做了两个分区

(如果是通过添加同样的磁盘,注意在BIOS中调整启动次序)

2. 3台虚拟机节点

node1

node2

node3


【服务器端】

1、  准备要共享的设备

 笔者这里使用本地磁盘上的新分区:

 
  
  1. fdisk /dev/sda    #建立所需要的新分区2个,各分配10G 
  2. fdisk -l               

 
  
  1. partprobe /dev/sdb #在其余两个节点上都要执行此命令,后面的也是,每当磁盘有变动的时候,建议执行此命令发送通知给系统,否则就会出现类似下图所示的错误 

2、安装iscsi服务端:

 
  
  1. yum -y install scsi-target-utils 
  2. service tgtd start   #软件包安装完成后生产的进程为tgtd 
  3. netstat -tnlp | grep 3260 

SCSI总线有许多target,因此要来模拟target,每一个target可以挂载很多logicalunit(逻辑单元,每一个logicalunit都被客户端识别为一块磁盘)

笔者的做法是:

在服务器端上模拟一个target

模拟出几个LUN

把服务器端的分区模拟为一个磁盘

这样客户端看来,是一块磁盘的整个分区,就能被再分区并且格式化。GFS2是通过TCP/IP共享出去的,因此能被多个客户端同时识别并被使用。每一个LUN需要一个号码(0-8LUN0是一个本地管理器,target0也具有类似管理器的功能,因此实际能被使用的号码就是从1-8)

 

3、  向服务器端附加targetLUN

 
  
  1. rpm –ql scsi-target-utils #查看都生成了哪些文件 

/etc/tgt/target.conf 主配置文件

在此文件中使用<target></target>标签可以输出target,并且可以定义LUN,本地的后台存储设备。

所做的targetLUN要存放在这个配置文件当中,这样能够永久有效

       tgt-admin 配置工具

       tgt-setup-lun

      tgtadm 服务器端管理工具:定义、删除(这个用的比较多)

 

 
  
  1. tgtadm --lld iscsi --op new --mode target --tid=1 --targetname=iqn.2012-11.com.youchang.target.sda1:webstore 
  2. tgtadm --lld iscsi --op show --mode target 
  3. tgtadm --lld iscsi --op new --mode logicalunit --tid=1 --lun=1 -b /dev/sda1(添加一个LUN,删除用delete) 
  4. tgtadm --lld iscsi --op bind --mode target --tid 1 -I 172.16.10.0/16 
  5. tgtadm --lld iscsi --op new --mode logicalunit --tid=1 --lun=2 -b /dev/sda2 
  6. tgtadm --lld iscsi --op show --mode target 


【客户端】

 
  
  1. yum –y install iscsi-initiator-utils 
  2. rpm –ql iscsi-initiator-utils 

/sbin/iscsiadm 客户端工具,作用:发现服务器端提供了哪些target磁盘设备,并且能够让用户登录服务器端的磁盘,当做本地磁盘来进行使用

/etc/iscsi/initiatorname.iscsi 此文件用于通知服务器端此客户端的名称

比如我的方式是直接在文件中添加一行:

 
  
  1. iqn.2012-11.com.youchang.target.sda1:webstore 

做完上述工作就可以启动iSCSI

 
  
  1. service iscsi start 

/var/lib/iscsi目录当中会保存有以包含客户端名称的一个目录,如果要卸载target,注意删除此目录

 
  
  1. iscsiadm –m discovery –t sendtargets –p 172.16.10.128:3260 #用于发现target设备的 
  2. iscsiadm –m node –T iqn.2012-11.com.youchang1.target.sda1:webstore –p 172.16.10.77:3260 –l #用于登录到服务器
  3. iscsiadm –m node –d #(0-8) –T iqn.2012-11.com.youchang1.target.sda1:webstore –p 172.16.10.77:3260 –l #如果登录不成功,可以用此显示详细信息
  4. fdisk –l 查看是否成功发现服务器的LUN磁盘设备
  5. fdisk /dev/sdb #查看是否能够成功分区发现的设备和是否能够进行格式化操作
  6. partprobe /dev/sdb
  7. mke2fs –j /dev/sdb1 #格式化被发现的磁盘上的一个新分区
  8. mkdir /www/htdocs –pv
  9. mount /dev/sdb1 /www/htdocs #挂载此分区到此目录
  10. ls /www/htdocs #查看是否成功挂载,使用mount 查看也可
  11. vim /www/htdocs/index.html #在此目录中创建一个文件,以查看是否有读写权限

在另一个客户端节点上进行同样的操作,查看是否挂载之后,对/www/htdocs有没有读写权限。

在两个节点都成功挂载之后,分别拷贝或者新建一个文件到此目录中,查看在一个节点上写入的文件,另一个节点能够立即查看到。验证之后会发现,需要等待很长一段时间以后,才会显示出此文件!因为他们是基于内存写入的,所以写入磁盘比较缓慢,不能同步。

将上述所更改的内容保存至/etc/tgt/target.conf


【构建全局文件系统】

修改其配置文件

 
  
  1. umount /dev/sdb1 #俩个节点的都要卸载掉 
  2. yum –y install cman rgmanager gfs2-utils #3个节点都要安装此文件 
  3. ccs_tool create youcluster 
  4. ccs_tool addfence manual fence_manual 
  5. ccs_tool addnode –v 1(票数)  –n 1 –f manual node1 
  6. ccs_tool addnode –v 1 –n 2 –f manual node2 
  7. ccs_tool addnode –v 1 –n 3 –f manual node3 
  8. service cman start           #3个节点上启动cman 

PS:笔者在做到这一步时,每次总是弹出很多错误提示。原因大概有以下几点

1. 集群节点把本物理机外的其他集群节点当成了笔者搭建的集群成员

笔者所在的网络环境是有很多台机器,旁边有很多同学和笔者是同在172.16.0.0/16这个网段,而笔者在上面的步骤中做的是【tgtadm –lld iscsi –op bind –mode target –tid 1 –I 172.16.0.0/16】,可能导致了此网段内的机器当做了本集群成员

解决方法:笔者把【tgtadm –lld iscsi –op bind –mode target –tid 1 –I 172.16.0.0/16】改写为【tgtadm –lld iscsi –op bind –mode target –tid 1 –I 172.16.10.0/24

2.配置文件没有同步就去启动服务

笔者在第一次配置时,没有把node1生成的配置文件放到node2node3上就去启动服务,结果报错。

3.配置文件不能同步

service cman stop这个命令没有关掉ccsd进程,导致/etc/cluster/cluster.conf这个配置文件不能同步。

笔者查看了在启动cman服务时,对应节点上的配置文件的变化,比如笔者启动node1后,去启动node2cman(此时node1上的cman启动并没有完成,而是显示在等待fencing)node2立即给报错,查看配置文件,发现被莫名的改动了。很是怪异!

解决方法:

 
  
  1. killall ccsd #在3个节点上都执行此命令 
  2. rm –f /etc/cluster/* #3个节点上的配置文件删除 
  3. 然后在3个节点上重新执行一遍命令,在node1上生成一个配置文件 
  4. scp /etc/cluster/cluster.conf node2:/etc/cluster/ 
  5. scp /etc/cluster/cluster.conf node2:/etc/cluster/ 

启动3个节点服务,应该就没什么问题了

 
  
  1. service rgmanager start  #3个节点上都要启动 
  2. service gfs2 start            #3个接的行都要启动 
  3. lsmod #查看内核中是否装有gfs2模块 
  4. fdisk /dev/sdb #添加一个2G分区 
  5. partprobe /dev/sdb 
  6. fdisk –l  #查看一下 
  7. mkfs.gfs2 –p lock_dlm –t youcluster:sdb2 –j 3 /dev/sdb2 
       -j 3 #3个节点至少应该有3个日志
       -p
       -t 指定锁表名称
 
  
  1. blkid /dev/sdb #查看文件系统类型 
  2. mount –t gfs2 /dev/sdb2 /www/htdocs   #3个节点都要挂载 

在一个节点的/www/htdocs目录中创建一个文件,再到其他节点的相应目录查看一下效果

 

 

仓促成文,笔者水平有限,秒虎画猫,不足之处请指正!