资源描述
虚拟机搭建gfs系统
系统环境:CentOS release 5.5 - 2.6.18-194.el5
gfs节点1:192.168.1.231 gfs1
gfs节点2:192.168.1.232 gfs2
gfs节点3:192.168.1.233 gfs3
iscsi-target存放设备:192.168.1.240 iscsi-storage (IP对应主机名)
GFS 简明说明,它有两种:
1. 谷歌文件系统:GFS是谷歌实现是一个可扩展分布式文件系统,用于大型、分布式、对大量数据进行访问应用。它运行于廉价一般硬件上,但能够提供容错功效。它能够给大量用户提供总体性能较高服务。
2. RedHat GFS(Global File System)
GFS(Global File System)自己以当地文件系统形式出现。多个Linux机器经过网络共享存放设备,每一台机器全部能够将网络共享磁盘看作是当地磁盘,假如某台机器对某个文件实施了写操作,则以后访问此文件机器就会读到写以后结果。能够依据对性能或是可扩展性,或以经济性多个标准进行不一样方案布署。
GFS 关键组件,集群卷管理,锁管理,集群管理,围栏和恢复,集群配置管理。
本文关键介绍RedhatGFS系统。
REDHAT CLUSTER SUITEWITH GFS :
RHCS(REDHAT CLUSTER SUITE)是一款能够提供高性能、高可靠性、负载均衡、高可用性集群工具集,一个集群通常有两个或两个以上计算机(称为“节点”或”组员“)共同实施一个任务。
RHCS关键组件:
· 集群架构:
提供一个基础功效使节点作为集群工作在一起:配置文件管理,组员关系管理,锁管理和栅设备。
· 高可用性服务管理:
提供节点失败转移服务,当一个节点失败后将服务转移到另一个节点上。
·集群管理工具:
经过配置和管理工具来配置和管理Red Hat集群。
· Linux Virtual Server (LVS)
LVS提供一个基于IP负载均衡功效,经过LVS能够将用户请求均匀分配到集群节点上。
其它Red Hat集群组件:
· Cluster Logical Volume Manager (CLVM)
提供逻辑卷管理集群存放。
· 集群管理器:
CMAN是一个分布式集群管理器(DLM),它运行在每一个集群节点上,CMAN经过监视集群节点提供一个法定节点数(quorum),当集群中有多于二分之一节点处于活跃状态时,此时符正当定节点数,集群继续可用,当只有有二分之一或少于二分之一节点处于活跃状态是则已达成不到法定节点数,此时整个集群变得不可用。CMAN经过监控集群中节点来确定各节点组员关系,当集群中组员关系发生改变,CMAN会通架构中其它组件来进行对应调整。
· DLM锁管理:
分布式锁管理器,它运行在全部集群节点上,锁管理是一个公共基础结构,为集群提供一个共享集群资源管理机制,GFS经过锁管理器使用锁机制来同时访问文件系统元数据,CLVM经过锁管理器来同时更新数据到LVM卷和卷组。
· 数据完整确保:
RHCS 经过 Fence设备从共享存放切断失效节点I/O以确保数据完整性。当CMAN确定一个节点失败后,它在集群结构中通告这个失败节点(组播),fenced进程会将失败节点隔离,以确保失败节点不破坏共享数据。
REDHAT集群配置系统:
集群配置文件:(/etc/cluster/cluster.conf) 是一个XML文件,用来描述下面集群特征:
集群名称:列出集群名称、集群配置文件版本和一个隔离时间,隔离对应时间当一个新节点加入或从集群中隔离时。
集群:列出集群中每一个节点,指定节点名称,节点ID,法定投票数,和栅模式。
fence设备:定义fence设备。
管理资源:定义创建集群服务需要资源。管理资源包含失败转移域,资源和服务。
iscsiinitiator和target简明说明:
iSCSI(Internet SCSI)是IETF(InternetEngineering Task Force,互联网工程任务组)制订一项标准,这种指令集合能够实现在IP网络上运行SCSI协议,使其能够在诸如高速千兆以太网上进行路由选择。SCSI(Small Computer System Interface)是块数据传输协议,在存放行业广泛应用,是存放设备最基础标准协议。iSCSI协议是一个利用IP网络来传输潜伏时间短SCSI数据块方法,iSCSI使用以太网协议传送SCSI命令、响应和数据。iSCSI能够用我们已经熟悉和天天全部在使用以太网来构建IP存放局域网。经过这种方法,iSCSI克服了直接连接存放不足,使我们能够跨不一样服务器共享存放资源,并能够在不停机状态下扩充存放容量。
iSCSI工作过程:当iSCSI主机应用程序发出数据读写请求后,操作系统会生成一个对应SCSI命令,该SCSI命令在iSCSI Initiator层被封装成iSCSI消息包并经过TCP/IP传送到设备侧,设备侧iSCSI Target层会解开iSCSI消息包,得到SCSI命令内容,然后传送给SCSI设备实施;设备实施SCSI命令后响应,在经过设备侧iSCSI Target层时被封装成iSCSI响应PDU,经过TCP/IP网络传送给主机iSCSI Initiator层,iSCS Initiator会从iSCSI响应PDU里解析出SCSI响应并传送给操作系统,操作系统再响应给应用程序。要实现iSCSI读写,除了使用特定硬设备外,也可透过软件方法,将服务器仿真为iSCSI提议端(Initiator)或目标端(target),利用现有处理器和一般以太网络卡资源实现iSCSI连接。
本文均已软件方法在Centos5.5虚拟机上实现gfs功效!
一、在192.168.1.240上安装iscsitarget端:
[root@iscsi-storage ~]#yum install scsi-target-utils (注意:scsi前面没有字母i)
(使用centos默认yum源,将会安装软件scsi-target-utils-0.0-6.1205snap.el5_5.3)
[root@iscsi-storage ~]#yum install libibverbs-devel libibverbs librdmacm librdmacm-devel
假如没有安装以上软件,则/var/log/messages里将会有以下报错:
iscsi-storage tgtd: libibverbs.so: cannot open shared object file: No such file or
directory - iser transport not used
iscsi-storage tgtd:librdmacm.so: cannot open shared object file: No such file or directory - iser
transport not used
磁盘sda装着系统,磁盘sdb用来存放,对其进行分区。
[root@iscsi-storage ~]# fdisk /dev/sdb
本人分成/dev/sdb1 3G , /dev/sdb2 7G.
分区完成后不用格式化分区,实施命令partprobe让系统重新读取分区表,而不用重启系统。
[root@iscsi-storage ~]# partprobe
scsi-targe-utils装完后服务名为tgtd,开启它,并设置为开机开启。
[root@iscsi-storage ~]# service tgtd start
Starting SCSI target daemon: Starting target framework daemon
[root@iscsi-storage ~]# chkconfig tgtd on
接下来建立target device. 在centos5中使用tgtadm指令来设置而不是4当中 vi /etc/ietd.conf.
tgtadm命令参数有点难记,不过scsi-target-utils套件中包含了利用tgtadm指令建立target device步骤,我们能够参考文件来设置:/usr/share/doc/scsi-target-utils-0.0/README.iscsi
本人欲新增iqn名为iqn.-.chinaitv:rhcs-storagetarget device.
=====================================================================================
iqn (iSCSI Qualified Name)格式通常以下:
格式
意义
范例
yyyy-mm
年份-月份
-01
reversed domain name
把域名名称反过来写,通常把企业域名反过来写
com.chinaitv
identifier
识别字,通常注明这个存放空间用途
rhcs-storage
=====================================================================================
新增target device命令以下:
# tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.-.chinaitv:rhcs-storage
实施后,利用以下命令来查看target device:
#tgtadm --lld iscsi --op show --mode target
将起初新建分区加入target device。
# tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/sdb1
查看加入target device后输出内容:
# tgtadm --lld iscsi --op show --mode target
设置能够访问存取此target deviceinitiator节点。本机许可gfs1 gfs2 gfs3存取,设置以下:
#tgtadm --lld iscsi --op bind --mode target --tid 1 -I 192.168.1.231
#tgtadm --lld iscsi --op bind --mode target --tid 1 -I 192.168.1.232
#tgtadm --lld iscsi --op bind --mode target --tid 1 -I 192.168.1.233 (I为大写i)
(假如许可全部initiators存取话,能够将ip换成ALL,以下:
#tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL
假如需要移除则需将bind换成unbind即可,比如
#tgtadm --lld iscsi --op unbind --mode target --tid 1 -I 192.168.1.233)
此次操作只使用sdb1来试验存放,所以只加入sdb1,假如需将多个分区用来存放话能够以下操作:
tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.-.chinaitv:rhcs-storage
tgtadm --lld iscsi --op new --mode target --tid 2 -T iqn.-.chinaitv:rhcs-storage2
tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/sdb1
tgtadm --lld iscsi --op new --mode logicalunit --tid 2 --lun 1 -b /dev/sdb2
tgtadm --lld iscsi --op bind --mode target --tid 1 -I ip
tgtadm --lld iscsi --op bind --mode target --tid 2 -I ip
注意:假如重启tgtd服务话,上面配置全部将会消失,所以不要随便重启,不然需要重新按上面步骤配置,为了在下一次开机自动运行,能够把上面命令添加到/etc/rc.local文件里面。
首先在三个节点机hosts文件末尾添加以下内容: 上
#vi /etc/hosts
二、安装iscsi-initiator-utils,在节点机上安装
#yum install iscsi-initiator-utils
安装需要软件包
[root@gfs1 ~]# yum install -y cman gfs-utils kmod-gfs kmod-dlm cluster-snmp lvm2-cluster rgmanager
指定initiator alias name
#echo "InitiatorAlias=gfs1" >> /etc/iscsi/initiatorname.iscsi
创建cluster.conf配置文件,安装完成后并没有此文件,需自己创建:
#vi /etc/cluster/cluster.conf
<?xml version="1.0"?>
<cluster name="GFSCluster" config_version="1">
##这一行定义了cluster名称,其中config_version是表示该配置文件被配置次数
##(在RedHat Cluster中,各个节点是同配置版本数值也就是配置次数最高配置文件进行学习同时报)
<clusternodes>
<clusternode name="gfs1" votes="1" nodeid="1">
##这一行定义了cluster节点名称,节点id和投票权,节点名通常就是节点主机名
<fence>
<method name="single">
<device name="node1" nodename="gfs1"/>
</method>
</fence>
</clusternode>
<clusternode name="gfs2" votes="1" nodeid="2">
<fence>
<method name="single">
<device name="node2" nodename="gfs2"/>
</method>
</fence>
</clusternode>
<clusternode name="gfs3" votes="1" nodeid="3">
<fence>
<method name="single">
<device name="node3" nodename="gfs3"/>
</method>
</fence>
</clusternode>
</clusternodes>
<fencedevices>
<fencedevice name="node1" agent="fence_manual"/>
<fencedevice name="node2" agent="fence_manual"/>
<fencedevice name="node3" agent="fence_manual"/>
</fencedevices>
<rm>
<failoverdomains/>
<resources/>
</rm>
</cluster>
(fence也是RedHat Cluster产物,没有它GFS也没法工作,fence作用就是当一个节点宕掉(和cluster断掉联络)后,其它正常节点会经过fence设备来把宕掉设备fence掉,把宕掉设备踢出cluster确保整个cluster正常运行,而fence设备通常是服务器自带硬件设备,如hpilo口,IBM和dellipmi等等,因为服务器硬件不一样,造成不一样fence设备配置方法不一样,我这里为虚拟机没有fence设备,所以采取fence_manual方法来手工设置,手工fence功效是:当一个节点宕掉后我们需要在正常节点上输入命令:“# fence_ack_manual -n 宕掉节点名 ” 来把cluster主机隔离掉,才能让正常节点正常工作。现在本人对cluster.conf了解也并不是很熟悉,故不能给出更具体解答,不过能够输入命令:man 5 cluster.conf查看帮助文件。在各个节点机上全部需创建此cluster.conf文件。)
(注:配置文件并不是很标准,自己依据需要还能够添加更多内容和修改,这里只是一个简单例子)
开启iscsi daemon
#service iscsi start
#chkconfig iscsi on
利用iscsiadm命令探测iscsi device:
# iscsiadm -m discovery -t sendtargets -p 192.168.1.240:3260
192.168.1.240:3260,1 iqn.-.chinaitv:rhcs-storage
登入iscsi target
#iscsiadm -m node -T iqn.-.chinaitv:rhcs-storage -p 192.168.1.240:3260 -l
Logging in to [iface: default, target: iqn.-.chinaitv:rhcs-storage, portal: 192.168.1.240,3260]
Login to [iface: default, target: iqn.-.chinaitv:rhcs-storage, portal: 192.168.1.240,3260]: successful
登入成功后,利用fdisk -l能够发觉多处两个硬盘分区。
(若想退出则使用:iscsiadm -m node -T iqn.-.chinaitv:rhcs-storage -p 192.168.1.240:3260 -u)
在该节点上创建一个名为gfsvg LVM 卷组
#pvcreate -ff /dev/sdb
#vgcreate gfsvg /dev/sdb
列出VG大小:
#vgdisplay gfsvg |grep "Total PE "
Total PE 717
创建lv
# lvcreate -l 717 -n gfs gfsvg
Logical volume "gfs" created
# cman_tool status | grep "Cluster Name"
cman_tool: Cannot open connection to cman, is it running ?
原因是没有开启服务,开启服务:
# service cman start
在该节点上创建一个GFS卷,格式化GFS 文件系统,经过命令:
gfs_mkfs -p lock_dlm -t ClusterName:FSName -j Number BlockDevice
格式化gfs文件格式:
-p 这个参数后边跟是gfs锁机制,通常情况下就用lock_dlm
-t 后边是ClusterName:FSName
其中ClusterName是cluster名,就是cluster.conf配置文件中指定cluster名,FSName是给新格式化好gfs分区名字
-j 代表是journal个数,通常情况是2个除非部分特殊情况不然不用再单作调整
BlockDevice 就是要被格式化设备名称。
下面是一个格式化GFS命令实例:
#gfs_mkfs -p lock_dlm -t GFSCluster:gfs -j 3 /dev/gfsvg/gfs
载入对应gfs模块,并查看lv是否成功
# modprobe gfs
# modprobe gfs2
# chkconfig gfs on
# chkconfig gfs2 on
# chkconfig clvmd on
# /etc/init.d/gfs restart
# /etc/init.d/gfs2 restart
# /etc/init.d/clvmd restart
# lvscan
ACTIVE '/dev/gfsvg/gfs' [2.80 GB] inherit ##表示成功
把新建逻辑磁盘挂载到当地:
#mount -t gfs /dev/gfsvg/gfs /opt
#df -h
进入/opt目录,建立新文件(以后到新节点上挂载,以作验证是否gfs创建并挂载成功)
到gfs2节点和gfs3节点上分别实施以下操作
# modprobe gfs
# modprobe gfs2
# /etc/init.d/gfs restart
# /etc/init.d/gfs2 restart
# /etc/init.d/clvmd restart
#chkconfig --add cman
#chkconfig --add clvmd
#chkconfig --add gfs
#chkconfig --level 35 cman on
#chkconfig --level 35 clvmd on
#chkconfig --level 35 gfs on
# lvscan
#mount /dev/gfsvg/gfs /opt
进入/opt目录查看是否有之前在gfs1上建立文件file1
图所表示成功,能够在/opt目录里进行任何操作,三台机器将会保持一致,这么就达成了在一台机器上操作,其它机器保持同时目标,用来提升可用性,当gfs1出了问题后,gfs2和gfs3一样能够用来提供服务!能够在各节点机器上实施命令clustat来查看gfs集群各节点活动状态:
一样能够实施以下命令来检验是否连接成功
# ccs_test connect
Connect successful.
Connection descriptor = 9600
检验一下是否正常
#ccs_tool lsnode
#ccs_tool lsfence
#cman_tool services
注:在gfs2和gfs3节点上必需开启clvmd服务,不然无法挂载/dev/gfsvg/gfs设备。
假如要在存放服务器上即本试验iscsi-storage 上,假如有外部节点连接着此存放,要想停止tgtd(service tgtd stop)服务, 有以下提醒:
Stopping SCSI target daemon: Stopping target framework daemon
Some initiators are still connected - could not stop tgtd
表示无法停止,而采取杀掉tgtdpid方法来停止时,在此用service tgtd start来开启tgtd服务时候,有以下提醒:
实际上tgtd并没有开启成功,用ps查看是查看不到tgtd服务进程,要想处理此问题,是因为有个/var/lock/subsys/tgtd文件存在,只需删除掉即可。
# rm /var/lock/subsys/tgtd
在节点机上,假如想开机自动挂载则修改/etc/fstab文件,加入以下内容:
/dev/mapper/gfsvg-gfs /opt gfs defaults 0 0
本人在虚拟机上布署此gfs集群存放时候,碰到很多问题,在查阅多种资料后才得以实现虚拟机上gfs,也花费了很长时间,其中就有很多报错,举个例子:
Jan 19 04:04:00 gfs1 ccsd[19610]: Cluster is not quorate. Refusing connection.
Jan 19 04:04:00 gfs1 ccsd[19610]: Error while processing connect: Connection refused
Jan 19 04:04:01 gfs1 dlm_controld[18685]: connect to ccs error -111, check ccsd or cluster status
此报错跟fence开启相关系,这是因为我在第一个节点上开启cman时候fencing无法开启,原因在于要开启fence功效,必需多个机器节点全部开启了,单独开启一个时候她是不生效,也就是说必需有二分之一fence全部开启了才能生效,所以需在多台节点上实施service cman start 这么才能够快速处理fenc开启问题。
展开阅读全文