LVS (ipvs) 를 이용해서 NFS 를 로드밸런싱하는 방법

sklee23의 이미지

LVS 를 이용해서 NFS 서비스를 로드밸런싱하려고 합니다.
어떻게 설정하는게 정확한 건지 질문드립니다.

우선 테스트로 realserver1 과 realserver2 두 개를 사용하려고 합니다.
테스트 결과 portmapper, nfsd, mountd 세 개의 rpc 데몬들이 사용된다는
것을 알았습니다. 그런데 이렇게 여러 개의 포트를 동시에 사용해야
하기 때문에 LVS 관련 세팅이 쉽지가 않았습니다.
더구나 portmapper 와 nfsd 는 항상 고정된 포트 (111, 2049) 를 사용하지만
mountd 의 경우는 서비스 기동시마다 다른 포트가 사용되기 때문에
항상 rpcinfo -p 등으로 알아본 후에 ipvsadm 을 이용해 세팅해주어야 하더군요.

테스트 결과 다음과 같은 문제점이 있었습니다.

< 문제점 1 >

우선 데몬이 다음과 같은 포트로 떴다고 가정하겠습니다.

realserver1 의 포트 (portmapper, nfsd, mountd) = (111, 2049, 718)
realserver2 의 포트 (portmapper, nfsd, mountd) = (111, 2049, 748)

각각의 realserver 에 떠있는 이들 데몬의 포트를 보고 ipvsadm 으로
세팅해주었습니다. 이 경우 portmapper(111) 로의 요청은 realserver1 으로
스케줄되고 그 경우 클라이언트는 마운트 요청을 718 포트로 보내기 때문에
역시 realserver1 으로 전송되었습니다.
하지만 그 다음 실제 NFS 요청은 realserver1, realserver2 가 동일한 포트(2049)를
사용하기 때문에 실제 mount 요청이 갔던 realserver 로 가지 않는 문제가
있었습니다.

그래서 어쩔 수 없이 nfsd 와 mountd 가 서비스 기동시에 다음과 같이
고정된 포트를 사용하도록 강제적으로 /etc/init.d 밑의 스크립트를 수정하였습니다.
rpc.nfsd 와 rpc.mountd 각각 -p 옵션을 주면 포트를 지정할 수 있었습니다.

reaserver1 의 (portmapper, nfsd, mountd) = (111, 62001, 63001)
reaserver2 의 (portmapper, nfsd, mountd) = (111, 62002, 63002)

이 경우 마운트하고 NFS 사용까지는 아무 이상없이 되었지만 다음과 같은
문제점이 또 생겼습니다.

< 문제점 2 >

umount 요청시 또 한번 portmapper 에게 nfsd, mountd 의 포트번호를 문의한다는
것이 문제입니다.

예를 들어 portmapper 요청, mount 요청, NFS 사용까지 realserver1 을 한 후에
umount 요청을 보낼 경우 이 요청이 realserver2 로 스케줄 되었습니다.
그래서 실제로 마운트하고 있지도 않은 realserver2 로 요청이 전송되는 문제가
발생하였습니다.

그래서 이 경우에는 ipvsadm 의 persistent 옵션을 이용해서 timeout 을 길게
주어 보았더니 우선 umount 요청까지 realserver1 으로 전송되고 정상적으로
NFS 사용을 마치는 것을 확인할 수 있었습니다.

지금까지는 이런 방법을 써서 대충 NFS 사용은 되긴 하는 것 같은데
이렇게 하는 것이 정확한 방법인지는 의심이 많이 갑니다.

그리고 지금은 우선 persistent 옵션의 timeout 값을 7200 (두 시간) 으로 하여
테스트해보았는데 무한대로 하려면 어떻게 해야할지도 잘 모르겠습니다.
(ipvsadm 에 줄 수 있는 값은 31일 정도까지가 최대치인거 같습니다.)
무한대로 한다는 것은 결국 로드밸런싱이 안 되는 것이 아닌가 하는 생각도 들고요.

LVS mini-howto, howto 문서를 모두 읽어 보았지만 NFS 서비스를 로드밸런싱하는
것이 가능하다는 얘기는 있지만 정확하게 어떻게 해야 하는 것인지에 대해서는
잘 안 나와있더군요.

혹시 LVS 를 이용해서 NFS 로드밸런싱하는 것을 테스트해 보신 분 계시면
설정방법을 좀 알려주셨으면 합니다. 설정방법이 있는 문서를 알려주셔도
감사하겠습니다.

두서없이 좀 질문이 길어졌읍니다. 답변 기다리겠습니다.
감사합니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.