DRBD+GFS [DRBD 에러수정]
============================================
+ CentOS5.0(2.6.18_8)
+ DRBD v8
+ GFS
1. DRBD 패키지를 다운 받는다.
# wget http://mirror.secuidc.com/centos/5.0/extras/i386/RPMS/drbd-8.0.3-1.el5.centos.i386.rpm
# wget http://mirror.secuidc.com/centos/5.0/extras/i386/RPMS/kmod-drbd-8.0.3-1.2.6.18_8.el5.i686.rpm
2. 디스크 파티션을 설정한다.
>>Node1
# fdisk /dev/sdb
/dev/sdb1
>>Node2
# fdisk /dev/sdb
/dev/sdb1
3. DRBD 환경파일을 설정한다.
# vi /etc/hosts
210.220.224.151 drbd1.example.com
210.220.224.152 drbd2.example.com
# vi /etc/drbd.conf
resource RSC {
protocol C;
startup {
wfc-timeout 0; ## Infinite!
degr-wfc-timeout 60; ## 2 minutes.
}
disk {
on-io-error detach;
}
net {
timeout 60;
connect-int 10;
ping-int 10;
max-buffers 2048;
# max-epoch-size 2048;
allow-two-primaries;
}
syncer {
rate 60M;
# group 0;
al-extents 257;
}
on drbd1.example.com{
device /dev/drbd0;
disk /dev/sdb1;
address 210.220.224.151:7789;
meta-disk internal;
}
on drbd2.example.com {
device /dev/drbd0;
disk /dev/sdb1;
address 210.220.224.152:7789;
meta-disk internal;
}
}
4. DRBD 구동 테스트
>>Node1
# modprobe drbd
# drbdadm -d adjust RSC
# drbdadm create-md RSC
# drbdadm adjust RSC
>>Node2
# modprobe drbd
# drbdadm -d adjust RSC
# drbdadm create-md RSC
# drbdadm adjust RSC
5. 자원의 Primary/Primary 지정
>>Node1
# service drbd start
# drbdsetup /dev/drbd0 primary -o
>>Node2
# service drbd start
# drbdsetup /dev/drbd0 primary -o
# watch -n 1 ‘cat /proc/drbd’
version: 8.0.3 (api:86/proto:86)
SVN Revision: 2881 build by buildsvn@c5-i386-build, 2007-05-13 08:22:43
0: cs:SyncTarget st:Primary/Primary ds:Inconsistent/UpToDate C r—
ns:0 nr:1533376 dw:1533344 dr:0 al:0 bm:93 lo:2 pe:1353 ua:1 ap:0
[=======>…………] sync’ed: 38.4% (2474680/4008024)K
finish: 0:04:08 speed: 9,900 (9,124) K/sec
resync: used:4/31 hits:97091 misses:97 starving:0 dirty:0 changed:97
act_log: used:0/257 hits:0 misses:0 starving:0 dirty:0 changed:0
6. 클러스터 및 GFS 설정
# rpm -qa | grep gfs
gfs2-utils-0.1.25-1.el5
kmod-gfs-0.1.16-5.2.6.18_8.el5
gfs-utils-0.1.11-1.el5
# vi /etc/init.d/cluster
#!/bin/sh
. /etc/init.d/functions
case $1 in
start)
service cman start
service gfs start
service rgmanager start
;;
stop)
service rgmanager stop
sleep 1
service gfs stop
service cman stop
;;
*)
echo $”Usage: $0 {start|stop}”
exit 1
esac
exit 0
# system-config-cluster
– New cluster.conf
– Add Node
– Add Fence Device
//위의 설정을 해준 이후에도 클러스터 구성이 안된것으로 나올 수 도 있다. 이때는 아래의 명령을 통해 확인한다.
# service cluster start
Starting cluster:
Loading modules… done
Mounting configfs… done
Starting ccsd… done
Starting cman… done
Starting daemons… done
Starting fencing… done
[ OK ]
fenced: unrecognized service
Starting Cluster Service Manager:
# cman_tool status
Version: 6.0.1
Config Version: 3
Cluster Name: new_cluster
Cluster Id: 23732
Cluster Member: Yes
Cluster Generation: 8
Membership state: Cluster-Member
Nodes: 2
Expected votes: 1
Total votes: 2
Quorum: 1
Active subsystems: 7
Flags: 2node
Ports Bound: 0 177
Node name: DRBD1
Node ID: 1
Multicast addresses: 239.192.92.17
Node addresses: 210.220.224.151
# cman_tool nodes
Node Sts Inc Joined Name
1 M 4 2007-07-06 10:00:31 DRBD1
2 M 8 2007-07-06 10:00:37 DRBD2
//위와 같은 정보가 출력되면 클러스터 구성이 정상적으로 이루어 진것이다.
7. DRBD 디바이스를 GFS 타입으로 포맷
# gfs_mkfs -p lock_dlm -t new_cluster:GFS_NF -j 2 /dev/drbd0
This will destroy any data on /dev/drbd0.
It appears to contain a gfs filesystem.
Are you sure you want to proceed? [y/n] y
Device: /dev/drbd0
Blocksize: 4096
Filesystem Size: 936360
Journals: 2
Resource Groups: 16
Locking Protocol: lock_dlm
Lock Table: new_cluster:GFS_NF
Syncing…
All Done
# mkdir /GFS
# mount -t gfs /dev/drbd0 /GFS
# df -h
8. 테스트
>>>DRBD
8.1 한쪽 노드가 비정상적으로 재부팅 되는 경우 정상적으로 복구 되는가!? OK.
8.2 양쪽 노드가 비정상적으로 재부팅 되는 경우 정상적으로 복구 되는가!? OK.
>>DRBD+GFS
8.3 한쪽 노드가 비정상적으로 재부팅 되는 경우 정상적으로 복구 되는가!? No.
———————————————————————————–
drbd0: Split-Brain detected, dropping connection…
… //위와 같은 메세지가 나오면서 정상적으로 DRBD Sync가 이루어 지지 않는다.
drbd0: Split-Brain detected, manually solved. Sync from peer node
———————————————————————————–
[해결]
>>>재부팅된 시스템에서
# drbdadm — –discard-my-data connect all
>>>정상적인 시스템에서..
# drbdadm connect all
>>> 2개이상의 리소스가 있는곳에서는
–> 리부팅된 시스템에서
# drbdadm — –discard-my-data connect RSC1 (리소스이름)
–> 정상적인 시스템에서
# drbdadm connect RSC1 (리소스이름)
8.4 양쪽 노드가 비정상적으로 재부팅 되는 경우 정상적으로 복구 되는가!? No.
각 데몬을 자동으로 올라오도록 셋팅한 경우 ‘8.3’번과 같은 현상이 양쪽 모두에서 일어난다.
해결 방법은 동일하다.
8.5 시스템을 정상적으로 종료후 수동으로 올리는 방법.
>>>Node1
# chkconfig drbd off
# chkconfig gfs off
# chkconfig cluster off //모든 자동 스크립트를 비활성화 시킨다.
# umount /GFS
# /etc/init.d/cluster stop
# service drbd stop
# reboot //재부팅
# service drbd start
# drbdsetup /dev/drbd0 primary -o