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 프로세스가 정상적으로 재시작 되는지 확인한다.
