【简介】
GFS2是加入到内核中提供的某种功能或者服务
客户端跟服务器端建立一个持久的连接后,服务器端会将文件的动态显示到客户端
安装完成之后,可以直接启动服务,将本地一个磁盘输出为iscsi target
【准备工作】
1. 一台虚拟机用于做iSCSI服务器端,
在现有硬盘上添加两个分区、或者直接添加两块磁盘,装上scsi-target-utils软件包
笔者是添加了一块磁盘,然后在此块磁盘上做了两个分区
(如果是通过添加同样的磁盘,注意在BIOS中调整启动次序)
2. 3台虚拟机节点
node1
node2
node3
【服务器端】
1、 准备要共享的设备
笔者这里使用本地磁盘上的新分区:
- fdisk /dev/sda #建立所需要的新分区2个,各分配10G
- fdisk -l
- partprobe /dev/sdb #在其余两个节点上都要执行此命令,后面的也是,每当磁盘有变动的时候,建议执行此命令发送通知给系统,否则就会出现类似下图所示的错误
2、安装iscsi服务端:
- yum -y install scsi-target-utils
- service tgtd start #软件包安装完成后生产的进程为tgtd
- netstat -tnlp | grep 3260
SCSI总线有许多target,因此要来模拟target,每一个target可以挂载很多logicalunit(逻辑单元,每一个logicalunit都被客户端识别为一块磁盘)
笔者的做法是:
在服务器端上模拟一个target,
模拟出几个LUN,
把服务器端的分区模拟为一个磁盘
这样客户端看来,是一块磁盘的整个分区,就能被再分区并且格式化。GFS2是通过TCP/IP共享出去的,因此能被多个客户端同时识别并被使用。每一个LUN需要一个号码(0-8,LUN0是一个本地管理器,target0也具有类似管理器的功能,因此实际能被使用的号码就是从1-8)
3、 向服务器端附加target和LUN
- rpm –ql scsi-target-utils #查看都生成了哪些文件
/etc/tgt/target.conf 主配置文件
在此文件中使用
所做的target和LUN要存放在这个配置文件当中,这样能够永久有效
tgt-admin 配置工具
tgt-setup-lun
tgtadm 服务器端管理工具:定义、删除(这个用的比较多)
- tgtadm --lld iscsi --op new --mode target --tid=1 --targetname=iqn.2012-11.com.youchang.target.sda1:webstore
- tgtadm --lld iscsi --op show --mode target
- tgtadm --lld iscsi --op new --mode logicalunit --tid=1 --lun=1 -b /dev/sda1(添加一个LUN,删除用delete)
- tgtadm --lld iscsi --op bind --mode target --tid 1 -I 172.16.10.0/16
- tgtadm --lld iscsi --op new --mode logicalunit --tid=1 --lun=2 -b /dev/sda2
- tgtadm --lld iscsi --op show --mode target
【客户端】
- yum –y install iscsi-initiator-utils
- rpm –ql iscsi-initiator-utils
/sbin/iscsiadm 客户端工具,作用:发现服务器端提供了哪些target磁盘设备,并且能够让用户登录服务器端的磁盘,当做本地磁盘来进行使用
/etc/iscsi/initiatorname.iscsi 此文件用于通知服务器端此客户端的名称
比如我的方式是直接在文件中添加一行:
- iqn.2012-11.com.youchang.target.sda1:webstore
做完上述工作就可以启动iSCSI了
- service iscsi start
在/var/lib/iscsi目录当中会保存有以包含客户端名称的一个目录,如果要卸载target,注意删除此目录
- iscsiadm –m discovery –t sendtargets –p 172.16.10.128:3260 #用于发现target设备的
- iscsiadm –m node –T iqn.2012-11.com.youchang1.target.sda1:webstore –p 172.16.10.77:3260 –l #用于登录到服务器
- iscsiadm –m node –d #(0-8) –T iqn.2012-11.com.youchang1.target.sda1:webstore –p 172.16.10.77:3260 –l #如果登录不成功,可以用此显示详细信息
- fdisk –l 查看是否成功发现服务器的LUN磁盘设备
- fdisk /dev/sdb #查看是否能够成功分区发现的设备和是否能够进行格式化操作
- partprobe /dev/sdb
- mke2fs –j /dev/sdb1 #格式化被发现的磁盘上的一个新分区
- mkdir /www/htdocs –pv
- mount /dev/sdb1 /www/htdocs #挂载此分区到此目录
- ls /www/htdocs #查看是否成功挂载,使用mount 查看也可
- vim /www/htdocs/index.html #在此目录中创建一个文件,以查看是否有读写权限
在另一个客户端节点上进行同样的操作,查看是否挂载之后,对/www/htdocs有没有读写权限。
在两个节点都成功挂载之后,分别拷贝或者新建一个文件到此目录中,查看在一个节点上写入的文件,另一个节点能够立即查看到。验证之后会发现,需要等待很长一段时间以后,才会显示出此文件!因为他们是基于内存写入的,所以写入磁盘比较缓慢,不能同步。
将上述所更改的内容保存至/etc/tgt/target.conf
【构建全局文件系统】
修改其配置文件
- umount /dev/sdb1 #俩个节点的都要卸载掉
- yum –y install cman rgmanager gfs2-utils #3个节点都要安装此文件
- ccs_tool create youcluster
- ccs_tool addfence manual fence_manual
- ccs_tool addnode –v 1(票数) –n 1 –f manual node1
- ccs_tool addnode –v 1 –n 2 –f manual node2
- ccs_tool addnode –v 1 –n 3 –f manual node3
- 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生成的配置文件放到node2、node3上就去启动服务,结果报错。
3.配置文件不能同步
service cman stop这个命令没有关掉ccsd进程,导致/etc/cluster/cluster.conf这个配置文件不能同步。
笔者查看了在启动cman服务时,对应节点上的配置文件的变化,比如笔者启动node1后,去启动node2的cman(此时node1上的cman启动并没有完成,而是显示在等待fencing),node2立即给报错,查看配置文件,发现被莫名的改动了。很是怪异!
解决方法:
- killall ccsd #在3个节点上都执行此命令
- rm –f /etc/cluster/* #3个节点上的配置文件删除
- 然后在3个节点上重新执行一遍命令,在node1上生成一个配置文件
- scp /etc/cluster/cluster.conf node2:/etc/cluster/
- scp /etc/cluster/cluster.conf node2:/etc/cluster/
启动3个节点服务,应该就没什么问题了
- service rgmanager start #3个节点上都要启动
- service gfs2 start #3个接的行都要启动
- lsmod #查看内核中是否装有gfs2模块
- fdisk /dev/sdb #添加一个2G分区
- partprobe /dev/sdb
- fdisk –l #查看一下
- mkfs.gfs2 –p lock_dlm –t youcluster:sdb2 –j 3 /dev/sdb2
-j 3 #3个节点至少应该有3个日志 -p -t 指定锁表名称
- blkid /dev/sdb #查看文件系统类型
- mount –t gfs2 /dev/sdb2 /www/htdocs #3个节点都要挂载
在一个节点的/www/htdocs目录中创建一个文件,再到其他节点的相应目录查看一下效果
仓促成文,笔者水平有限,秒虎画猫,不足之处请指正!