Centos 7에서 keepalived를 사용하여 IP 장애 조치를 테스트하려고 합니다. 가상 머신에 Centos 7 인스턴스 3개가 설치되어 있습니다. 그래서 서버가 3개 있습니다. 그 중 두 개에서 keepalived를 실행하려고 하는데, 세 번째 센토가 실제 서버 역할을 하고 요청이 해당 서버로 전달됩니다. Keepalived의 구성은 마지막에 제공됩니다. conf 파일의 192.168.10.40은 실제 서버의 IP 주소입니다. 실제 서버에서는 작은 Nodejs 서버를 실행하고 요청이 전송되면 성공으로 응답합니다. 192.168.10.40:3869의 nodejs 서버에 직접 요청을 보낼 때. 응답은 하는데 가상IP 192.168.10.100, 포트 3869를 사용하여 접속하려고 하면 응답이 없습니다. Keepalived는 두 서버 모두에서 제대로 작동하지만.
메인 서버에서
Vrrp_instance_pi1 {
state MASTER
interface enp0s8
virtual_router_id 102
priority 101
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
192.168.10.100/24
}
}
virtual_server 192.168.10.100 3869 {
delay_loop 10
lb_algo rr
lb_kind DR
persistence_timeout 9600
real_server 192.168.10.40 3869 {
weight 1
TCP_CHECK {
connect_timeout 20
connect_port 80
}
}
}
백업 서버에서
Vrrp_instance_pi1 {
state BACKUP
interface enp0s8
virtual_router_id 102
priority 99
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
192.168.10.100/24
}
}
virtual_server 192.168.10.100 3869 {
delay_loop 10
lb_algo rr
lb_kind DR
persistence_timeout 9600
real_server 192.168.10.40 3869 {
weight 1
TCP_CHECK {
connect_timeout 20
connect_port 80
}
}
}
답변1
NodeJS 서버에서 유동 IP를 가리키도록 기본 경로를 다시 정의합니다.192.168.10.100
$ sudo ip route del 0/0
$ sudo route add default gw 192.168.10.100
두 라우터 모두에서 몇 가지 NAT 규칙을 만듭니다.
$ sudo iptables -t nat -F
$ sudo iptables -t mangle -F
$ sudo iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to 192.168.10.100
$ sudo iptables -t nat -A PREROUTING -d 192.168.10.100 -p tcp --dport 3869 -j DNAT --to 192.168.10.40