°í°¡¿ë¼º

¾ÆÁÖ Áß¿äÇÑ »ó¾÷ÀûÀÎ ÇÁ·Î±×·¥µéÀÌ ÀÎÅͳÝÀ¸·Î ÀüȯÇÏ°Ô µÇ¸é¼­ °í°¡¿ë¼ºÀÇ ¼­ºñ½º¸¦ Á¦°øÇÏ´Â °ÍÀÌ ¾ÆÁÖ Áß¿äÇØÁö°í ÀÖ´Ù. Ŭ·¯½ºÅ͸µ ½Ã½ºÅÛÀ» ±¸¼ºÇÏ´Â ÇѰ¡Áö ÀÌÁ¡Àº Çϵå¿þ¾î¿Í ¼ÒÇÁÆ®¿þ¾î¿¡ ¿©À¯ºÐÀÌ »ý±ä´Ù´Â °ÍÀÌ´Ù. ³ëµå³ª ´ë¸óÀÇ Àå¾Ö¸¦ °¨ÁöÇØ ±× Áï½Ã ½Ã½ºÅÛÀ» À籸¼ºÇؼ­ ÀÛ¾÷ ºÎÇϸ¦ Ŭ·¯½ºÅÍÀÇ ´Ù¸¥ ³ëµå·Î ÀÌÀüÇÏ´Â ¹æ½ÄÀ¸·Î °í°¡¿ë¼ºÀÇ ¼­ºñ½º¸¦ Á¦°øÇÒ ¼ö ÀÖ´Ù.

½ÇÁ¦·Î °í°¡¿ë¼ºÀº ¾ÆÁÖ ±¤¹üÀ§ÇÑ ºÐ¾ßÀÌ´Ù. ÈǸ¢ÇÑ °í°¡¿ë¼º ½Ã½ºÅÛÀº ½Å·Ú¼ºÀÖ´Â ±×·ì°£ Åë½Å ¼­ºê ½Ã½ºÅÛ, ¸â¹ö½± °ü¸®, quoram ¼­ºê ½Ã½ºÅÛ, µ¿½Ã Á¦¾î ¼­ºê ½Ã½ºÅÛµîÀ¸·Î ±¸¼ºµÉ °ÍÀÌ´Ù. ¿©·¯ °¡Áö ¹æ¹ýÀÌ ÀÖÀ» ¼ö ÀÖÁö¸¸ ¿ì¸®´Â ÇöÀç ¸Å¿ì °¡¿ë¼ºÀÌ ³ôÀº LVS ½Ã½ºÅÛÀ» ±¸ÃàÇϱâ À§ÇØ ÇöÀç Á¸ÀçÇÏ´Â ¼ÒÇÁÆ®¿þ¾î¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. °í°¡¿ë¼ºÀÇ LVS ½Ã½ºÅÛÀ» ±¸¼ºÇÏ´Â µ¥´Â ¿©·¯ °¡Áö ¹æ¹ýÀÌ ÀÖÀ»¼ö Àִµ¥ ÀÌ ±ÛÀ» Àд ºÐµé¸¸ÀÇ ¹æ¹ýÀÌ ÀÖ´Â °æ¿ì¿¡´Â ¾Ë·ÁÁÖ¸é ÁÁ°Ú´Ù. ´ÙÀ½¿¡ µÎ°¡Áö ÇØ°áÃ¥À» ¼Ò°³Çϴµ¥ Âü°í·Î¸¸ º¸ÀÚ.

 

1. mon+heartbeat+fake+coda ÇØ°áÃ¥

"mon", "heartbeat" , "fake" , "coda" ¼ÒÇÁÆ®¿þ¾î¸¦ ÀÌ¿ëÇØ °í°¡¿ë¼ºÀÇ °¡»ó ¼­¹ö¸¦ ±¸ÃàÇÒ ¼ö ÀÖ´Ù. "mon"Àº ³×Æ®¿÷ ¼­ºñ½ºÀÇ °¡¿ë¼º°ú ¼­¹ö ³ëµå¸¦ ¸ð´ÏÅ͸µÇϴµ¥ »ç¿ëÇÏ´Â ¹ü¿ë ÀÚ¿ø ¸ð´ÏÅ͸µ ½Ã½ºÅÛÀÌ´Ù. "hearbeat"´Â ½Ã¸®¾ó ¶óÀΰú UDP ½ÅÈ£(hearbeat)¸¦ ÀÌ¿ëÇØ µÎ ³ëµå°£¿¡ ¼­¹öÀÇ »óȲÀ» È®ÀÎÇÑ´Ù. fake´Â ARP ¼ÓÀ̱â(spoofing)À» ÀÌ¿ëÇØ IP¸¦ ÀÌÀüÇÏ´Â ¼ÒÇÁÆ®¿þ¾îÀÌ´Ù. ´ÙÀ½ÀÇ ±×¸²À» ÅëÇØ ¸®´ª½º °¡»ó ¼­¹öÀÇ °í°¡¼ºÀ» È®ÀÎÇØº¸ÀÚ.

 

¼­¹öÀÇ Àå¾Ö´Â ´ÙÀ½°ú °°ÀÌ Á¦¾î°¡ µÈ´Ù: mon ´ë¸óÀÌ ºÎÇϺл꼭¹ö¿¡¼­ ¼öÇàµÇ¸é¼­ Ŭ·¯½ºÅÍÀÇ ¼­ºñ½º ´ë¸ó°ú ¼­¹ö ³ëµå¸¦ ¸ð´ÏÅ͸µÇÑ´Ù. fping.monitor´Â ¸Å t Ãʸ¶´Ù ¼­¹ö ³ëµå°¡ »ì¾ÆÀÖ´ÂÁö °¨ÁöÇϵµ·Ï ±¸¼ºÇϰí, °ü·ÃµÈ ¼­ºñ½º ¸ð´ÏÅ͸¦ ÅëÇØ ¸Å mÃʸ¶´Ù ³ëµåÀÇ ¼­ºñ½º ´ë¸óÀ» °¨ÁöÇϵµ·Ï ±¸¼ºÀ» ÇÑ´Ù. ¿¹¸¦ µé¾î http.monitor´Â http ¼­ºñ½º¸¦ Á¡°ËÇϴµ¥ »ç¿ëÇÒ ¼ö ÀÖ°í ftp ¼­ºñ½º¿¡´Â ftp.monitor ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¼­ºñ½º ³ëµå³ª ´ë¸óÀÇ »óÅÂ(up/down)¸¦ °¨ÁöÇØ¼­ ¸®´ª½º °¡»ó ¼­¹ö Å×ÀÌºí¿¡ ±ÔÄ¢À» Ãß°¡, »èÁ¦ÇÏ´Â °æº¸¸¦ ÀÛ¼ºÇÑ´Ù. ±×·¡¼­ ºÎÇϺл꼭¹ö¿¡¼­ ¼­ºñ½º ´ë¸óÀ̳ª ¼­ºñ½ºÀÇ Àå¾Ö¸¦ ÀÚµ¿À¸·Î ±â·ÏÇϰí Àå¾Ö°¡ ȸº¹µÇ¾úÀ» °æ¿ì ¼­ºñ½º¸¦ ¿ø»óÅ·Πµ¹¸± ¼ö ÀÖ´Ù.

ÀÌÁ¦, ºÎÇϺл꼭¹ö°¡ Àüü ½Ã½ºÅÛ¿¡¼­ À¯ÀÏÇÑ Àå¾Ö ÁöÁ¡(single failure point)ÀÌ µÈ´Ù. ÁÖºÎÇϺл꼭¹öÀÇ Àå¾Ö¸¦ °¨Ãß±â À§ÇØ ¹é¾÷¿ë ºÎÇϺл꼭¹ö¸¦ ¼³Á¤ÇؾßÇÑ´Ù. "fake" ¼ÒÇÁÆ®¿þ¾î¸¦ ÀÌ¿ëÇØ ºÎÇϺл꼭¹ö¿¡¼­ Àå¾Ö°¡ ¹ß»ýÇÒ °æ¿ì ºÎÇϺл꼭¹öÀÇ IP ÁÖ¼Ò¸¦ ¹é¾÷ ¼­¹ö·Î ÀÌÀüÇÑ´Ù. "heatbeat" Äڵ带 ÀÌ¿ë ºÎÇϺл꼭¹öÀÇ »óŸ¦ °¨ÁöÇÏ°í ¹é¾÷¼­¹ö¿¡¼­ "fake" ¸¦ °¡µ¿½ÃŰ°Å³ª ÁßÁö½Ãų ¼ö ÀÖ´Ù. ÁÖ¼­¹ö¿Í ¹é¾÷¼­¹ö¿¡¼­ µÎ °³ÀÇ heatbeat ´ë¸óÀ» °¡µ¿½Ã۸ç, ÁÖ±âÀûÀ¸·Î ½Ã¸®¾ó ¶óÀÎÀ» ÅëÇØ ¼­·Î°¡ "³ª »ì¾ÆÀÖ¾î¿ä~"¶ó´Â ¸Þ½ÃÁö¸¦ ÁÖ°í ¹Þ´Â´Ù. ¹é¾÷¼­¹ö¿¡¼­ Á¤ÀÇµÈ ½Ã°£µ¿¾È ÁÖ¼­¹ö¿¡¼­ "³ª »ì¾ÆÀÖ¾î¿ä"¶ó´Â ¸Þ½ÃÁö¸¦ µèÁö ¸øÇϸé, ºÎÇÏ ºÐ»ê ¼­ºñ½º¸¦ °è¼Ó Á¦°øÇϱâ À§ÇØ °¡»ó IP ÁÖ¼Ò¸¦ ÀÌÀüÇϵµ·Ï fake¸¦ Ȱ¼ºÈ­½ÃŲ´Ù. ³ªÁß¿¡ ´Ù½Ã "³ª »ì¾ÆÀÖ¾î¿ä"¶õ ¸Þ½ÃÁö¸¦ ¹ÞÀ¸¸é °¡»ó IP ÁÖ¼Ò¸¦ ÇØÁ¦Çϱâ À§ÇØ fake¸¦ ÁßÁö½ÃŲ´Ù.

±×·¸Áö¸¸, ÁÖºÎÇϺл꼭¹öÀÇ Àå¾ÖÀÌÀüÀ̳ª IP ÀÌÀüÀ» ÇÏ°Ô µÇ¸é ÇØ½¬ Å×À̺íÀÇ ÀÌ¹Ì ¼º¸³µÈ Á¢¼Ó¿¡ ´ëÇØ¼­´Â ¼öÇàÀ» ÇÏÁö ¸øÇÏ°Ô µÇ¸ç Ŭ¶óÀ̾ðÆ®ÂÊ¿¡¼­ ¿ä±¸¸¦ ´Ù½Ã º¸³»¾ßÇÑ´Ù.

Coda´Â Àå¾Ö-°¨³» ºÐ»ê ÆÄÀÏ ½Ã½ºÅÛÀ¸·Î Andrew ÆÄÀÏ ½Ã½ºÅÛÀÇ ÀÚ¼ÕÀ̶ó°í º¼ ¼ö ÀÖ´Ù. (** Andrew file system Àº IBM¿¡¼­ ³ª¿Â ÆÄÀÏ ½Ã½ºÅÛÀÇ ÇÑ Á¾·ùÀÔ´Ï´Ù. ÄÚ´Ù ÆÄÀϽýºÅÛÀÇ °æ¿ì ÇöÀç °è¼Ó °³¹ßÀÌ µÇ°í ÀÖÀ¸¹Ç·Î ¾ÈÁ¤¼º¿¡ ´ëÇØ¼­´Â È®½ÅÇϱⰡ Èûµé °Í °°½À´Ï´Ù.) ¼­¹öÀÇ ³»¿ëÀ» ÄÚ´Ù ÆÄÀÏ ½Ã½ºÅÛ¿¡ ÀúÀåÇÏ¸é °¡¿ë¼ºµµ ³ô¾ÆÁö°í °ü¸®Çϱ⿡µµ Æí¸®ÇØÁú °ÍÀÌ´Ù.

(** ¿ë¾î°¡ ¸¹ÀÌ Çò°¥¸± °ÍÀÌ´Ù. Fault-tolerence ¶õ Àå¾Ö°¨³»¶ó°í Çϸç Çϵå¿þ¾îÀÇ Æ¯Á¤ÇÑ ºÎºÐ¿¡ Àå¾Ö°¡ »ý°Üµµ °è¼Ó ¼­ºñ½º¸¦ ÇÒ ¼ö ÀÖ´Â °ÍÀ» ¸»ÇÑ´Ù. º¸Åë ÇÖ½º¿Ò µð½ºÅ©, ÇÖ½º¿Ò ³Ã°¢ÆÒ, ÇÖ½º¿Ò ÆÄ¿ö µîÀÌ ÀÌ¿¡ ÇØ´çÇϸç Redundant ¿ä¼ÒÀÌ´Ù. Failover¶õ Àå¾Ö±Øº¹À̶ó°í Çϸç Àå¾Ö°¡ »ý±æ °æ¿ì ±× Àå¾Ö¸¦ ±Øº¹ÇÏ°í ¼­ºñ½º¸¦ °è¼Ó ÇÏ´Â °ÍÀÌ´Ù. Ŭ·¯½ºÅ͸µ ±¸¼ºÀÌ Àå¾Ö±Øº¹À» À§ÇÑ ¹æ¹ýÁßÀÇ ÇϳªÀÌ´Ù.)

¼³Á¤ ¿¹

´ÙÀ½ÀÇ ¿¹´Â ´ÙÀÌ·ºÆ® ¶ó¿ìÆÃÀ» ÀÌ¿ëÇÑ ¸Å¿ì °¡¿ë¼º ³ôÀº °¡»ó À¥¼­¹ö¸¦ ¼³Á¤ÇÑ °æ¿ìÀÌ´Ù.

½ÇÁ¦ ¼­¹öÀÇ Àå¾Ö±Øº¹

"mon"À» ÀÌ¿ëÇØ Ŭ·¯½ºÅÍ¿¡¼­ ¼­ºñ½º ´ë¸ó°ú ¼­¹ö ³ëµå¸¦ ¸ð´ÏÅ͸µÇÑ´Ù. ¿¹¸¦ µé¾î fping.monitor´Â ¼­¹ö ³ëµå¸¦ ¸ð´ÏÅ͸µÇϴµ¥ »ç¿ëÇϸç, http ¼­ºñ½º¸¦ Á¡°ËÇϱâ À§ÇØ http.monitor¸¦ »ç¿ëÇÒ ¼ö ÀÖ°í ftp ¼­ºñ½º¿¡´Â ftp.monitor¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¼­¹ö ³ëµå³ª ´ë¸óÀÌ down/up µÇ¾úÀ» °æ¿ì °¡»ó ¼­¹ö Å×À̺íÀÇ ±ÔÄ¢À» Ãß°¡, »èÁ¦ÇÏ´Â °æ°í¸¦ ÀÛ¼ºÇؾßÇÑ´Ù. lvs.alert ¶ó´Â ´ÙÀ½ÀÇ ¿¹Á¦´Â °¡»ó ¼­ºñ½º(IP:Port)¿Í ½ÇÁ¦ ¼­¹öÀÇ ¼­ºñ½º Æ÷Æ®¸¦ ÀÎÀÚ(parameter)·Î ¹Þ´Â´Ù.

#!/usr/bin/perl 
# 
# lvs.alert - Linux Virtual Server alert for mon 
# 
# It can be activated by mon to remove a real server when the 
# service is down, or add the server when the service is up. 
# 
# 
use Getopt::Std;
getopts ("s:g:h:t:l:P:V:R:W:F:u");
 
$ipvsadm = "/sbin/ipvsadm";
$protocol = $opt_P;
$virtual_service = $opt_V; 
$remote = $opt_R;
 
if ($opt_u) {
    $weight = $opt_W;
    if ($opt_F eq "nat") {
        $forwarding = "-m";
    } elsif ($opt_F eq "tun") {
        $forwarding = "-i";
    } else {
         $forwarding = "-g";
    }
 
    if ($protocol eq "tcp") {
        system("$ipvsadm -a -t $virtual_service -r $remote -w $weight $forwarding");
    } else {
        system("$ipvsadm -a -u $virtual_service -r $remote -w $weight $forwarding");
    }
} else { 
    if ($protocol eq "tcp") {
        system("$ipvsadm -d -t $virtual_service -r $remote");
    } else {
        system("$ipvsadm -d -u $virtual_service -r $remote");
    }
};

lvs.alert ÆÄÀÏÀº /usr/lib/mon/alert.d µð·ºÅ丮¿¡ µÐ´Ù. mon ¼³Á¤ ÆÄÀÏ(/etc/mon/mon.cf ¶Ç´Â /etc/mon.cf)À» ÀÌ¿ëÇØ Ŭ·¯½ºÅÍ¿¡¼­ http ¼­ºñ½º¿Í ¼­¹ö¸¦ ¸ð´ÏÅ͸µÇϵµ·Ï ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ ¿¹¸¦ º¸ÀÚ.

#
# The mon.cf file
#
#
# global options
#
cfbasedir   = /etc/mon 
alertdir   = /usr/lib/mon/alert.d
mondir     = /usr/lib/mon/mon.d
maxprocs    = 20
histlength = 100
randstart = 30s
 
#
# group definitions (hostnames or IP addresses)
#
hostgroup www1 www1.domain.com 
 
hostgroup www2 www2.domain.com
 
#
# Web server 1
# 
watch www1
    service http 
        interval 10s 
        monitor http.monitor 
        period wd {Sun-Sat} 
            alert mail.alert wensong 
            upalert mail.alert wensong 
            alert lvs.alert -P tcp -V 10.0.0.3:80 -R 192.168.0.1 -W 5 -F dr
            upalert lvs.alert -P tcp -V 10.0.0.3:80 -R 192.168.0.1 -W 5 -F dr
 
#
# Web server 2
# 
watch www2 
    service http 
        interval 10s 
        monitor http.monitor 
        period wd {Sun-Sat} 
            alert mail.alert wensong 
            upalert mail.alert wensong 
            alert lvs.alert -P tcp -V 10.0.0.3:80 -R 192.168.0.2 -W 5 -F dr
            upalert lvs.alert -P tcp -V 10.0.0.3:80 -R 192.168.0.2 -W 5 -F dr

LVS/NAT¿¡¼­ ¸ñÀûÁö Æ÷Æ®°¡ ´Ù¸£¸é "lvs.alert -V 10.0.0.3:80 -R 192.168.0.3:8080" ¿Í °°Àº ½ÄÀ¸·Î lvs.alertÀÇ ¸Å°³º¯¼ö¸¦ ¼³Á¤ÇؾßÇÑ´Ù´Â °ÍÀ» ±â¾ïÇÏÀÚ.

ÀÌÁ¦ ºÎÇϺл꼭¹ö¿¡¼­ ÀÚµ¿À¸·Î ¼­ºñ½º ´ë¸óÀ̳ª ¼­¹öÀÇ Àå¾Ö¸¦ °¨Ãâ ¼ö ÀÖ°í ´Ù½Ã Á¤»óÀûÀ¸·Î °¡µ¿µÇ´Â °æ¿ì ¿ø»óÅ·Πȸº¹ÇÒ ¼ö ÀÖ´Ù.

ºÎÇϺл꼭¹öÀÇ Àå¾Ö±Øº¹

ºÎÇϺл꼭¹ö°¡ À¯ÀÏÇÑ Àå¾Ö ÁöÁ¡(single failure point)ÀÌ µÇ´Â °ÍÀ» ¹æÁöÇϱâ À§ÇØ ¹é¾÷¿ë ºÎÇϺл꼭¹ö¸¦ ¼³Á¤ÇؾßÇϰí ÁÖ±âÀûÀ¸·Î ¼­·Î »ì¾Æ ÀÖ´Ù´Â ½ÅÈ£¸¦ ÁÖ°í¹Þµµ·Ï ÇØ¾ßÇÑ´Ù. heartbeat ÆÐŰÁö¿¡ µé¾îÀÖ´Â GettingStarted ¹®¼­¸¦ Àо±â¸¦ ¹Ù¶ó¸ç 2 ³ëµåÀÇ heartbeating ½Ã½ºÅÛ ¼³Á¤Àº °£´ÜÇÑ ÆíÀÌ´Ù.

¿¹¸¦ µé¾î, ´ÙÀ½°ú °°Àº ÁÖ¼Ò¸¦ °¡Áø µÎ °³ÀÇ ºÎÇϺл꼭¹ö°¡ ÀÖ´Ù°í °¡Á¤Çغ¸ÀÚ.

lvs1.domain.com (primary)

10.0.0.1

lvs2.domain.com (backup)

10.0.0.2

www.domain.com (VIP)

10.0.0.3

 

lvs1.domain.com °ú lvs2.domain.com ¿¡ heartbeat¸¦ ¼³Ä¡ÇÑÈÄ ´ÙÀ½°ú °°ÀÌ °£´ÜÇÏ°Ô /etc/hd.d/ha.conf¸¦ ¸¸µé¸é µÈ´Ù.

#
#       keepalive: how many seconds between heartbeats
#
keepalive 2
#
#       deadtime: seconds-to-declare-host-dead
#
deadtime 10
#       hopfudge maximum hop count minus number of nodes in config
hopfudge 1
#
#       What UDP port to use for udp or ppp-udp communication?
#
udpport 1001
#       What interfaces to heartbeat over?
udp     eth0
#
#       Facility to use for syslog()/logger (alternative to log/debugfile)
#
logfacility     local0
#
#       Tell what machines are in the cluster
#       node    nodename ...    -- must match uname -n
node    lvs1.domain.com
node    lvs2.domain.com

 

/etc/ha.d/haresources ÆÄÀÏÀº ´ÙÀ½°ú °°´Ù:

lvs1.domain.com 10.0.0.3 lvs mon

 

/etc/rc.d/init.d/lvs ´Â ´ÙÀ½°ú °°´Ù:

#!/bin/sh
 
#
# You probably want to set the path to include
# nothing but local filesystems.
#
PATH=/bin:/usr/bin:/sbin:/usr/sbin
export PATH
 
IPVSADM=/sbin/ipvsadm
 
case "$1" in
    start)
        if [ -x $IPVSADM ]
        then
            echo 1 > /proc/sys/net/ipv4/ip_forward
            $IPVSADM -A -t 10.0.0.3:80
            $IPVSADM -a -t 10.0.0.3:80 -r 192.168.0.1 -w 5 -g
            $IPVSADM -a -t 10.0.0.3:80 -r 192.168.0.2 -w 5 -g
        fi
        ;;
    stop)
        if [ -x $IPVSADM ]
        then
            $IPVSADM -C
        fi
        ;;
    *)
        echo "Usage: lvs {start|stop}"
        exit 1
esac
 
exit 0

 

ÃÖÁ¾ÀûÀ¸·Î ¸ðµç ÆÄÀÏÀÌ lvs1 °ú lvs2 ³ëµå¿¡ »ý¼ºµÇ¾ú´ÂÁö È®ÀÎÇÏ°í °¢ÀÚ È¯°æ¿¡ ¸Â°Ô ¼³Á¤À» º¯°æÇÑ´ÙÀ½ µÎ ³ëµå¿¡¼­ heartbeat ´ë¸óÀ» ½ÃÀÛÇÏÀÚ.

"fake" (IP takeover by Gratuitous Arp)´Â ÀÌ¹Ì heartbeat ÆÐŰÁö¿¡ Æ÷ÇԵǾî ÀÖÀ¸¹Ç·Î "fake"¸¦ º°µµ·Î ¼³Á¤ÇÒ ÇÊ¿ä´Â ¾ø´Ù. lvs1.domain.com ³ëµå¿¡ Àå¾Ö°¡ »ý°åÀ» °æ¿ì lvs2.domain.com¿¡¼­ lvs1.domain.com ÀÇ ¸ðµç haresoures¸¦ ÀÌÀü¹ÞÀ» °ÍÀÌ´Ù. ¿¹¸¦ µé¾î Gratuitous ARP¸¦ ÀÌ¿ë 10.0.0.3 ÁÖ¼Ò¸¦ ÀÌÀü¹Þ°í /etc/rc.d/init.d/lvs ¿Í /etc/rc.d/init.d/mon ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÒ °ÍÀÌ´Ù. lvs1.domain.comÀÌ µÇµ¹¾Æ¿Ã °æ¿ì lvs2 ´Â HA ÀÚ¿øÀ» ÇØÁ¦Çϰí lvs1¿¡¼­ ´Ù½Ã ±× ÀÚ¿øÀ» ÀÌÀü¹Þ´Â´Ù.

 

2. ldirectord+heartbeat ÇØ°áÃ¥

Jacob RiefÀÌ ÀÛ¼ºÇÑ ldirectord (Linux Director Daemon)´Â ½ÇÁ¦ ¼­¹öÀÇ ¼­ºñ½º¸¦ ¸ð´ÏÅ͸µÇÏ´Â stand-alone ´ë¸óÀ¸·Î ÇöÀç http¿Í https ¼­ºñ½º¸¦ Áö¿øÇÑ´Ù. ¼³Ä¡Çϱ⠰£ÆíÇϰí heartbeat ÄÚµå¿Í Àß ÀÛµ¿ÇÑ´Ù. ldirectord ÇÁ·Î±×·¥Àº ipvs tar ¾È¿¡ ÀÖ´Â contrib µð·ºÅ丮¿¡¼­ ãÀ» ¼ö ÀÖ´Ù. ¶Ç´Â °¡Àå ÃֽйöÀüÀÇ heartbeat CVS ÀúÀå¼Ò¸¦ È®ÀÎÇØº¸ÀÚ. ÀÌ¿¡ ´ëÇÑ ¸ðµç Á¤º¸´Â 'perldoc ldirectord'¸¦ º¸ÀÚ. ÈǸ¢ÇÑ ÇÁ·Î±×·¥À» ÀÛ¼ºÇØÁØ Jacob Rief¿¡ °¨»çÀÇ ¸¶À½À» ÀüÇÑ´Ù.

mon¿¡ ºñÇØ ldirectord °¡ °¡Áö°í ÀÖ´Â ÀåÁ¡Àº ´ÙÀ½°ú °°´Ù:

¾î°µÇ¾úµç ldirectord¸¦ ¼öµ¿À¸·Î ½ÃÀÛÇϰųª ÁßÁö½Ãų ¼ö ÀÖ´Ù. ¹é¾÷¿ë ºÎÇϺл꼭¹ö¾øÀ̵µ ´ç½ÅÀÇ LVS Ŭ·¯½ºÅÍ¿¡ ÀÌ ÇÁ·Î±×·¥À» »ç¿ëÇÒ ¼ö ÀÖ´Ù.

¼³Á¤¿¹

mon+heartbeat+fake+coda ÇØ°áÃ¥¿¡¼­ ¼Ò°³ÇÑ ¿¹¿¡¼­, /etc/ha.d/www.cf¸¦ ´ÙÀ½°ú °°ÀÌ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù:

#
# The /etc/ha.d/www.cf for ldirectord
#
 
# the number of second until a real server is declared dead
timeout = 10
 
# the number of second between server checks
checkinterval = 10
 
#
# virtual = x.y.z.w:p
#     protocol = tcp|udp
#     scheduler = rr|wrr|lc|wlc
#     real = x.y.z.w:p gate|masq|ipip [weight]
#     ...
#     
 
virtual = 10.0.0.3:80
     protocol = tcp
     scheduler = wlc
     real = 192.168.0.1:80 gate 5
     real = 192.168.0.2:80 gate 5
     request = "/.testpage"
     receive = "test page"

/etc/ha.d/haresources ÆÄÀÏÀº ´ÙÀ½°ú ºñ½ÁÇÒ °ÍÀÌ´Ù:

lvs1.domain.com IPaddr::10.0.0.3 ldirectord::www

°¢ À¥ ¼­¹öÀÇ DocumentRoot µð·ºÅ丮¿¡ .testpage ÆÄÀÏÀ» »ý¼ºÇؾßÇÑ´Ù.

echo "test page" > .testpage

ÁÖ¼­¹ö¿Í ¹é¾÷¼­¹ö¿¡¼­ heartbeat ´ë¸óÀ» ½ÃÀÛÇÏÀÚ. À߸øµÈ ºÎºÎÀÌ ÀÖ´Ù¸é, /var/log/ha-log ¿Í /var/log/ldirector.log ÆÄÀÏÀ» Á¦°¢°¢ Àú°ËÇØ¾ßÇÑ´Ù.


HighAvailability.html,v 1.3 2000/01/11 14:00:52 wensong Exp $
Created on: 1998/12/5