本文轉載修改自http://www.it165.net/admin/html/201404/2654.html
一,GFS2簡介
GFS2是一個基於GFS的先進的集羣文件系統,能夠同步每臺主機的集羣文件系統的metadata,能夠進行文件鎖的管理,並且必須要redhat cluster suite支持,GFS2可以grow,進行容量的調整;不過這是在disk動態容量調整的支持下,也就是本文所要實現的CLVM。
實驗環境:
192.168.30.119 tgtd.luojianlong.com OS:Centos 6.4 x86_64 管理服務器 iscsi-target-server
192.168.30.115 node1.luojianlong.com OS:Centos 6.4 x86_64 iscsi-initiator
192.168.30.116 node1.luojianlong.com OS:Centos 6.4 x86_64 iscsi-initiator
192.168.30.117 node1.luojianlong.com OS:Centos 6.4 x86_64 iscsi-initiator
原理:
node1,node2,node3分別通過ISCSI-initiator登錄並掛載tgtd服務器的存儲設備,利用RHCS搭建GFS2高可用集羣文件系統,且保證3個節點對存儲設備能夠同時讀寫訪問。
下面是拓撲圖:
二,準備工作
分別設置4臺服務器的hosts文件,以便能夠解析對應節點,設置管理節點到各集羣節點的ssh密鑰無密碼登錄,關閉NetworkManager,設置開機不自動啓動。
[root@tgtd ~]
#
cat /etc/hosts
192.168.30.115 node1.luojianlong.com node1
192.168.30.116 node2.luojianlong.com node2
192.168.30.117 node3.luojianlong.com node3
[root@tgtd ~]
# ssh-copy-id -i node1
[root@tgtd ~]
# ssh-copy-id -i node2
[root@tgtd ~]
# for I in {1..3}; do scp /etc/hosts node$I:/etc/; done
關閉各節點的iptables,selinux服務
[root@tgtd ~]
# for I in {1..3}; do ssh node$I 'service iptables stop'; done
[root@tgtd ~]
# for I in {1..3}; do ssh node$I 'setenforce 0'; done
三、集羣安裝
RHCS的核心組件爲cman和rgmanager,其中cman爲基於openais的“集羣基礎架構層”,rgmanager爲資源管理器。RHCS的集羣中資源的配置需要修改其主配置文件/etc/cluster/cluster.xml實現,其僅安裝在集羣中的某一節點上即可,而cman和rgmanager需要分別安裝在集羣中的每個節點上。這裏選擇將此三個rpm包分別安裝在了集羣中的每個節點上
[root@tgtd ~]
# for I in {1..3}; do ssh node$I 'yum -y install cman rgmanager'; done
爲集羣創建配置文件
RHCS的配置文件/etc/cluster/cluster.conf,其在每個節點上都必須有一份,且內容均相同,其默認不存在,因此需要事先創建,ccs_tool命令可以完成此任務。另外,每個集羣通過集羣ID來標識自身,因此,在創建集羣配置文件時需要爲其選定一個集羣名稱,這裏假設其爲tcluster。此命令需要在集羣中的某個節點上執行
[root@tgtd ~]
# for I in {1..3}; do ssh node$I 'ccs_tool create tcluster'; done
查看生成的配置文件的內容
[root@node1 cluster]
# cat cluster.conf
#ccs_tool命令用於在線更新CCS的配置文件
爲集羣添加節點
RHCS集羣需要配置好各節點及相關的fence設備後才能啓動,因此,這裏需要事先將各節點添加進集羣配置文件。每個節點在添加進集羣時,需要至少爲其配置node id(每個節點的id必須惟一),ccs_tool的addnode子命令可以完成節點添加。將前面規劃的三個集羣節點添加至集羣中,可以使用如下命令實現。
[root@node1 ~]
# ccs_tool addnode -n 1 node1.luojianlong.com
[root@node1 ~]
# ccs_tool addnode -n 2 node2.luojianlong.com
[root@node1 ~]
# ccs_tool addnode -n 3 node3.luojianlong.com
查看已經添加完成的節點及相關信息:
[root@node1 ~]
# ccs_tool lsnode
複製配置文件到其他2個節點
[root@node1 ~]
# scp /etc/cluster/cluster.conf node2:/etc/cluster/
[root@node1 ~]
# scp /etc/cluster/cluster.conf node3:/etc/cluster/
啓動集羣
RHCS集羣會等待各節點都啓動後方才進入正常工作狀態,因此,需要把集羣各節點上的cman服務同時啓動起來。這分別需要在各節點上執行如下命令
[root@tgtd ~]
# for I in {1..3}; do ssh node$I 'service cman start'; done
[root@tgtd ~]
# for I in {1..3}; do ssh node$I 'service rgmanager start'; done
[root@tgtd ~]
# for I in {1..3}; do ssh node$I 'chkconfig rgmanager on'; done
[root@tgtd ~]
# for I in {1..3}; do ssh node$I 'chkconfig cman on'; done
查看集羣狀態信息
[root@node1 ~]
# clustat
cman_tool的status子命令則以當前節點爲視角來顯示集羣的相關信息
[root@node1 ~]
# cman_tool status
cman_tool的nodes子命令則可以列出集羣中每個節點的相關信息
[root@node1 ~]
# cman_tool nodes
cman_tool的services子命令則可以列出集羣中每個服務的相關信息
[root@node1 ~]
# cman_tool services
在tgtd server上安裝scsi-target-utils
[root@tgtd ~]
# yum -y install scsi-target-utils
[root@tgtd ~]
# cp /etc/tgt/targets.conf /etc/tgt/targets.conf.bak
編輯target配置文件,定義target
[root@tgtd ~]
# vi /etc/tgt/targets.conf
# 添加如下內容
<target iqn.2014-04.com.luojianlong:target1>
backing-store /dev/sdb
initiator-address 192.168.30.0/24
</target>
[root@tgtd ~]
# service tgtd restart
backing-store:指定後端要共享的磁盤編號
initiator-address:授權客戶端訪問的網絡地址
incominguser:設置登錄用戶的賬號密碼
啓動target並查看
[root@tgtd ~]
# tgtadm -L iscsi -m target -o show
配置3個節點,使用iscsi-initiator登錄tgtd服務的存儲設備
[root@tgtd ~]
# for I in {1..3}; do ssh node$I 'iscsiadm -m discovery -t st -p 192.168.30.119'; done
[root@tgtd ~]
# for I in {1..3}; do ssh node$I 'iscsiadm -m node -T iqn.2014-04.com.luojianlong:target1 -p 192.168.30.119:3260 -l'; done
[root@tgtd ~]
# for I in {1..3}; do ssh node$I 'fdisk -l /dev/sdb'; done
在其中一個節點上格式化一個分區
[root@node1 ~]
# fdisk /dev/sdb
[root@node1 ~]
# fdisk -l /dev/sdb
配置使用gfs2文件系統
[root@tgtd ~]
# for I in {1..3}; do ssh node$I 'yum -y install gfs2-utils'; done
使用gfs2命令工具在之前創建好的/dev/sdb1上創建集羣文件系統gfs2,可以使用如下命令
[root@node1 ~]
# mkfs.gfs2 -j 3 -p lock_dlm -t tcluster:sdb1 /dev/sdb1
This will destroy any data on /dev/sdb1.
It appears to contain: Linux GFS2 Filesystem (blocksize 4096, lockproto lock_dlm)
Are you sure you want to proceed? [y/n] y
Device: /dev/sdb1
Blocksize: 4096
Device Size 5.00 GB (1310972 blocks)
Filesystem Size: 5.00 GB (1310970 blocks)
Journals: 3
Resource Groups: 21
Locking Protocol:
"lock_dlm"
Lock Table:
"tcluster:sdb1"
UUID: 478dac97-c25f-5bc8-a719-0d385fea23e3
mkfs.gfs2爲gfs2文件系統創建工具,其一般常用的選項有:
-b BlockSize:指定文件系統塊大小,最小爲512,默認爲4096;
-J MegaBytes:指定gfs2日誌區域大小,默認爲128MB,最小值爲8MB;
-j Number:指定創建gfs2文件系統時所創建的日誌區域個數,一般需要爲每個掛載的客戶端指定一個日誌區域;
-p LockProtoName:所使用的鎖協議名稱,通常爲lock_dlm或lock_nolock之一;
-t LockTableName:鎖表名稱,一般來說一個集羣文件系統需一個鎖表名以便讓集羣節點在施加文件鎖時得悉其所關聯到的集羣文件系統,鎖表名稱爲clustername:fsname,其中的clustername必須跟集羣配置文件中的集羣名稱保持一致,因此,也僅有此集羣內的節點可訪問此集羣文件系統;此外,同一個集羣內,每個文件系統的名稱必須惟一。
格式化完成後,重啓node1,node2,node3,不然無法掛載剛纔創建的GFS2分區
[root@node1 ~]
# mount /dev/sdb1 /mnt/
[root@node1 ~]
# cp /etc/fstab /mnt/
# 在node2,node3上面也同時掛載/dev/sdb1
[root@node2 ~]
# mount /dev/sdb1 /mnt/
[root@node3 ~]
# mount /dev/sdb1 /mnt/
# 在node1上掛載目錄中寫入數據,檢測node2,node3的掛載目錄數據情況
[root@node1 mnt]
# echo "hello" >> fstab
[root@node2 mnt]
# tail -f fstab
以上信息發現,node2,node3已經發現數據發生變化。
四,配置使用cLVM(集羣邏輯卷)
在RHCS集羣節點上安裝lvm2-cluster
[root@tgtd ~]
# for I in {1..3}; do ssh node$I 'yum -y install lvm2-cluster'; done
在RHCS的各節點上,爲lvm啓用集羣功能
[root@tgtd ~]
# for I in {1..3}; do ssh node$I 'lvmconf --enable-cluster'; done
爲RHCS各節點啓動clvmd服務
[root@tgtd ~]
# for I in {1..3}; do ssh node$I 'service clvmd start'; done
創建物理卷、卷組和邏輯卷,使用管理單機邏輯卷的相關命令即可
[root@node1 ~]
# pvcreate /dev/sdb2
[root@node1 ~]
# pvs
# 此時,在另外的其它節點上也能夠看到剛剛創建的物理卷
創建卷組和邏輯卷
[root@node1 ~]
# vgcreate clustervg /dev/sdb2
[root@node1 ~]
# lvcreate -L 2G -n clusterlv clustervg
格式化邏輯卷
[root@node1 ~]
# lvcreate -L 2G -n clusterlv clustervg
[root@node1 ~]
# mkfs.gfs2 -p lock_dlm -j 2 -t tcluster:clusterlv /dev/clustervg/clusterlv
This will destroy any data on /dev/clustervg/clusterlv.
It appears to contain: symbolic link to `../dm-2'
Are you sure you want to proceed? [y/n] y
Device: /dev/clustervg/clusterlv
Blocksize: 4096
Device Size 2.00 GB (524288 blocks)
Filesystem Size: 2.00 GB (524288 blocks)
Journals: 2
Resource Groups: 8
Locking Protocol:
"lock_dlm"
Lock Table:
"tcluster:clusterlv"
UUID: c8fbef88-970d-92c4-7b66-72499406fa9c
掛載邏輯卷
[root@node1 ~]
# mount /dev/clustervg/clusterlv /media/
[root@node2 ~]
# mount /dev/clustervg/clusterlv /media/
[root@node3 ~]
# mount /dev/clustervg/clusterlv /media/
Too many nodes mounting filesystem, no
free
journals
# 發現node3掛載不了,因爲剛纔創建了2個journal,需要再添加一個
[root@node1 ~]
# gfs2_jadd -j 1 /dev/clustervg/clusterlv
Filesystem: /media
Old Journals 2
New Journals 3
# 然後掛載node3
[root@node3 ~]
# mount /dev/clustervg/clusterlv /media/
[root@node1 ~]
# df -hT
擴展邏輯卷
[root@node1 ~]
# lvextend -L +2G /dev/clustervg/clusterlv
[root@node1 ~]
# gfs2_grow /dev/clustervg/clusterlv
[root@node1 ~]
# df -hT
發現邏輯卷已經被擴展
到此,RHCS,GFS2,ISCSI,clvm實現共享存儲配置完畢。