Ä¿ÇǴнº, ½Ã½ºÅÛ ¿£Áö´Ï¾îÀÇ ½°ÅÍ
  HAProxy·Î ·Îµå¹ë·±½Ì(LB, ÀÌÁßÈ­) ±¸¼º ÀÛ¼ºÀÏ : 2015/03/24 18:39
 
  • ±Û¾´ÀÌ : ÁÁÀºÁøÈ£ ( http://coffeenix.net/ )
  • Á¶È¸¼ö : 31437
     
    Á¦  ¸ñ : HAProxy·Î ·Îµå¹ë·±½Ì(LB, ÀÌÁßÈ­) ±¸¼º
    ÀÛ¼ºÀÚ : ÁÁÀºÁøÈ£(truefeel, http://coffeenix.net/ )
    ÀÛ¼ºÀÏ : 2015.3.10(È­)

    HAProxy´Â L4(TCP), L7(HTTP) ³×Æ®¿÷ ½ºÀ§Ä¡¸¦ ´ëüÇÒ ¼ö ÀÖ´Â ·Îµå ¹ë·±½Ì(load balancing), HA(high availability)¿ë ¿ÀǼҽº´Ù. ¿¹¸¦ µé¾î À¥¼­¹ö°¡ ¿©·¯´ë°¡ ÀÖ°í, ÀÌ ¼­¹ö¸¦ ·Îµå ¹ë·±½ÌÇÑ´Ù¸é À¥¼­¹ö ¾Õ´Ü¿¡ HAProxy¼­¹ö¸¦ ¼ÂÆÃÇÑ´Ù. ¿©·¯´ë À¥¼­¹ö Áß 1´ë°¡ Àå¾Ö¹ß»ýÇصµ ¼­ºñ½º¿¡´Â ÁöÀåÀÌ ¾ø´Ù. HAProxy´Â ¹Ù·Î ¼­¹ö Àå¾Ö¸¦ ÀÎÁöÇÏ°í ÇØ´ç¼­¹ö¸¦ ¼­ºñ½º¿¡¼­ Á¦¿Ü½ÃÅ°±â ¶§¹®ÀÌ´Ù.




    1. HAProxy ±âº» ¼³Á¤

     
    global
    ¡¡¡¡¡¡log 127.0.0.1¡¡¡¡¡¡local1¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡# Linux
    ¡¡¡¡¡¡# log /var/run/log¡¡¡¡¡¡local1¡¡¡¡¡¡¡¡¡¡¡¡# FreeBSD

    ¡¡¡¡¡¡#
    ¡¡¡¡¡¡maxconn 4096
    ¡¡¡¡¡¡uid 99
    ¡¡¡¡¡¡gid 99
    ¡¡¡¡¡¡daemon

    defaults
    ¡¡¡¡¡¡log¡¡¡¡¡¡global
    ¡¡¡¡¡¡mode¡¡¡¡¡¡http
    ¡¡¡¡¡¡# option  httplog
    ¡¡¡¡¡¡option  dontlognull

    ¡¡¡¡¡¡retries¡¡¡¡¡¡3
    ¡¡¡¡¡¡redispatch
    ¡¡¡¡¡¡maxconn¡¡¡¡¡¡4000
    ¡¡¡¡¡¡contimeout 5000

    listen¡¡¡¡¡¡wwwlb 0.0.0.0:80
    ¡¡¡¡¡¡option¡¡¡¡¡¡httpchk
    ¡¡¡¡¡¡option¡¡¡¡¡¡httpclose
    ¡¡¡¡¡¡option¡¡¡¡¡¡forwardfor

    ¡¡¡¡¡¡balance¡¡¡¡¡¡roundrobin
    ¡¡¡¡¡¡server¡¡¡¡¡¡www1 10.10.10.1:80 check inter 3000 rise 2 fall 1
    ¡¡¡¡¡¡server¡¡¡¡¡¡www2 10.10.10.2:80 check inter 3000 rise 2 fall 1
     


    ¼³Á¤ Áß ¸î°¡Áö¸¸ »ìÆ캸ÀÚ.

    1) ·Î±× ¼³Á¤

     
    global
    ¡¡¡¡¡¡log 127.0.0.1¡¡¡¡¡¡local1¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡# Linux
    ¡¡¡¡¡¡# log /var/run/log¡¡¡¡¡¡local1¡¡¡¡¡¡¡¡¡¡¡¡# FreeBSD
    defaults
    ¡¡¡¡¡¡log¡¡¡¡¡¡global
    ¡¡¡¡¡¡# option  httplog
     


    log ¼³Á¤Àº ÁöÁ¤ÇÑ IP ¶Ç´Â ¼ÒÄÏ(¿¹. /dev/log ¶Ç´Â /var/run/log)À¸·Î ·Î±×¸¦ º¸³½´Ù. local1 µÚ¿¡´Â ·Î±×·¹º§À» ÁöÁ¤ÇÒ ¼ö Àִµ¥, local1 notice¶ó°í ÁöÁ¤Çß´Ù¸é emerg~notice ·¹º§À» ·Î±×·Î ³²±ä´Ù. notice ·¹º§¸¸ syslog·Î º¸³»°í ½Í´Ù¸é local1 notice noticeó·³ notice¸¦ 2¹ø Àû¾îÁÖ¸é µÈ´Ù. µÚ¿¡ ÀÖ´Â notice´Â ÃÖ¼Ò·¹º§À» ÀǹÌÇÑ´Ù. Áï, notice~notice ¹üÀ§ÀÇ ·¹º§À» ÀǹÌÇϹǷΠ¿ÀÁ÷ notice ·¹º§¸¸ syslog·Î º¸³»´Â °ÍÀÌ´Ù.
    option httplog ¼³Á¤Àº Ŭ¶óÀ̾ðÆ® IP, URL, »óÅÂÄÚµå, bytes µîÀÇ À¥·Î±×±îÁö syslog·Î º¸³»µµ·Ï ÇÑ´Ù.

    syslog(¶Ç´Â rsyslog)µµ À§¿Í ¸ÅĪµÇµµ·Ï ¼³Á¤ÇÑ´Ù.

     
    # local1.=info¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡/var/log/haproxy_access.log
    local1.notice¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡/var/log/haproxy.log
     


    HAProxy start/stop Á¤º¸¿Í ¼­¹ö°¡ DOWN, UP µîÀÇ »óÅ º¯°æ Á¤º¸ µîÀÌ notice·¹º§¿¡ ÇØ´çÇÑ´Ù. À¥·Î±×´Â info·¹º§ÀÌ´Ù. ¿äûÀÌ ³Ê¹« ¸¹À» °æ¿ì À¥·Î±×·®(haproxy_access.log)ÀÌ ±Þ¼ÓÈ÷ Ä¿Áö¹Ç·Î ·Î±×¸¦ ³²±æ °ÍÀÎÁö Àß ÆÇ´ÜÇÏ±æ ¹Ù¶õ´Ù.

    2) listen ¼³Á¤

     
    option¡¡¡¡¡¡httpchk
    option¡¡¡¡¡¡forwardfor
     


    option httpchk´Â HTTP¿äûÀ¸·Î ¼­ºñ½º Çコüũ¸¦ ÇÏ°Ú´Ù´Â ¶æÀÌ´Ù. Ãß°¡¼³Á¤¾øÀÌ option httpchk¸¸ ¼³Á¤Çϸé OPTIONS ¸Þ½îµå·Î À¥¿äûÀ» ÇÑ´Ù.
    ƯÁ¤ URLÀ» üũÇÏ°í ½Í´Ù¸é ¾Æ·¡Ã³·³ ¼³Á¤ÇÏ¸é µÈ´Ù. OPTIONS ¸Þ½îµå üũº¸´Ù´Â Á» ´õ ³ªÀº ¹æ¹ýÀÌ´Ù. HEAD ¸Þ½îµå·Î üũÇϸé À¥¼­¹ö ÀÀ´äÀÌ ¾ø´Â °Í ¿Ü¿¡ 404 ¿¡·¯°¡ ¹ß»ýÇÏ´Â °æ¿ìµµ ÇØ´ç ¼­¹ö¸¦ ¼­ºñ½º¿¡¼­ Á¦¿Ü½ÃŲ´Ù.

     
    option httpchk <uri>
    option httpchk <method> <uri>
    option httpchk <method> <uri> <version>

    (¿¹) option httpchk HEAD / HTTP/1.0
    (¿¹) option httpchk HEAD / HTTP/1.1\r\nHost:\ w.coffeenix.net
    (¿¹) option httpchk HEAD / HTTP/1.1\r\nUser-Agent:\ Health\ Check/HaProxy1\r\nHost:\ w.coffeenix.net
     


    option forwardfor´Â ¹é´ÜÀÇ À¥¼­¹ö(À§¿¡¼­´Â www1, www2)¿¡ X-Forwarded-For Çì´õ¸¦ ³Ö¾î¼­ Àü´ÞÇÑ´Ù. X-Forwarded-For Çì´õ¿¡ ½ÇÁ¦ ¿äûÇÑ Å¬¶óÀ̾ðÆ® IP°¡ ÀúÀåµÈ´Ù.

     
    server  www1 10.10.10.1:80 check inter 3000 rise 2 fall 1
     


    www1 ¼­¹ö°¡ Á¤»óÀûÀ¸·Î µ¿ÀÛÁßÀÎÁö¸¦ 3ÃÊ(3000)°£°ÝÀ¸·Î üũ(check inter 3000)ÇÑ´Ù. Á¢¼ÓÀÌ ÇѹøÀÌ¶óµµ ¾ÈµÈ´Ù¸é ÇØ´ç ¼­¹ö¸¦ ¼­ºñ½º¿¡¼­ Á¦¿Ü(fall 1)½ÃŲ´Ù. ¸¸¾à µÎ¹ø ¿¬¼Ó üũÇؼ­ ¸ðµÎ Á¤»óÀûÀÎ ÀÀ´äÀÌ ¿Â´Ù¸é ´Ù½Ã ¼­ºñ½º¿¡ Ãß°¡(rise 2)½ÃŲ´Ù. rise¸¦ ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é µðÆúÆ®·Î 2¸¦, fallÀ» ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é 3ÀÌ µðÆúÆ® °ªÀÌ´Ù.

     
    (¿¹) check inter 3000 fastinter 1000 rise 3 fall 2
     


    Æò»ó½Ã¿¡´Â inter 3000 ¼³Á¤¿¡ µû¶ó 3ÃÊ °£°ÝÀ¸·Î ¼­ºñ½º¸¦ üũÇÑ´Ù. ÇØ´ç ¼­¹ö°¡ ´Ù¿îÀÌ µÇ¾úÀ» ¶§, rise 3 ¼³Á¤¿¡ µû¶ó 3¹ø ¿¬¼Ó üũÇؼ­ Á¤»óÀÌ¸é ¼­ºñ½º¿¡ Ãß°¡ÇÑ´Ù. À̶§ fastinter 1000ÀÌ ½Ç·Â¹ßÈÖ¸¦ ÇÑ´Ù. 3¹ø üũÇÏ´Â µ¿¾È¿¡ 1ÃÊ°£°ÝÀ¸·Î ¼­ºñ½º¸¦ üũÇÏ°Ô µÈ´Ù. µû¶ó¼­ Á» ´õ »¡¸® ¼­ºñ½º¿¡ Ãß°¡µÉ ¼ö ÀÖ´Ù.

    balance ¼³Á¤Àº ¿©·¯°³°¡ Àִµ¥ ÀÚÁÖ »ç¿ëÇÏ´Â 2°³¸¸ »ìÆ캸¸é.
    roundrobinÀº ¼øÂ÷ÀûÀ¸·Î ¿äûÀ» ³Ñ°ÜÁØ´Ù. ù¹ø° ¿äûÀº 1¹ø¼­¹ö·Î, ´ÙÀ½Àº 2¹ø¼­¹ö·Î, ±× ´ÙÀ½Àº ´Ù½Ã 1¹ø¼­¹ö·Î.
    leastconnÀº ¿äûÀ» °¡Àå Àû°Ô ¹ÞÀº ¼­¹ö·Î ¿äûÀ» ³Ñ°ÜÁØ´Ù. 1¹ø ¼­¹ö°¡ 100°³ ¿äû¹Þ¾Æ ó¸®ÁßÀÌ°í, 2¹ø¼­¹ö°¡ 80°³ ¹Þ¾Æ ó¸®ÁßÀ̶ó¸é, ¿äûÀÌ µé¾î¿Ã ¶§ 2¹ø¼­¹ö·Î º¸³½´Ù.


    2. µ¿ÀÏ Å¬¶óÀ̾ðÆ®´Â µ¿ÀÏÇÑ ¼­¹ö·Î Á¢¼ÓµÇµµ·Ï ¼³Á¤ (sticky ¼³Á¤)

    µ¿ÀÏÇÑ Å¬¶óÀ̾ðÆ®°¡ Ç×»ó °°Àº ¼­¹ö·Î¸¸ ¿äûÀ» º¸³¾ ÇÊ¿ä°¡ ÀÖÀ» ¶§´Â ÄíÅ° üũ¿Í Ŭ¶óÀ̾ðÆ® IP üũ µî 2°¡Áö ¹æ¹ýÀ¸·Î ÇØ°áÇÒ ¼ö ÀÖ´Ù.

    1) ÄíÅ°·Î ¼¼¼Ç À¯Áö

     
    listen¡¡¡¡¡¡wwwlb 0.0.0.0:80
    ... »ý·« ...
    ¡¡¡¡¡¡balance¡¡¡¡¡¡roundrobin
    ¡¡¡¡¡¡cookie  SVID insert indirect nocache
    ¡¡¡¡¡¡server¡¡¡¡¡¡www1 10.10.10.1:80 cookie w1 check inter 3000 rise 2 fall 1
    ¡¡¡¡¡¡server¡¡¡¡¡¡www2 10.10.10.2:80 cookie w2 check inter 3000 rise 2 fall 1
     


    Ŭ¶óÀ̾ðÆ® ¿äûÀÌ µé¾î¿À¸é, SVID ÄíÅ°°¡ ÀÖ´ÂÁö¸¦ °Ë»çÇÑ´Ù. Ŭ¶óÀ̾ðÆ®°¡ óÀ½ ¿äûÇÒ ¶§´Â SVID ÄíÅ°°¡ ¾øÀ» °ÍÀ̹ǷΠÄíÅ°¸¦ »õ·Î ¸¸µç´Ù. ÀÌ ¶§ www1 ¼­¹ö·Î Á¢¼ÓÇϸé w1 ÄíÅ°°ªÀ» ±Á°í, www2 ¼­¹ö·Î Á¢¼ÓÇϸé w2 ÄíÅ°°ªÀ» ±Á´Â´Ù. Çѹø ¿äûÇß´ø Ŭ¶óÀ̾ðÆ®¿¡¼­ ´ÙÀ½ ¿äûÀ» ÇÒ ¶§´Â SVID ÄíÅ°°¡ ÀÖÀ¸¹Ç·Î ÄíÅ°°ª¿¡ ¸Â´Â ¼­¹ö·Î ¿äûÀ» º¸³½´Ù. µû¶ó¼­ óÀ½¿¡ w1¼­¹ö·Î ¿äûÀÌ µé¾î¿Ô´Ù¸é ´ÙÀ½¿¡µµ °è¼Ó w1¼­¹ö·Î ¿äûÀ» º¸³¾ ¼ö ÀÖ°Ô µÈ´Ù.

     
    cookie  SVID insert indirect nocache maxlife 10m
     


    µ¿ÀÏÇÑ ¼­¹ö·Î Á¢¼ÓÇÏ´Â °ÍÀ» 10ºÐ¸¸ À¯ÁöÇÏ·Á¸é À§Ã³·³ cookie À¯Áö½Ã°£(maxlife 10m)À» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.

    HAProxy¼­¹ö°¡ 'Ŭ¶óÀ̾ðÆ® -> HAProxy ¼­¹ö -> À¥¼­¹öµé'°ú °°Àº ±¸¼ºÀ¸·Î µÇ¾î ÀÖÀ» ¶§, SVID ÄíÅ°´Â Ŭ¶óÀ̾ðÆ® <-> HAProxy ¼­¹ö ±¸°£¿¡¸¸ À¯Áö°¡ µÇ°í, µÞ´ÜÀÇ À¥¼­¹ö·Î´Â Àü´ÞµÇÁö ¾Ê´Â´Ù. ·Îµå¹ë·±½Ì¿ëÀ¸·Î¸¸ »ç¿ëÇÏ´Â ÄíÅ°À̹ǷΠÀ¥¼­¹ö°¡ »ç¿ëÇÒ ÇÊ¿ä¾øÀ¸´Ï±ñ.

     
    Ŭ¶óÀ̾ðÆ® <--- SVID ÄíÅ° ---> HAProxy <--- SVID ÄíÅ°¾øÀ½ ---> À¥¼­¹öµé
     


    2) Ŭ¶óÀ̾ðÆ® IP·Î ¼¼¼Ç À¯Áö

     
    listen¡¡¡¡¡¡wwwlb 0.0.0.0:80
    ... »ý·« ...
    ¡¡¡¡¡¡balance¡¡¡¡¡¡source
    ¡¡¡¡¡¡hash-type consistent
    ¡¡¡¡¡¡server¡¡¡¡¡¡www1 10.10.10.1:80 check inter 3000 rise 2 fall 1
    ¡¡¡¡¡¡server¡¡¡¡¡¡www2 10.10.10.2:80 check inter 3000 rise 2 fall 1
     


    À§Ã³·³ balance¿Í hash-typeÀ» ¼³Á¤Çϸé ÇؽÃÅ×À̺íÀ» »ç¿ëÇؼ­ Ŭ¶óÀ̾ðÆ® IPº°·Î ƯÁ¤¼­¹ö·Î¸¸ Á¢¼ÓµÇµµ·Ï ÇÒ ¼ö ÀÖ´Ù.


    3. HAProxyÀÇ Åë°è ¸ð´ÏÅ͸µ ÆäÀÌÁö

     
    listen¡¡¡¡¡¡stats_page 0.0.0.0:8080
    ¡¡¡¡¡¡stats   enable
    ¡¡¡¡¡¡stats   uri /
    ¡¡¡¡¡¡stats   auth ID:ºñ¹Ð¹øÈ£
     


    HAProxyÀÇ Åë°è ¸ð´ÏÅ͸µ ÆäÀÌÁö(Statistics Report, stats page)´Â 8080°°ÀÌ ¼­ºñ½º¿Í´Â º°°³ÀÇ Æ÷Æ®·Î ¼³Á¤ÇÏ´Â°Ô º¸´Ù ¾ÈÀüÇÏ´Ù.


    4. À¥¼­¹ö ·Î±×¿¡ Proxy IP´ë½Å Ŭ¶óÀ̾ðÆ® IP ³²±â±â

    Ŭ¶óÀ̾ðÆ® -> HAProxy ¼­¹ö -> À¥¼­¹ö·Î ¿äûÀÌ µé¾î¿Ã ¶§, À¥¼­¹ö ·Î±×¿¡´Â HAProxy¼­¹öÀÇ IP°¡ ³²°ÔµÈ´Ù. ¿äûÇÑ Å¬¶óÀ̾ðÆ® IP´Â X-Forwarded-For Çì´õ¿¡ µé¾îÀִµ¥, nginx, apache À¥¼­¹ö´Â ÀÌ Çì´õ°ªÀ» »Ì¾Æ³» Proxy IP¸¦ Ŭ¶óÀ̾ðÆ® IP·Î º¯°æÇØÁÖ´Â ¸ðµâÀÌ ÀÖ´Ù.

    1) nginx

    http_realip ¸ðµâÀº ±âº»À¸·Î ¼³Ä¡µÇÁö ¾ÊÀ¸¹Ç·Î configureÇÒ ¶§ --with-http_realip_module ¿É¼ÇÀ» Ãß°¡ÇÑ ÈÄ ÄÄÆÄÀÏÇÑ´Ù.

     
    set_real_ip_from  10.10.10.10;
    real_ip_header    X-Forwarded-For;
     


    10.10.10.10Àº HAProxy¼­¹öÀÇ IPÀÌ°í, HAProxy¼­¹ö°¡ ¿©·¯´ëÀÏ ¶§´Â IP¸¦ ÇÑÁÙ¿¡ Çϳª¾¿ Ãß°¡ÇØÁØ´Ù. 192.168.0.0/24ó·³ ´ë¿ªÆøÀ¸·Î ÁöÁ¤ÇÒ ¼öµµ ÀÖ´Ù.

    2) apache

    ¾ÆÆÄÄ¡¿¡ mod_rpaf ¸ðµâÀÌ Å¬¶óÀ̾ðÆ® IP º¯È¯±â´ÉÀ» Á¦°øÇÑ´Ù. ÀÚ¼¼ÇÑ ¼³Á¤¹ýÀº ´ÙÀ½±ÛÀ» Àо½Ã±æ.

    * apache¿¡¼­ Proxy IP¸¦ real IP·Î ¹Ù²Ù±â (±Û ÁÁÀºÁøÈ£, 2010.2)
      http://coffeenix.net/board_view.php?bd_code=1701


    5. Âü°íÀÚ·á

    * HAProxy version 1.5.11 Configuration Manual
      http://cbonte.github.io/haproxy-dconv/configuration-1.5.html

    * Module ngx_http_realip_module
      http://nginx.org/en/docs/http/ngx_http_realip_module.html

    * L4/L7 ½ºÀ§Ä¡ÀÇ ´ë¾È, ¿ÀÇ ¼Ò½º ·Îµå ¹ë·±¼­ HAProxy
      http://helloworld.naver.com/helloworld/textyle/284659

    * FreeBSD¿¡¼­ CARP¿Í HAProxy·Î ÀÌÁßÈ­(HA) ±¸¼º (±Û ÁÁÀºÁøÈ£, 2015.2)
      http://coffeenix.net/board_view.php?bd_code=1770


    Ä¿ÇǴнº, ½Ã½ºÅÛ ¿£Áö´Ï¾îÀÇ ½°ÅÍ / URL : http://coffeenix.net/board_view.php?bd_code=1771