iptables 를 이용한 로드밸런싱 구현하기

iptables 를 이용하여 3대의 웹서버가 로드밸런싱이 되도록 구축해 보자.

다음 네트워크 구성을 예시로 한다.

웹클라이언트가 접근할 수 있는 공용망 IP 를 210.0.0.200 으로 가정하고
그 하위에 NAT 로 구성된 서버 10.0.0.2 ~ 4 인 3대의 웹서버로 로드밸런싱을 구성하는 예.

iptables_network_diagram

 

10.0.0.2 ~ 4 의 서버들은 게이트웨이가 10.0.0.1 로 설정되어야 하며 CentOS 에서는 10.0.0.0/24 의 네트워크가 외부 네트워크로 인터넷이 되도록 NAT 설정이 되어야 한다.

# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

리눅스 자체에 패킷포워딩이 설정되어야 하므로 다음과 같이 설정한다.

 

# echo "1" > /proc/sys/net/ipv4/ip_forward

예를 들어 80 포트로 인입되는 패킷을 10.0.0.2 – 4 까지의 80 포트로 부하 분산을 할 경우 다음과 같은 2가지 방법으로 구현할 수 있다.

패킷이 오는 순서대로 분산


# iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 80 -m state --state NEW -m statistic --mode nth --every 3 --packet 0 -j DNAT --to-destination 10.0.0.2:80

# iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 80 -m state --state NEW -m statistic --mode nth --every 3 --packet 1 -j DNAT --to-destination 10.0.0.3:80

# iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 80 -m state --state NEW -m statistic --mode nth --every 3 --packet 2 -j DNAT --to-destination 10.0.0.4:80

 

패킷을 임의로 분산 (단 가중치를 두어 어느정도 분산율을 조정)


# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m statistic --mode random --probability .33 -j DNAT --to-destination 10.0.0.2:80

# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m statistic --mode random --probability .33 -j DNAT --to-destination 10.0.0.3:80

# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m statistic --mode random --probability .33 -j DNAT --to-destination 10.0.0.4:80

 

글쓴이: winix

제 연락처는 winix@lunalabs.net 입니다.

댓글 남기기