CAFE

서로 묻고답하기(Q&A)

Cluster iscsi 공유스토리지 구성 후 테스트 중 에러

작성자마푸|작성시간12.02.13|조회수1,247 목록 댓글 0

OS : RHEL 6 Update 2


<목적> : 

node01 서버가 타겟서버가 되어 node01 내의 물리적 디스크(/dev/sdb)를 각 노드의 공유 디바이스로 만들어서 사용할 목적.

node02와 node03은 웹서버로서 node01의 타겟디바이스를 가상의 장치로 잡고 L4 스위치를 통해 분산 서비스 예정.

원래는 nfs로 구현하려고 하였으나 성능면에서 더 좋다고 하여 cluster, iscsi, gfs2, clvm 기술을 이용한 공유스토리지를 구성해 보았습니다. 구글링을 통해 시행착오 끝에 구성은 하였으나 예기치 못한 에러가 발생하여 난관에 봉착.

고수님들 문제가 무엇인지 짐작이 된다면 귀뜸이라도 부탁드립니다.


<구성> :

node01  --> 스토리지 공유서버(target device)

node02  --> 웹서버 1

node03  --> 웹서버 2

* node01 은 타겟이자 iscsi-initiator 를 통해 target device를 잡고, node02, node03은 iscsi-initiator를 통해 node01의 target device를 잡는다.


<설정> :

## 보안 내림

iptables, selinux 비활성화.


## 각 노드의 hosts 파일 설정내용

[root@node01.gfs2.com ~]# cat /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.1.77  web-1.gfs2.com  node01

192.168.1.78  web-2.gfs2.com  node02

192.168.1.79  web-3.gfs2.com  node03


## cluster 구성.

node01에 luci 및 ricci 설치, node02, node03에 ricci 설치

node01의 luci web HA  구성창에서 node01, node02, node03에 대한 cluster node 생성.


## 각 노드의 cluster.conf 파일 설정내용

[root@node01.gfs2.com ~]# cat /etc/cluster/cluster.conf     ---> node02, node03 모두 동일

<?xml version="1.0"?>

<cluster config_version="3" name="cluster01">

        <clusternodes>

                <clusternode name="node01.gfs2.com" nodeid="1"/>

                <clusternode name="node02.gfs2.com" nodeid="2"/>

                <clusternode name="node03.gfs2.com" nodeid="3"/>

        </clusternodes>

<dlm plock_ownership="1" plock_rate_limit="0"/>

<gfs_controld plock_rate_limit="0"/>

</cluster>


## node01 에서 아래 작업으로 target device 생성 및 conf 파일 만듬.

service tgtd start

[root@node01.gfs2.com   ~]# tgtadm --lld iscsi --op new --mode target --tid 1 --targetname iqn.2012-02.net:target0

[root@node01.gfs2.com   ~]# tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/sdb

[root@node01.gfs2.com   ~]# tgtadm --lld iscsi --op bind --mode target --tid 1 --initiator-address ALL

[root@node01.gfs2.com   ~]# tgt-admin --dump > /etc/tgt/targets.conf


[root@node01.gfs2.com   ~]# cat /etc/tgt/targets.conf

default-driver iscsi


<target iqn.2012-02.net:target0>

        backing-store /dev/sdb

</target>


## node01, node02, node03 에서 위 target device를 virtual disk로 인식

[root@node01.gfs2.com   ~]# iscsiadm --mode discovery --type sendtargets --portal node01.gfs2.com

[root@node01.gfs2.com   ~]# iscsiadm --mode node --targetname iqn.2012-02.net:target0 --portal  node01.gfs2.com --login

[root@node02.gfs2.com   ~]# iscsiadm --mode discovery --type sendtargets --portal node01.gfs2.com

[root@node02.gfs2.com   ~]# iscsiadm --mode node --targetname iqn.2012-02.net:target0 --portal  node01.gfs2.com --login

[root@node03.gfs2.com   ~]# iscsiadm --mode discovery --type sendtargets --portal node01.gfs2.com

[root@node03.gfs2.com   ~]# iscsiadm --mode node --targetname iqn.2012-02.net:target0 --portal  node01.gfs2.com --login


## 각 노드에서 cluster lvm을 지원하도록 쉘에서 아래 명령.

[root@node01.gfs2.com   ~]# lvmconf --enable-cluster

[root@node02.gfs2.com   ~]# lvmconf --enable-cluster

[root@node03.gfs2.com   ~]# lvmconf --enable-cluster


## node01에서 파티션 및 gfs2 파일시스템 생성

[root@node01.gfs2.com   ~]# pvcreate /dev/sdc

[root@node01.gfs2.com   ~]# vgcreate lvm_1 /dev/sdc

[root@node01.gfs2.com   ~]# lvcreate -l FreePE값 -ndata1 lvm_1

[root@node01.gfs2.com   ~]# mkfs.gfs2 -j 3 -p lock_dlm -t cluster01:gfs01 /dev/lvm_1/data1


## 각 노드에서

mkdir /data1

mount -t gfs2 /dev/lvm_1/data1 /data1


위와 같이 모든 세팅을 마친 후 문제없이 gfs2 파일시스템으로 마운트하여 데이터를 담으면 모든 노드에서 동일하게 보입니다.

하지만 테스트로 데이터를 rsync를 통해 어느정도 담다보면 어느순간 문제가 발생하는데, 발생하게되면 /data1에 엑세스를 해도 쉘이 응답이 없고 2분 정도가 지나면 node01서버에서 아래와 같은 메시지와 함께 공유스토리지가 뻗어 버립니다.

네트워크단은 문제가 없는걸로 파악되었으며,

그래서 물리적 블럭디비이스의 문제로 의심되어 하드웨어적으로 완전히 다른 시스템을 구축하여 테스트하여도 일정기간 테스트를 하면 node01에서 응답이 없고, 2분 후쯤 아래메시지를 뻗고 먹통이 됩니다.

fdisk, /proc/scsi/scsi, df 로 보면 서버에서는 장치가 붙은걸로 보이며,

umount도 안되고, node01, node02, node03 모두 iscis 데몬을 내려야 되는 데몬이 멈춰 서버립니다.

모든 노드서버를 리부팅도 못하고 hang에 걸리는 상황이 연출 됩니다.



<커널 에러메시지>

INFO: task gfs2_quotad:1646 blocked for more than 120 seconds.

"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.

gfs2_quotad   D 0000000000000000     0  1646      2 0x00000080

 ffff880059159c20 0000000000000046 0000000000000000 ffffffffa0762d3d

 0000000000000000 ffff88005b538800 ffff880059159c50 ffffffffa07614e6

 ffff880059f7fa78 ffff880059159fd8 000000000000f4e8 ffff880059f7fa78

Call Trace:

 [<ffffffffa0762d3d>] ? dlm_put_lockspace+0x1d/0x40 [dlm]

 [<ffffffffa07614e6>] ? dlm_lock+0x96/0x1e0 [dlm]

 [<ffffffffa07945a0>] ? gfs2_glock_holder_wait+0x0/0x20 [gfs2]

 [<ffffffffa07945ae>] gfs2_glock_holder_wait+0xe/0x20 [gfs2]

 [<ffffffff814f493f>] __wait_on_bit+0x5f/0x90

 [<ffffffffa07945a0>] ? gfs2_glock_holder_wait+0x0/0x20 [gfs2]

 [<ffffffff814f49e8>] out_of_line_wait_on_bit+0x78/0x90

 [<ffffffff81090ad0>] ? wake_bit_function+0x0/0x50

 [<ffffffffa0795195>] gfs2_glock_wait+0x45/0x90 [gfs2]

 [<ffffffffa0797820>] gfs2_glock_nq+0x1d0/0x360 [gfs2]

 [<ffffffff8107ca1b>] ? try_to_del_timer_sync+0x7b/0xe0

 [<ffffffffa07b0b78>] gfs2_statfs_sync+0x58/0x1b0 [gfs2]

 [<ffffffff814f45ea>] ? schedule_timeout+0x19a/0x2e0

 [<ffffffffa07b0b70>] ? gfs2_statfs_sync+0x50/0x1b0 [gfs2]

 [<ffffffffa07a8bb7>] quotad_check_timeo+0x57/0xb0 [gfs2]

 [<ffffffffa07a8e44>] gfs2_quotad+0x234/0x2b0 [gfs2]

 [<ffffffff81090a90>] ? autoremove_wake_function+0x0/0x40

 [<ffffffffa07a8c10>] ? gfs2_quotad+0x0/0x2b0 [gfs2]

 [<ffffffff81090726>] kthread+0x96/0xa0

 [<ffffffff8100c14a>] child_rip+0xa/0x20

 [<ffffffff81090690>] ? kthread+0x0/0xa0

 [<ffffffff8100c140>] ? child_rip+0x0/0x20


혹시 짐작이라도 가는게 있으면 알려주시면 감사하겠습니다.

다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼