¾ÆÁÖ Áß¿äÇÑ »ó¾÷ÀûÀÎ ÇÁ·Î±×·¥µéÀÌ ÀÎÅͳÝÀ¸·Î ÀüȯÇÏ°Ô µÇ¸é¼ °í°¡¿ë¼ºÀÇ ¼ºñ½º¸¦ Á¦°øÇÏ´Â °ÍÀÌ ¾ÆÁÖ Áß¿äÇØÁö°í ÀÖ´Ù. Ŭ·¯½ºÅ͸µ ½Ã½ºÅÛÀ» ±¸¼ºÇÏ´Â ÇѰ¡Áö ÀÌÁ¡Àº Çϵå¿þ¾î¿Í ¼ÒÇÁÆ®¿þ¾î¿¡ ¿©À¯ºÐÀÌ »ý±ä´Ù´Â °ÍÀÌ´Ù. ³ëµå³ª ´ë¸óÀÇ Àå¾Ö¸¦ °¨ÁöÇØ ±× Áï½Ã ½Ã½ºÅÛÀ» À籸¼ºÇؼ ÀÛ¾÷ ºÎÇϸ¦ Ŭ·¯½ºÅÍÀÇ ´Ù¸¥ ³ëµå·Î ÀÌÀüÇÏ´Â ¹æ½ÄÀ¸·Î °í°¡¿ë¼ºÀÇ ¼ºñ½º¸¦ Á¦°øÇÒ ¼ö ÀÖ´Ù.
½ÇÁ¦·Î °í°¡¿ë¼ºÀº ¾ÆÁÖ ±¤¹üÀ§ÇÑ ºÐ¾ßÀÌ´Ù. ÈǸ¢ÇÑ °í°¡¿ë¼º ½Ã½ºÅÛÀº ½Å·Ú¼ºÀÖ´Â ±×·ì°£ Åë½Å ¼ºê ½Ã½ºÅÛ, ¸â¹ö½± °ü¸®, quoram ¼ºê ½Ã½ºÅÛ, µ¿½Ã Á¦¾î ¼ºê ½Ã½ºÅÛµîÀ¸·Î ±¸¼ºµÉ °ÍÀÌ´Ù. ¿©·¯ °¡Áö ¹æ¹ýÀÌ ÀÖÀ» ¼ö ÀÖÁö¸¸ ¿ì¸®´Â ÇöÀç ¸Å¿ì °¡¿ë¼ºÀÌ ³ôÀº LVS ½Ã½ºÅÛÀ» ±¸ÃàÇϱâ À§ÇØ ÇöÀç Á¸ÀçÇÏ´Â ¼ÒÇÁÆ®¿þ¾î¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. °í°¡¿ë¼ºÀÇ LVS ½Ã½ºÅÛÀ» ±¸¼ºÇÏ´Â µ¥´Â ¿©·¯ °¡Áö ¹æ¹ýÀÌ ÀÖÀ»¼ö Àִµ¥ ÀÌ ±ÛÀ» Àд ºÐµé¸¸ÀÇ ¹æ¹ýÀÌ ÀÖ´Â °æ¿ì¿¡´Â ¾Ë·ÁÁÖ¸é ÁÁ°Ú´Ù. ´ÙÀ½¿¡ µÎ°¡Áö ÇØ°áÃ¥À» ¼Ò°³Çϴµ¥ Âü°í·Î¸¸ º¸ÀÚ.
"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¿¡¼ ´Ù½Ã ±× ÀÚ¿øÀ» ÀÌÀü¹Þ´Â´Ù.
Jacob RiefÀÌ ÀÛ¼ºÇÑ ldirectord (Linux Director Daemon)´Â ½ÇÁ¦ ¼¹öÀÇ ¼ºñ½º¸¦ ¸ð´ÏÅ͸µÇÏ´Â stand-alone ´ë¸óÀ¸·Î ÇöÀç http¿Í https ¼ºñ½º¸¦ Áö¿øÇÑ´Ù. ¼³Ä¡Çϱ⠰£ÆíÇϰí heartbeat ÄÚµå¿Í Àß ÀÛµ¿ÇÑ´Ù. ldirectord ÇÁ·Î±×·¥Àº ipvs tar ¾È¿¡ ÀÖ´Â contrib µð·ºÅ丮¿¡¼ ãÀ» ¼ö ÀÖ´Ù. ¶Ç´Â °¡Àå ÃֽйöÀüÀÇ heartbeat CVS ÀúÀå¼Ò¸¦ È®ÀÎÇØº¸ÀÚ. ÀÌ¿¡ ´ëÇÑ ¸ðµç Á¤º¸´Â 'perldoc ldirectord'¸¦ º¸ÀÚ. ÈǸ¢ÇÑ ÇÁ·Î±×·¥À» ÀÛ¼ºÇØÁØ Jacob Rief¿¡ °¨»çÀÇ ¸¶À½À» ÀüÇÑ´Ù.
mon¿¡ ºñÇØ ldirectord °¡ °¡Áö°í ÀÖ´Â ÀåÁ¡Àº ´ÙÀ½°ú °°´Ù:
node1 IPaddr::10.0.0.3 ldirectord::www ldirectord::mail
¾î°µÇ¾úµç 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