ipvsadm을 사용하면, 하나의 IP로 들어오는 네트워크 트래픽을 여러대의 Machine으로 분산시킬수 있다.
트래픽을 분산시키는 기능을 하는 Machine을 Load Balancer라고 하며, 그 설정 방법은 다음과 같다.
Load Balancer는 실행되는 프로세스가 그다지 고사양을 요구하지 않으므로, 저렴한 중고PC를 사용해서 만들 수 있다.

1. NAT의 설정예제(Network Address Translation)
로드밸런서가 패킷 매스커레이딩을 처리하도록 하기 위해 다음과 같이 설정한다.
(내부에서 처리후에 다시 나가는(out) 패킷의 주소를 손질한다.)

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE  -->유동 ip
iptables -t nat -A POSTROUTING -o eth0 -j SNAT [eth0 ip]  -->고정 ip

웹 서버를 설정하는 경우, 가상 서버의 80 포트에 대해 스케줄링 알고리즘을 설정한다.

ipvsadm -A -t [가상서버의ip=로드밸런서ip]:80 -s wlc

wlc는 가중 최소 연결 방식을 나타낸다. ipvsadm에는  rr(round robin), wrr(weighted round robin), lc(least-connection), wlc(weighted least-connection) 와 같은 여러가지 스케줄링 알고리즘을 선택할 수 있다.

로드밸런서에 실제 서버들을 다음과 같이 추가한다.

ipvsadm -a -t [가상서버의ip=로드밸런서ip]:80 -R 192.168.0.11:80 -m 
ipvsadm -a -t [가상서버의ip=로드밸런서ip]:80 -R 192.168.0.12:80 -m -w 2 --> 가중치가 2


예제) Round Robin 방식을 사용하는 5개의 machine 설정

ipvsadm -A -t 207.175.44.110:80 -s rr

ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.1 -m
ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.2 -m
ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.3 -m
ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.4 -m
ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.5 -m

2. 직접 라우팅 설정예제
설정 환경 : 
시스템  네트워크 : 172.26.20.xxx
로드밸런서  주소 : 172.26.20.111
실제 서버의 주소 : 172.26.20.112, 172.26.20.113, 172.26.20.114
가상 서버의 주소 : 172.26.20.110
외부에서는 가상서버 주소로 접속할 수 있다.

로드밸런서의 설정

ifconfig eth0 172.26.20.111 netmask 255.255.255.0 broadcast 172.26.20.255 up
route add -net 172.26.20.0 netmask 255.255.255.0 dev eth0
ifconfig eth0:0 172.26.20.110 netmask 255.255.255.255 broadcast 172.26.20.110 up
route add -host 172.26.20.110 dev eth0:0

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

ipvsadm -A -t 172.26.20.110:23 -s wlc
ipvsadm -a -t 172.26.20.110:23 -r 172.26.20.112 -g
ipvsadm -a -t 172.26.20.110:23 -r 172.26.20.113 -g
ipvsadm -a -t 172.26.20.110:23 -r 172.26.20.114 -g

실제 서버 1번에서 다음과 같이 설정한다. 다른 실제 서버의 경우 112를 113, 114 등으로 변경해야 한다.

ifconfig eth0 172.26.20.112 netmask 255.255.255.0 broadcast 172.26.20.255 up
route add -net 172.26.20.0 netmask 255.255.255.0 dev eth0
ifconfig lo:0 172.26.20.110 netmask 255.255.255.255 broadcast 172.26.20.110 up
route add -host 172.26.20.110 dev lo:0

echo 1 > /proc/sys/net/ipv4/ip_forward
ipvsadm -A -t 172.26.20.110:23 -s wlc
ipvsadm -a -t 172.26.20.110:23 -r 172.26.20.112 -g

그리고 실제 서버에서 다음과 같이 설정한다.

echo 1 > /proc/sys/net/ipv4/ip_forward
ifconfig lo:0 172.26.20.110 netmask 255.255.255.255 broadcast 172.26.20.110 up
route add -host 172.26.20.110 dev lo:0
echo 1 > /proc/sys/net/ipv4/conf/all/hidden
echo 1 > /proc/sys/net/ipv4/conf/lo/hidden

참고 : NAT를 사용하는 경우에는 테스트가 된 상태이며, 직접라우팅의 경우에는 테스트가 되지 않은 상태임.

 

블로그 이미지

커뉴

이 세상에서 꿈 이상으로 확실한 것을, 인간은 가지고 있는 것일까?

,

인터넷 공유기는 대부분 linux를 OS로 사용한다.
조그마한 플래쉬메모리에 리눅스 커널을 최대한 컴팩트하게 빌드해서 제품으로 팔고 있다.
즉, 리눅스의 특정 기능을 사용하면 인터넷 공유기와 같은 기능을 할 수 있다는 것이다.

그 기능이 바로 iptables라는 프로그램을 사용하는 것이다.

iptables을 Linux에서 사용하는 방법은 다음과 같이 하면 된다.
예제) 
IP공유용 리눅스 머신에서 다음과 같이 설정.
외부에서 사용하는 IP : [공인IP]
내부에서 사용하는 IP : 192.168.0.X
외부에서 접근하는 port : 80,21,22
외부인터넷 랜카드 : eth0

echo "1" > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to [공인IP]
/sbin/iptables -t nat -A PREROUTING -p tcp -d [공인IP] --dport 80 -j DNAT --to 192.168.0.3:80
/sbin/iptables -t nat -A PREROUTING -p tcp -d [공인IP] --dport 21 -j DNAT --to 192.168.0.4:21
/sbin/iptables -t nat -A PREROUTING -p tcp -d [공인IP] --dport 22 -j DNAT --to 192.168.0.3:22
/sbin/iptables -A INPUT -i eth0 -j ACCEPT
/sbin/iptables -A OUTPUT -o eth0 -j ACCEPT


iptables는 커널 2.3.15이상 부터 지원된다. 현재는 커널 2.6이 거의 주류를 있으므로, 그냥 위 명령을 실행하면 리눅스 머신이 IP를 공유할 수 있게 해줄것이다.

자세한 iptables의 설명은 man iptables하면 확인할 수 있다.

 

블로그 이미지

커뉴

이 세상에서 꿈 이상으로 확실한 것을, 인간은 가지고 있는 것일까?

,

MySQL을 사용하다 보면 백업을 하고 다시 복구 해야 될때가 종종 있습니다. 그럴때는 번거롭게 디렉토리 전체를 복사하시지 말고, 간단한 프로그램으로 백업 복구 가능합니다.

일단 백업하는 방법은 mysqldump라는 프로그램으로 백업 할 수가 있습니다.

mysql의 bin 디렉토리 내에 mysqldump라는 프로그램이 있다는 것을 잊으시면 안됩니다.

mysqldumpdml 위치 확인
[root@ linux]#find / -name  mysqldump -print 
/usr/local/mysql/mysqldump

mysqldump 이용해서 백업
[root@ linux]#mysqldump -u 아이디 -p 암호  DB이름 > [백업으로 저장될 파일이름]

백업 된 파일을 이용해서 데이터 베이스 복구
[root@ linux]#mysql -u 아이디   -p 암호   DB이름   <   [백업 저장되었던 파일이름]



 

블로그 이미지

커뉴

이 세상에서 꿈 이상으로 확실한 것을, 인간은 가지고 있는 것일까?

,

# MASQUERADE, IP공유기

# 마스커레이드 할때는 꼭 포워딩이 가능하도록
echo "1" > /proc/sys/net/ipv4/ip_forward


#FireWall(방화벽 설정입니다,) 
#기본 정책을 accept로 사용했습니다. 
#방화벽을 사용하지 않는거나 마찬가지로 단순히 인터넷 공유를 위해서 ... 
/sbin/iptables -P INPUT ACCEPT

#아래는 방화벽 설정해서 사용할때 사용하는 것입니다. 
#인터넷 공유할때 좀 편하게 사용하기 위해서 다음설정은 주석 처리 했습니다. 
#/sbin/iptables -P INPUT DROP 
#/sbin/iptables -A INPUT -s 0/0 -d 218.155.15.94 -p tcp --dport www -j ACCEPT 
#/sbin/iptables -A INPUT -s 0/0 -d 218.155.15.94 -p tcp --dport ssh -j ACCEPT 
#/sbin/iptables -A INPUT -s 0/0 -d 218.155.15.94 -p tcp --dport ftp -j ACCEPT 
#/sbin/iptables -A INPUT -s 0/0 -d 218.155.15.94 -p tcp --dport 4661 -j ACCEPT 
#/sbin/iptables -A INPUT -s 0/0 -d 218.155.15.94 -p udp --dport 10712 -j ACCEPT 
#/sbin/iptables -A INPUT -s 0/0 -d 218.155.15.94 -p tcp --dport 53 -j ACCEPT 
#/sbin/iptables -A INPUT -s 0/0 -d 218.155.15.94 -p udp --dport 53 -j ACCEPT 
#/sbin/iptables -A INPUT -j DROP 
#/sbin/iptables -A INPUT -j LOG

#/usr/local/sbin/iptables -A OUTPUT -s 218.155.15.94 -d 0/0 -j ACCEPT 
#아웃 바운드 기본 정책으로 설정해도 무방 합니다.

#Ping DROP 
#Ping으로 여러가지 네트워크 자원에대한 소비를 없애고자. 에코 리퀘스트는 아예 드랍시킵니다. 
#/sbin/iptables -A INPUT -s 0/0 -d 218.155.15.94 -p icmp --icmp-type echo-request -j DROP

#MASQUERADE 
#인터넷 공유를 위한 설정입니다. 
#나가는 패킷을 마스쿼레이딩해야 되기때문에 다음과 같이 설정합니다. 
#아래라인만 설정해줘도 마스쿼레이딩 됩니다. 
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 
#인풋 인터페이스는 모두다 받아들임 
/sbin/iptables -A INPUT -i eth0 -j ACCEPT 
#아웃풋 인터페이스는 모두다 받아들임 
/sbin/iptables -A OUTPUT -o eth0 -j ACCEPT

#예전에 ipchains를 사용할때 쓰던 마스쿼레이딩 입니다. 

# IPCHAINS 
#/sbin/ipchains -P forward DENY 
#/sbin/ipchains -A forward -i eth0 -s 192.168.0.0/24 -d 0.0.0.0/0 -j MASQ


 

#방화벽 구성예제

/usr/local/sbin/iptables -P INPUT DROP
/usr/local/sbin/iptables -A INPUT -s 0/0 -d 21.15.15.94 -p tcp --dport www -j ACCEPT
/usr/local/sbin/iptables -A INPUT -s 0/0 -d 21.15.15.94 -p tcp --dport ssh -j ACCEPT
/usr/local/sbin/iptables -A INPUT -s 0/0 -d 21.15.15.94 -p tcp --dport ftp -j ACCEPT
/usr/local/sbin/iptables -A INPUT -s 0/0 -d 192.168.0.2 -p tcp --dport 4661 -j ACCEPT
/usr/local/sbin/iptables -A INPUT -s 0/0 -d 192.168.0.2 -p udp --dport 10712 -j ACCEPT

#Ping DROP
/usr/local/sbin/iptables -A INPUT -s 0/0 -d 21.15.15.94 -p icmp --icmp-type echo-request -j DROP
#Traceroute DROP
/usr/local/sbin/iptables -A INPUT -s 0/0 -d 21.15.15.94 -p udp --dport 33435:33525 -j DROP
#MASQUERADE
/usr/local/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

/usr/local/sbin/iptables -A INPUT -i eth0 -j ACCEPT
/usr/local/sbin/iptables -A OUTPUT -o eth0 -j ACCEPT

블로그 이미지

커뉴

이 세상에서 꿈 이상으로 확실한 것을, 인간은 가지고 있는 것일까?

,

# KOREAN

사설 IPv4 주소  :
10.0.0.0 - 10.255.255.255
172.16.0.0 - 172.31.255.255
192.168.0.0 - 192.168.255.255

루프백 IPv4 주소 :
127.0.0.0 - 127.255.255.255

멀티캐스트 IPv4 주소 :
224.0.0.0 - 239.255.255.255

실험용 IPv4 주소 :
240.0.0.0 - 255.255.255.255


# ENGLISH

Private IP Address :
10.0.0.0 - 10.255.255.255
172.16.0.0 - 172.31.255.255
192.168.0.0 - 192.168.255.255

Loopback Address  :
127.0.0.0 - 127.255.255.255

Multicast Address :
224.0.0.0 - 239.255.255.255

Experimental Address :
240.0.0.0 - 255.255.255.255    

블로그 이미지

커뉴

이 세상에서 꿈 이상으로 확실한 것을, 인간은 가지고 있는 것일까?

,