[완료] LVS 접속 문제.

rusipul의 이미지

안녕하십니까. 맨날 눈팅만 하다가 처음으로 질문을 하게 되었습니다.

현재 구성하려고 하는 시스템은 로드밸렁신 서버 한대와 그에 따른 리얼 서버 2대(혹은 여러대)

를 사용 하여 LVS 시스템을 구축 하려고 합니다.

그래서 관련 문서들을 읽어보고 DIRECT ROUTING 방식으로 구성을 하였습니다.

예를 들면 아래와 같습니다.

로드밸런스 서버 : eth0 111.111.111.111(실제IP)
eth0:0 111.111.111.100(가상IP)

리얼 서버1 : eth0 111.111.111.112(실제IP)
eth0:0 111.111.111.100(가상IP)

리얼 서버2 : eth0 111.111.111.113(실제IP)
eth0:0 111.111.111.100(가상IP)

그리고 ipvsadm은 각각 리얼서버 1 2로 다이렉트 라우팅이 되도록
설정을 하였습니다. 포트는 23(telnet) 을 실험적으로 설정하였습니다.

문제는 다음과 같습니다. 위의 시스템으로 클라이언트 PC(이름은 편의상 A라고
하겠습니다)가 접속을 할떄 111.111.111.100 으로 접속을 하게 되면 문제
없이 리얼서버로 접속을 하게 되는데 다른 터미널을 띄워서 다시 접속을 하게
되면 스케쥴링 방식과는 상관 없이 최초 접속된 리얼서버로 다시 연결이 되게
됩니다. 즉 A 클라이언트 PC가 리얼서버1에 접속이 되어 있으면 A에서 발생한
다른 연결들도 전부 리얼서버1로 접속이 되는 문제입니다.

A클라이언트가 리얼서버1에 접속에 있는 상태에서 다른 클라이언트가 접속을 하게
되면 정산적으로 리얼서버2로 연결이 되는데 A에서 한번더 접속을 하게 되면 리얼서버1
로 다시 접속이 되는 문제 입니다.

한 클라이언트에서 접속할때마다 다른서버로 나누어지게 하는 방법이 없는지 궁금하여
이렇게 질문을 올리게 되었습니다.

장문이라 송구스럽지만 해법을 알고계신분들은 읽어보시고 도움좀 부탁드립니다.

다콘의 이미지

persistent 설정이 되어 있는거 아닌지 확인해 보세요.
또는 접속자가 없어서 계속 1번으로 접속되는 수도 있으니
wrr 같은 라운도 로빈 방식으로 테스트 해보시고요.

rusipul의 이미지

우선 답변 감사합니다.
persistent 설정을 따로 잡아주진 않았는데 ipvsadm 설정을 할때 아래의
명령을 사용 하였습니다

ipvsadm -A -t xxx.xxx.xxx.xxx:port(가상IP) -s wrr

help를 보니 -p 옵션이 있어야 persistent 옵션이 들어가는거 같은데 넣지 않으면 디폴트로 들어가는
것인가요?

rusipul의 이미지

문제의 원인을 찾았습니다.

arp 때문이였습니다. 클라이언트에 가상IP의 mac이 저장되어있어서

가상ip로 접속하면 자동으로 한번 연결된 리얼서버로 연결이 되는듯 합니다.

실재로 mac을 지우면서 해보니 로드밸런싱이 정상적으로 작동을 하는군요.

혼자 헛짓한거 같아서 부끄럽습니다.

다콘의 이미지

ARP문제 때문에 생기는 현상을 겪었었는데 답변하면서 깜빡했네요 ^^;;

리얼서버에서 가상IP에 대한 ARP요청을 차단해주셔야 이후에도 문제가 생기지 않을겁니다.
RHEL(CentOS)는 http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5/html/Virtual_Server_Administration/s1-lvs-direct-VSA.html#s2-lvs-direct-arptables-VSA 를 보시면 됩니다.
레드햇 사이트에는 아래처럼 되어 있는데

arptables -A IN -d virtual_ip -j DROP
arptables -A OUT <span>-d</span> virtual_ip -j mangle --mangle-ip-s real_ip

실제로는 아래처럼 해야 제대로 동작합니다.

arptables -A IN -d virtual_ip -j DROP
arptables -A OUT <span>-s</span> virtual_ip -j mangle --mangle-ip-s real_ip
rusipul의 이미지

arp 차단방법떄문에 이것저것 해보다가 안되어서 힘들었는데

답변감사합니다. 이것으로 해보겠습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.