LVS (ipvs) 를 이용해서 NFS 를 로드밸런싱하는 방법
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 로드밸런싱하는 것을 테스트해 보신 분 계시면
설정방법을 좀 알려주셨으면 합니다. 설정방법이 있는 문서를 알려주셔도
감사하겠습니다.
두서없이 좀 질문이 길어졌읍니다. 답변 기다리겠습니다.
감사합니다.
댓글 달기