본문 바로가기

기술자료/기술운영자료

2대 이상의 웹서버 운용 시 웹소스 동기화에 대한 한 방안 - GFS+DRBD Active/Active 구성






소규모 시스템에서 2대 이상의 웹서버 구성 시 고민될 문제는

스토리지 도입 여부, 비용문제로 인한 즉 웹소스 동기화에 대한 여부가 많은 것 같습니다.


예전에는 구성 상담 시 웹소스 변경 시 일반적으로 lsync, rsync 등을 이용하여 

주기적인 스케쥴 설정을 사용하시길.. 

권해드린 경우가 많은데 과거 테스트를 진행 했던 DRBD에서 Active/Active 구성이

가능 하다는 것을 알게되어 이렇게 테스트를 진행해 보게 되었습니다.


DRBD를 이용하면 별도의 웹소스 동기화를 위한 고민이 필요 없을 뿐더러

Active/Active 구성으로, 장애로 인한 Primary/Secondary 우선순위가 깨졌을 시 발생할 수 있는

Split brain 문제에서도 어느정도 여유 있는 대처가 가능할 것 같다는 생각 입니다.(비용 절감의 문제)


일반적인 DRBD 구성에서는 heartbeat 등을 이용한 failover 구성 등이 필요 하지만

Active/Active 구성이기에 설정 또한 간편한 편,




준비물 : 서버 2대

테스트 환경 : HP DL120G6 * 2EA, OS : CentOS 6.7 64bit, httpd yum installed

node1 : 192.168.2.42

node2 : 192.168.2.75


최초 OS install 시 DRBD에서 사용 할 공간은 별도 파티셔닝 하지 않고, OS 부분만 설치 진행 합니다.





vi /etc/hosts

192.168.2.44  node1

192.168.2.75  node2



drbd 설치



(양 노드 함께 실행)

rpm -ivh http://elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm


yum install -y kmod-drbd84 drbd84-utils


modprobe drbd minor_count=1



vi /etc/drbd.d/drbd_disk1.res

 resource drbd_disk1 {

 protocol C;

 startup {

 become-primary-on both;

 wfc-timeout 60;

 outdated-wfc-timeout 40;

 degr-wfc-timeout 60;

 }

 net {

 allow-two-primaries;

 after-sb-0pri discard-zero-changes; 

 after-sb-1pri discard-secondary; 

 after-sb-2pri disconnect; 

 cram-hmac-alg sha1;

 shared-secret sync_disk;

 }

 disk {

 fencing resource-and-stonith;

 }

 handlers {

 fence-peer              "/usr/lib/drbd/crm-fence-peer.sh";

 after-resync-target     "/usr/lib/drbd/crm-unfence-peer.sh";

 }

 syncer {

 rate 100M;

 verify-alg sha1;

 }

 on node1 {

 device /dev/drbd0;

 disk /dev/sda4;

 address 192.168.2.42:7789;

 meta-disk internal;

 }

 on node2 {

 device /dev/drbd0;

 disk /dev/sda4;

 address 192.168.2.75:7789;

 meta-disk internal;

 }

}





(양 노드 함께 실행)

fdisk를 이용해서 생성하지 않은 영역을 할당 (/dev/sda4)








(양 노드 함께 실행)

drbd meta data 생성

drbdadm create-md drbd_disk1



 




(양 노드 함께 실행)

/etc/init.d/drbd start



 





(node1에서)

drbdadm primary --force drbd_disk1



(양 노드 함께 실행)

sync상태 확인

drbd-overview



 




sync 완료 후 node2를 primary로 변경

drbdadm primary drbd_disk1









Cluster + GFS2 설치



(양 노드 함께 실행)

rpm -ivh http://mirror.premi.st/epel/6/i386/epel-release-6-8.noarch.rpm


yum groupinstall -y "High Availability" "Resilient Storage" "High Availability Management"





(양 노드 함께)

vi /etc/cluster/cluster.conf

 <?xml version="1.0"?>

<cluster config_version="1" name="drbd-cluster">

  <rm log_level="4"/>

  <fence_daemon clean_start="1" post_fail_delay="0" post_join_delay="3"/>

  <clusternodes>

    <clusternode name="node1" nodeid="1" votes="1">

      <fence>

 <method name="2">

          <device name="LastResortNode01"/>

        </method>

      </fence>

    </clusternode>

    <clusternode name="node2" nodeid="2" votes="1">

      <fence>

 <method name="2">

          <device name="LastResortNode02"/>

        </method>

      </fence>

    </clusternode>

  </clusternodes>

  <cman expected_votes="1" two_node="1"/>

  <fencedevices>

    <fencedevice agent="fence_manual" name="LastResortNode01" nodename="node1"/>

    <fencedevice agent="fence_manual" name="LastResortNode02" nodename="node2"/>

  </fencedevices>

  <totem consensus="4800" join="60" token="10000" token_retransmits_before_loss_const="20"/>

</cluster>



(양 노드 함께 실행)

cluster manager 실행


/etc/init.d/cman start


chkconfig --level 2345 cman on




(node1에서)

GFS2 파일시스템 포맷


mkfs.gfs2 -p lock_dlm -t drbd-cluster:drbd_disk1 /dev/drbd0 -j 2



(양 node에서)

mkdir /storage

mount.gfs2 -o noatime,nodiratime /dev/drbd0 /storage



 



drbd-overview








이후 아파치를 설치하여 home directory를 /storage로 변경하여 웹소스를 업로드 하면 

실시간으로 동기화 되는 것을 확인할 수 있습니다.