Heartbeat Version2 with DRBD

DRBD + Heartbeat version2

OS = centos5

Kernel version = 2.6.9-55.EL

DRBD version = v0.7

Heartbeat version = v2

Cluster Nodes = 3

Apache service

=========================

Node1 = Active

– Disk = 8G

– Partition

       /dev/sdb1 = meta device  1024M

       /dev/sdb2 = resource

– IP address

       210.220.224.151

       210.220.224.153

Node2 = Passive

– Disk = 8G

– Partition

       /dev/sdb1 = meta device  1024M

       /dev/sdb2 = resource

– IP address

       210.220.224.152

       210.220.224.154

Mysql service

=========================

Node2 = Active

– Disk = 8G

– Partition

       /dev/sdb1 = meta device  1024M

       /dev/sdb2 = resource

– IP address

       210.220.224.152

       210.220.224.154

Node1 = Passive

– Disk = 8G

– Partition

       /dev/sdb1 = meta device  1024M

       /dev/sdb2 = resource

– IP address

       210.220.224.151

       210.220.224.153

Install Sequence

========================

1. DRBD

2. Kernel Module(DRBD)

3. Libnet

4. Heartbeat

     – heartbeat-pils

     – OpenIPMI / devel

     – openhpi  / devel

     – heartbeat-stonith

     – heartbeat

     – heartbeat-gui

Special Setting

=======================

1. Heartbeat GUI used.. = GUI를 이용하려면 hacluster 유저의 패스워드를 지정한다.

1. DRBD 설정

==============================================================================================

>>Node2 도 동일한 작업을 해주고, 마지막에 ‘rsc’자원을 ‘Primary’로 설정하면 된다.

   // #drbdsetup /dev/drbd1 primary –do-what-I-say

>>Node1

# vi /etc/drbd.conf

# ‘drbd0’ is the identifier of this drbd instance. You will need it to configure the resource

# in the CIB correctly. This name is arbitrary, but I chose to name it after the device node.

resource app {

  protocol C;

  incon-degr-cmd “echo ‘!DRBD! pri on incon-degr’ | wall ; sleep 60 ; halt -f”;

  startup {

    degr-wfc-timeout 120;    # 2 minutes.

  }

  disk {

    on-io-error   pass_on;

  }

  net {

    # TODO: Should these timeouts be relative to some heartbeat settings?

    # timeout       60;    #  6 seconds  (unit = 0.1 seconds)

    # connect-int   10;    # 10 seconds  (unit = 1 second)

    # ping-int      10;    # 10 seconds  (unit = 1 second)

    on-disconnect reconnect;

  }

  syncer {

    rate 100M;

    group 1;

    al-extents 257;

  }

  on Node1 {

    device     /dev/drbd0;

    disk       /dev/sdb2;

    address    210.220.224.151:7789;

    meta-disk  /dev/sdb1[0];

  }

  on Node2 {

    device     /dev/drbd0;

    disk       /dev/sdb2;

    address    210.220.224.152:7789;

    meta-disk  /dev/sdb1[0];

  }

}

resource rsc {

  protocol C;

  incon-degr-cmd “echo ‘!DRBD! pri on incon-degr’ | wall ; sleep 60 ; halt -f”;

  startup {

    degr-wfc-timeout 120;    # 2 minutes.

  }

  disk {

    on-io-error   pass_on;

  }

  net {

    # TODO: Should these timeouts be relative to some heartbeat settings?

    # timeout       60;    #  6 seconds  (unit = 0.1 seconds)

    # connect-int   10;    # 10 seconds  (unit = 1 second)

    # ping-int      10;    # 10 seconds  (unit = 1 second)

    on-disconnect reconnect;

  }

  syncer {

    rate 100M;

    group 1;

    al-extents 257;

  }

  on Node1 {

    device     /dev/drbd1;

    disk       /dev/sdc2;

    address    210.220.224.151:7788;

    meta-disk  /dev/sdc1[0];

  }

  on Node2 {

    device     /dev/drbd1;

    disk       /dev/sdc2;

    address    210.220.224.152:7788;

    meta-disk  /dev/sdc1[0];

  }

}

  # drbdadm -d adjust app

drbdsetup /dev/drbd0 disk /dev/sdb2 /dev/sdb1 1 –on-io-error=detach

drbdsetup /dev/drbd0 syncer –rate=60M –group=1 –al-extents=257

drbdsetup /dev/drbd0 net 210.220.224.152:7789 210.220.224.151:7789 C

# drbdadm -d adjust rsc

# drbd adjust app

# drbd adjust rsc

# drbdsetup /dev/drbd0 primary –do-what-I-say

version: 0.7.23 (api:79/proto:74)

SVN Revision: 2686 build by buildcentos@build-i386, 2007-05-23 09:30:50

0: cs:Connected st:Secondary/Primary ld:Consistent  

    ns:1216 nr:39260 dw:40476 dr:9845 al:6 bm:2355 lo:0 pe:0 ua:0 ap:0

1: cs:Connected st:Primary/Secondary ld:Consistent  

    ns:210200 nr:4524 dw:214724 dr:70572 al:83 bm:1200 lo:0 pe:0 ua:0 ap:0  

2. 파일시스템 생성 및 Apache 설치

==============================================================================================

>>Node2 에서는 ‘drbd1’에 파일시스템을 생성하고 Mysql을 설치하면 된다.

>>Node1

# mkfs -j /dev/drbd0

mke2fs 1.35 (28-Feb-2004)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

922944 inodes, 1845466 blocks

92273 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=1891631104

57 block groups

32768 blocks per group, 32768 fragments per group

16192 inodes per group

Superblock backups stored on blocks:

        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Writing inode tables: done                            

Creating journal (8192 blocks): done

Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 24 mounts or

180 days, whichever comes first.  Use tune2fs -c or -i to override.

# tune2fs -c -1 -i 0 /dev/drbd0

tune2fs 1.35 (28-Feb-2004)

Setting maximal mount count to -1

Setting interval between check 0 seconds

# mkdir /APP

# mount /dev/drbd0 /APP

# cd /SRC/httpd-2.0.59

# vi conf

   ./configure –prefix=/APP/apache \\

    –enable-modules=so \\

    –enable-so \\

    –enable-rule=SHARED_CODE \\

    –enable-file-cache \\

    –enable-cache \\

    –enable-disk-cache \\

    –enable-headers \\

    –enable-mods-shared=most

  # sh conf

  # make && make install

  

3. Heartbeat Version 2 설정

==============================================================================================

>>Node1 & Node2 동일하게 설정.

# cp /usr/share/doc/heartbeat-2.1.2/authkeys /etc/ha.d/

# cp /usr/share/doc/heartbeat-2.1.2/ha.cf /etc/ha.d/

# vi /etc/ha.d/ha.cf

  debugfile /var/log/ha-debug

  logfile /var/log/ha-log

  logfacility     local0

  keepalive 2

  deadtime 30

  udpport 694

  ucast eth0 210.220.224.152

  auto_failback off

  node    Node1

  node    Node2

  apiauth stonithd uid=root

  respawn root    /usr/lib/heartbeat/stonithd

  apiauth cibmon uid=hacluster

  respawn hacluster       /usr/lib/heartbeat/cibmon -d

  crm on

# vi /etc/ha.d/authkeys

auth 1

1  crc

# chmod 600 /etc/ha.d/authkeys

  

4. HA GUI를 통한 Configuration

==============================================================================================

>>Node1

// ‘X 환경에서 실행한다.’

// Node1 + Node2 : # service heartbeat start

Node1    /RSC    Mysql

             /DRBD1

             210.220.224.154

Node2    /APP    Apache

             /DRBD0

             210.220.224.153

          

# hb_gui &

최종 셋팅

********************************************************************************************

  + linux-ha

    + Nodes

      + Node2

      + Node1

      

    + Resources

      + group_APP                         resouce_stickness ‘0’

        – resource_IP1

            ip  210.220.224.153

            nic eth0

        

        – resource_DRBD0

            1   app

            

        – resource_FS_APP

            fstype    ext3

            device    /dev/drbd0

            directory /APP

        

        – resource_Apache

            configfile  /APP/apache/conf/httpd.conf                    

            httpd       /APP/apache/bin/httpd

            

            monitor interval(10) timeout(20) startdelay(0) disabled(false) role  prereq on fail

      

      

      + group_RSC                         resouce_stickness ‘0’

        – resource_IP2

            ip  210.220.224.154

            nic eth0

        – resource_DRBD1

            1   rsc

            

        – resource_FS_RSC

            fstype    ext3

            device    /dev/drbd1

            directory /RSC

        

        – resource_Mysql

            binary    /RSC/mysql/bin/mysqld_safe

            conffig   /etc/my.cnf

            user      mysql

            group     mysql

            

            monitor interval(10) timeout(20) startdelay(0) disabled(false) role  prereq  on fail

    + Constraints

      + Place

        – place_Node1               #uname eq Node2

        – place_Node2            #uname eq Node1

********************************************************************************************

>> 아파치 자원을 ‘LSB’타입으로 실행하고자 하는 경우..

‘group_APP’의 ‘resouce_Apache’는 ‘ocf’타입으로 설정했으며, 이것을 ‘lsb’타입으로 사용하고자

  할 경우에는 다음과 같이 한다.

  1. 아파치의 ‘LSB’타입 스크립트로 아파치 프로세스가 정상적으로 동작하는지 확인한다.

  

    # cp /APP/apache/bin/apachectl /etc/init.d/httpd

    # service httpd start

    # service httpd status

    

  2. 다음의 순서로 아파치관련 자원을 ‘LSB’타입으로 생성한다.

  

  + ‘Add New Item’

  

    – Resource ID : resource_Apache

    – Belong to Group : group_APP

    – Type

        httpd       lsb       httpd                    

    

    //이 스크립트의 위치는 ‘/etc/init.d/’ 디렉토리 안에 존재해야 한다.

    

  3. ‘hb_gui’ 화면에서 위에서 생성한 자원을 동작시킨다.

  

  4. 정상적으로 아파치가 동작하면 아파치 프로세스를 모니터링하는 ‘Operations’를 추가한다.

  

      # vi /APP/apache/conf/httpd.conf

      …

        

            SetHandler server-status

            Order allow,deny

            Allow from all

              

  

    – resource_Apache

      – Operations

      

        Name : Monitor

        Interval : 10

        Timeout  : 15

        Disabled : false

      

      

        Name      Description   Interval    Timeout   Start Delay   Disabled    Role    Prereq    On Fail

        =================================================================================================

        Monitor                    10         15          0           false    Started                          

        

  5. 모니터링 관련 ‘Operations’를 추가한 뒤에 아파치 서비스를 중지시키고 지정된 시간내에 아파치 프로세스가

     정상적으로 재시작 되는지 확인한다.

>> Mysql 자원을 ‘LSB’타입으로 실행하고자 하는 경우..

‘group_RSC’의 ‘resouce_Mysql’는 ‘ocf’타입으로 설정했으며, 이것을 ‘lsb’타입으로 사용하고자

  할 경우에는 다음과 같이 한다.

  1. Mysql의 ‘LSB’타입 스크립트로 아파치 프로세스가 정상적으로 동작하는지 확인한다.

  

    # cp /RSC/mysql/share/mysql/mysql.server /etc/init.d/mysqld

    # service mysqld start

    # service mysqld status

    

  2. 다음의 순서로 Mysql관련 자원을 ‘LSB’타입으로 생성한다.

  

  + ‘Add New Item’

  

    – Resource ID : resource_Mysql

    – Belong to Group : group_RSC

    – Type

        mysqld       lsb       mysqld                    

    

    //이 스크립트의 위치는 ‘/etc/init.d/’ 디렉토리 안에 존재해야 한다.

    

  3. ‘hb_gui’ 화면에서 위에서 생성한 자원을 동작시킨다.

  

  4. 정상적으로 Mysql이 동작하면 아파치 프로세스를 모니터링하는 ‘Operations’를 추가한다.

  

    – resource_Mysql

      – Operations

      

        Name : Monitor

        Interval : 10

        Timeout  : 15

        Disabled : false

      

      

        Name      Description   Interval    Timeout   Start Delay   Disabled    Role    Prereq    On Fail

        =================================================================================================

        Monitor                    10         15          0           false    Started                          

        

  5. 모니터링 관련 ‘Operations’를 추가한 뒤에 아파치 서비스를 중지시키고 지정된 시간내에 Mysql 프로세스가 정상적으로 재시작 되는지 확인한다.

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

페이스북/트위트/구글 계정으로 댓글 가능합니다.