´ÙÀÌ·ºÆ® ¶ó¿ìÆÃÀ» ÀÌ¿ëÇÑ °¡»ó ¼­¹ö Routing

´ÙÀ½Àº Direcet Routing request dispatching ±â¼úÀ» ÀÌ¿ë ¾î¶»°Ô ¸®´ª½º °¡»ó ¼­¹ö¸¦ ±¸ÃàÇÏ´ÂÁö ¼³¸íÇÑ´Ù.

Direct Routing request dispatching technique

¿äû µð½ºÆÐĪ Á¢±Ù¹æ¹ýÀº IBMÀÇ NetDispatcher°¡ ¼öÇàÇÏ´Â °Í°ú ºñ½ÁÇÏ´Ù. ½ÇÁ¦ ¼­¹ö¿Í ºÎÇÏºÐ»ê ¼­¹ö¿¡¼­ °¡»ó IP ÁÖ¼Ò¸¦ °øÀ¯ÇÑ´Ù. ºÎÇϺл꼭¹ö¿¡´Â ¸¶Âù°¡Áö·Î °¡»ó IP ÁÖ¼Ò¸¦ ¼³Á¤ÇÑ ÀÎÅÍÆäÀ̽º°¡ ÀÖ¾î¾ßÇϸç ÀÌ ÀÎÅÍÆäÀ̽º¸¦ ÀÌ¿ë, ¿äû ÆÐŶÀ» ¹Þ¾ÆµéÀÌ°í ¼±ÅÃÇÑ ¼­¹ö¿¡ Á÷Á¢ ¶ó¿ìÆÃÇÒ ¼ö ÀÖ´Ù. ¸ðµç ½ÇÁ¦ ¼­¹ö´Â °¡»ó IPÁÖ¼Ò·Î ¼³Á¤ÇÑ non-arp alias ÀÎÅÍÆäÀ̽º°¡ Àְųª °¡»ó IP ÁÖ¼Ò·Î ÇâÇÏ´Â ÆÐŶÀ» Áö¿ª ¼ÒÄÏÀ¸·Î ÀçÁöÇâÇÑ´Ù. ±×·¡¼­ ½ÇÁ¦ ¼­¹ö¿¡¼­ ÆÐŶÀ» Áö¿ªÀûÀ¸·Î ó¸®ÇÒ ¼ö ÀÖ´Ù. ºÎÇÏºÐ»ê ¼­¹ö¿Í ½ÇÁ¦ ¼­¹ö´Â Çãºê/½ºÀ§Ä¡¸¦ ÀÌ¿ë ¹°¸®ÀûÀ¸·Î ¸µÅ©µÈ ±×µé¸¸ÀÇ ÀÎÅÍÆäÀ̽º¸¦ °¡Áö°í Çϳª °¡Áö°í ÀÖ¾î¾ßÇÑ´Ù.±¸Á¶´Â ´ÙÀ½°ú °°´Ù.

 

»ç¿ëÀÚ°¡ ¼­¹ö Ŭ·¯½ºÅÍ¿¡¼­ Á¦°øÇÏ´Â ¼­ºñ½º¿¡ Á¢±ÙÇÒ¶§, °¡»ó IP ÁÖ¼Ò(°¡»ó ¼­¹öÀÇ IP ÁÖ¼Ò)·Î ÇâÇÏ´Â ¿ä±¸ ÆÐŶÀÌ ºÎÇϺл꼭¹ö·Î °£´Ù. ºÎÇϺл꼭¹ö(LinuxDirector)¿¡¼­ ÆÐŶÀÇ ¸ñÀûÁö ÁÖ¼Ò¿Í Æ÷Æ® ¹øÈ£¸¦ °Ë»çÇÑ´Ù. ±× ³»¿ëÀÌ °¡»ó ¼­¹ö ¼­ºñ½º¿Í ÀÏÄ¡ÇÏ¸é ½ºÄÉÁ층 ¾Ë°í¸®Áò¿¡ µû¶ó Ŭ·¯½ºÅÍ¿¡¼­ ½ÇÁ¦ ¼­¹ö¸¦ ¼±ÅÃÇϰí, Á¢¼ÓÀ» ±â·ÏÇÏ´Â ÇØ½¬ Å×ÀÌºí¿¡ »õ·Î¿î Á¢¼ÓÀ» Ãß°¡ÇÑ´Ù. ±×·¯°í³ª¼­ ºÎÇϺл꼭¹ö¿¡¼­ ¼±ÅÃÇÑ ¼­¹ö·Î Á÷Á¢ ÆÐŶÀ» Àü¼ÛÇÑ´Ù. µé¾î¿À´Â ÆÐŶÀÌ ÀÌ·¯ÇÑ Á¢¼Ó¿¡ ÇØ´çÇϰí ÇØ½¬ Å×ÀÌºí¿¡¼­ ¼±ÅÃÇÑ ¼­¹ö¸¦ ãÀ» ¼ö ÀÖÀ¸¸é ÆÐŶÀº ´Ù½Ã ¼­¹ö·Î Á÷Á¢ Àü¼ÛµÈ´Ù. ¼­¹ö¿¡¼­ Àü¼Û(Æ÷¿öµù)µÈ ÆÐŶÀ» ¹ÞÀ¸¸é, ¼­¹ö´Â ÆÐŶ¿¡¼­ ¾Ë¸®¾Æ½º ÀÎÅÍÆäÀ̽º³ª Áö¿ª ¼ÒÄÏÀÇ ÁÖ¼Ò¸¦ ã¾Æ¼­ ¿äûÀ» ó¸®ÇÏ°í °á°ú¸¦ »ç¿ëÀÚ¿¡°Ô Á÷Á¢ Àü¼ÛÇÑ´Ù. Á¢¼ÓÀÌ ÇØÁ¦µÇ°Å³ª ½Ã°£À» ÃʰúÇϸé, ÇØ½¬ Å×ÀÌºí¿¡¼­ ¿¬°á ±â·ÏÀ» Á¦°ÅÇÑ´Ù. ÀÛ¾÷ÀÇ È帧Àº ´ÙÀ½°ú °°´Ù.

 

ºÎÇÏºÐ»ê ¼­¹ö´Â ´Ü¼øÈ÷ µ¥ÀÌÅÍ ÇÁ·¹ÀÓÀÇ MAC ÁÖ¼Ò¸¸ ¼±ÅÃÇÑ ¼­¹ö·Î ¹Ù²Ù¸ç À̸¦ ´Ù½Ã LAN¿¡ ÀçÀü¼ÛÇÑ´Ù. ÀÌ·± ÀÌÀ¯ ¶§¹®¿¡ ºÎÇÏºÐ»ê ¼­¹ö¿Í °¢ ¼­¹ö°¡ ´ÜÀÏÇÑ ¹°¸®Àû ¼¼±×¸ÕÆ®¾È¿¡¼­ ¿¬°áµÇ¾î¾ßÇÑ´Ù. Ŭ·¯½ºÅÍ¿¡¼­ arp ¹®Á¦°¡ »ý±â¸é the arp problem page¸¦ Âü°íÇÏÀÚ.

 

Ä¿³Î ¼³Á¤

1. The VS patch for kernel 2.0.36

¸ÕÀú Àû´çÇÑ ¹öÀüÀÇ ¸®´ª½º Ä¿³Î ¼Ò½º¸¦ ±¸ÇÑ´Ù. ±×·¯°í Ä¿³Î¿¡ °¡»ó ¼­¹ö ÆÐÄ¡(version 0.9 ÀÌ»ó)¸¦ Àû¿ëÇÑ´Ù. ¼¼ ¹øÂ°·Î ÃÖ¼ÒÇÑ ¿©±â¼­ ¼±ÅÃÇÑ Ä¿³Î ÄÄÆÄÀÏ ¿É¼ÇÀ» ¼±ÅÃÇß´ÂÁö È®ÀÎÇÑ´Ù.

Ä¿³Î ÄÄÆÄÀÏ ¿É¼Ç:

Code maturity level options --->
    [*] Prompt for development and/or incomplete code/drivers
 
Networking options --->
    [*] Network firewalls
    ...
    [*] IP: forwarding/gatewaying
    ...
    [*] IP: firewalling
    ...
    [*] IP: masquerading
    ...
    [*] IP: ippfvs(LinuxDirector) masquerading (EXPERIMENTAL)
    Virtual server request dispatching technique---
    ( ) VS-NAT
    ( ) VS-Tunneling
    (X) VS-DRouting

±×¸®°í ÇϳªÀÇ ½ºÄÉÁ층 ¾Ë°í¸®ÁòÀ» ¼±ÅÃÇØ¾ßÇÑ´Ù.

    Virtual server scheduling algorithm
    (X) WeightedRoundRobin
    ( ) LeastConnection
    ( ) WeightedLeastConnection
 
    [ ] IP: enabling ippfvs with the local node feature

±×´ÙÀ½ Ä¿³ÎÀ» ÄÄÆÄÀÏÇÑ´Ù. ÀûÀýÇÏ°Ô Ä¿³ÎÀÌ ÄÄÆÄÀϵǾú´Ù¸é, ½Ã½ºÅÛ Ä¿³ÎÀ» ¾÷µ¥ÀÌÆ®Çϰí ÀçºÎÆÃÇÑ´Ù.

2. The VS patch for kernel 2.2.9

Kernel Compile Options:

Code maturity level options --->
    [*] Prompt for development and/or incomplete code/drivers
 
Networking options --->
    [*] Network firewalls
    ...
    [*] IP: forwarding/gatewaying
    ...
    [*] IP: firewalling
    ...
    [*] IP: masquerading
    ...
    [*] IP: masquerading virtual server support (EXPERIMENTAL)
    (12) IP masquerading table size (the Nth power of 2)
    <M> IPVS: round-robin scheduling(NEW)
    <M> IPVS: weighted round-robin scheduling(NEW)
    <M> IPVS: weighted least-connection scheduling(NEW)
    <M> IPVS: persistent client connection scheduling(NEW)

±×´ÙÀ½ Ä¿³ÎÀ» ÄÄÆÄÀÏÇÑ´Ù. ÀûÀýÇÏ°Ô Ä¿³ÎÀÌ ÄÄÆÄÀϵǾú´Ù¸é, ½Ã½ºÅÛ Ä¿³ÎÀ» ¾÷µ¥ÀÌÆ®Çϰí ÀçºÎÆÃÇÑ´Ù. ¸¶Áö¸·À¸·Î cd ¸í·ÉÀ» ÀÌ¿ë, ipvsadm ¼Ò½º µð·ºÅ丮·Î À̵¿ÇÏ¿© "make install" À̶ó°í ¸í·ÉÀ» Ä¡¸é ipvsadm ÇÁ·Î±×·¥À» ½Ã½ºÅÛ µð·ºÅ丮¿¡ ¼³Ä¡ÇÑ´Ù.

 

ÅͳθµÀ» »ç¿ëÇÑ °¡»ó ¼­¹ö ½ÇÇè ¿¹Á¦

´ÙÀÌ·ºÆ® ¶ó¿ìÆÃÀ» ÀÌ¿ëÇÑ °¡»ó ¼­¹ö ½ÇÇè ¿¹Á¦

´ÙÀ½Àº ÅͳθµÀ» ÀÌ¿ë °¡»ó ¼­¹ö¸¦ ½ÇÇèÇÑ ¿¹Á¦ÀÌ´Ù. ¼³Á¤Àº ´ÙÀ½°ú °°´Ù. ÀÌ°Ç ÀÌ ±ÛÀ» º¸´Â »ç¶÷µé¿¡°Ô ÇϳªÀÇ ½Ç¸¶¸®¸¦ Áֱ⠹ٶõ´Ù. ºÎÇÏ ºÐ»ê¼­¹öÀº 172.26.20.111 ÁÖ¼Ò¸¦ °¡Áö°í ÀÖ°í ½ÇÁ¦ ¼­¹ö´Â 172.26.112ÀÌ´Ù. °¡»ó IP ÁÖ¼Ò´Â 172.26.20.110 ÀÌ´Ù. ÀÌ ¿¹Á¦¿¡¼­ "telnet 172.26.20.110"À» ÇÏ¸é ½ÇÁ¦ ¼­¹ö¿¡ Á¢¼ÓÇÒ °ÍÀÌ´Ù.

1. For kernel 2.0.x

The load balancer (LinuxDirector), kernel 2.0.36

ifconfig eth0 172.26.20.111 netmask 255.255.255.0 broadcast 172.26.20.255 up
route add -net 172.26.20.0 netmask 255.255.255.0 dev eth0
ifconfig eth0:0 172.26.20.110 netmask 255.255.255.255 broadcast 172.26.20.110 up
route add -host 172.26.20.110 dev eth0:0
ippfvsadm -A -t 172.26.20.110:23 -R 172.26.20.112

The real server 1, kernel 2.0.36 (IP forwarding enabled)

ifconfig eth0 172.26.20.112 netmask 255.255.255.0 broadcast 172.26.20.255 up
route add -net 172.26.20.0 netmask 255.255.255.0 dev eth0
ifconfig lo:0 172.26.20.110 netmask 255.255.255.255 broadcast 172.26.20.110 up
route add -host 172.26.20.110 dev lo:0

When I am on other hosts, 'telnet 172.26.20.110' will actually connect the real server 1.

2. For kernel 2.2.x

The load balancer (LinuxDirector), kernel 2.2.14

ifconfig eth0 172.26.20.111 netmask 255.255.255.0 broadcast 172.26.20.255 up
route add -net 172.26.20.0 netmask 255.255.255.0 dev eth0
ifconfig eth0:0 172.26.20.110 netmask 255.255.255.255 broadcast 172.26.20.110 up
route add -host 172.26.20.110 dev eth0:0
echo 1 > /proc/sys/net/ipv4/ip_forward
ipvsadm -A -t 172.26.20.110:23 -s wlc
ipvsadm -a -t 172.26.20.110:23 -r 172.26.20.112 -g

The real server 1, kernel 2.0.36 (IP forwarding enabled)

ifconfig eth0 172.26.20.112 netmask 255.255.255.0 broadcast 172.26.20.255 up
route add -net 172.26.20.0 netmask 255.255.255.0 dev eth0
ifconfig lo:0 172.26.20.110 netmask 255.255.255.255 broadcast 172.26.20.110 up
route add -host 172.26.20.110 dev lo:0

´õ ÀÚ¼¼ÇÑ ¼³Á¤ ¿¹Á¦

1. Real server running kernel 2.2.14 or later with hidden device

The load balancer (LinuxDirector), kernel 2.2.14

echo 1 > /proc/sys/net/ipv4/ip_forward
ipvsadm -A -t 172.26.20.110:23 -s wlc
ipvsadm -a -t 172.26.20.110:23 -r 172.26.20.112 -g

The real server 1, kernel 2.2.14

echo 1 > /proc/sys/net/ipv4/ip_forward
ifconfig lo:0 172.26.20.110 netmask 255.255.255.255 broadcast 172.26.20.110 up
route add -host 172.26.20.110 dev lo:0
echo 1 > /proc/sys/net/ipv4/conf/all/hidden
echo 1 > /proc/sys/net/ipv4/conf/lo/hidden

VIP¸¦ dummy¿Í °°Àº ´Ù¸¥ µð¹ÙÀ̽ºÀÇ ¾Ë¸®¾Æ½º·Î ¼³Á¤Çϰųª °¨Ãâ ¼ö ÀÖ´Ù. ¾Ë¸®¾Æ½º ÀÎÅÍÆäÀ̽ºÀ̹ǷÎ, ¿øÇϴ¸¸Å­ VIP¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. dummy µð¹ÙÀ̽º¸¦ »ç¿ëÇÑ ¿¹Á¦´Â ¾Æ·¡¿Í °°´Ù.

echo 1 > /proc/sys/net/ipv4/ip_forward
ifconfig dummy0 up
echo 1 > /proc/sys/net/ipv4/conf/all/hidden
echo 1 > /proc/sys/net/ipv4/conf/dummy0/hidden
ifconfig dummy0:0 172.26.20.110 up
route add -host 172.26.20.110 dev dummy0:0
ifconfig dummy0:1 <Another-VIP> up
...

2. Real servers runing kernel 2.2.x with redirect approach

ºÎÇϺл꼭¹öÀÇ ¼³Á¤Àº À§ ¿¹Á¦¿Í °°´Ù. Ä¿³Î 2.2.x¸¦ °¡Áö°í ¿î¿µÇÏ´Â ¸®¾ó ¼­¹ö´Â ´ÙÀ½°ú °°ÀÌ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù:

echo 1 > /proc/sys/net/ipv4/ip_forward
ipchains -A input -j REDIRECT 23 -d 172.26.20.110 23 -p tcp
...

ipchains redirect ¸í·É¾î¸¦ ÀÌ¿ë, 172.26.20.110 Æ÷Æ® 23¸¦ ÇâÇÏ´Â TCP ÇÁ·ÎÅäÄÝÀ» °¡Áø ÆÐŶÀº Áö¿ª ¼ÒÄÏÀ¸·Î ÀçÁöÇâµÈ´Ù. ¼­ºñ½º ´ë¸óÀº ¹Ýµå½Ã ¸ðµç ÁÖ¼Ò(0.0.0.0)À̳ª VIP ÁÖ¼Ò(¿©±â¼­´Â 172.26.20.110)¿¡ ±Í¸¦ ±â¿ïÀ̰í ÀÖ¾î¾ßÇÑ´Ù.

3. ¼­·Î ´Ù¸¥ ³×Æ®¿÷ ¶ó¿ìÆ®¸¦ °¡Áø ¸®¾ó ¼­¹ö

´ÙÀÌ·ºÆ® ¶ó¿ìÆÃÀ» ÀÌ¿ëÇÑ °¡»ó ¼­¹ö¿¡¼­, ½ÇÁ¦ ¼­¹ö´Â ´Ù¸¥ ³×Æ®¿÷ ¶ó¿ìÆ®¸¦ ÀÌ¿ëÇØ Ŭ¶óÀ̾ðÅ׿¡°Ô °á°ú¸¦ º¸³»ÁÙ¼ö ÀÖ´Ù. ÀÌ·± ¹æ¹ýÀ» ÀÌ¿ëÇÏ¸é ¼º´ÉÇâ»ó¿¡ ÁÁÀ» °ÍÀÌ´Ù. ºÎÇÏ ºÐ»ê ¼­¹ö¿Í ½ÃÁ¦ ¼­¹ö´Â »ç¼³ LANÀ» ÀÌ¿ëÇØ Åë½ÅÇÒ ¼ö ÀÖ´Ù. ¼³Á¤ ¿¹Á¦´Â ´ÙÀ½°ú °°´Ù.

The load balancer (LinuxDirector), kernel 2.2.14

ifconfig eth0 <an IP address> ...
...
ifconfig eth0:0 <VIP> netmask 255.255.255.255 broadcast <VIP> up 
route add -host <VIP> dev eth0:0 
ifconfig eth1 192.168.0.1 netmask 255.255.255.0 broadcast 192.168.0.255 up 
route add -net 192.168.0.0 netmask 255.255.255.0 dev eth1
ipvsadm -A -t <VIP>:23
ipvsadm -A -t <VIP>:23 -r 192.168.0.2 -g
...

The real server 1, kernel 2.0.36

ifconfig eth0 <a seperate IP address> ...
# Follow the different network route
...
ifconfig eth1 192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255 up
route add -net 192.168.0.0 netmask 255.255.255.0 dev eth1
ifconfig lo:0 <VIP> netmask 255.255.255.255 broadcast <VIP> up 
route add -host <VIP> dev lo:0


Created on: 1999/5/1