Keepalived LoadBalacing
LVS Config
## Pool ID
virtual_server <WAN "frontend" IP> 80 {
delay_loop 6
lb_algo sh # source hash
lb_kind NAT
protocol TCP
real_server <LAN "backend" IP Server 1> 80 {
weight 1
TCP_CHECK {
connect_timeout 3
}
}
real_server <LAN "backend" IP Server 2> 80 {
weight 1
TCP_CHECK {
connect_timeout 3
}
}
}
virtual_server <WAN "frontend" IP> 443 {
delay_loop 6
lb_algo sh # source hash
lb_kind NAT
protocol TCP
real_server <LAN "backend" IP Server 1> 443 {
weight 1
TCP_CHECK {
connect_timeout 3
}
}
real_server <LAN "backend" IP Server 2> 443 {
weight 1
TCP_CHECK {
connect_timeout 3
}
}
}
VRRP
vrrp_instance VI_LOCAL {
state MASTER
interface eth1
virtual_router_id 51
priority 101
virtual_ipaddress {
10.X.X.X
}
track_interface {
eth0
eth1
}
}
vrrp_instance VI_PUB {
state MASTER
interface eth0
virtual_router_id 52
priority 101
virtual_ipaddress {
X.X.X.X
}
track_interface {
eth0
eth1
}
}
vrrp_instance VI_PUB2 {
state MASTER
interface eth0
virtual_router_id 53
priority 101
virtual_ipaddress {
X.X.X.X
}
track_interface {
eth0
eth1
}
}
sysctl
# Use ip that are not configured locally (HAProxy + KeepAlived requirements)
net.ipv4.ip_nonlocal_bind = 1
# Enable packet forwarding
net.ipv4.ip_forward=1
# Disables IP source routing
net.ipv4.conf.all.accept_source_route = 0
# Enable IP spoofing protection, turn on source route verification
net.ipv4.conf.all.rp_filter = 1
# Disable ICMP Redirect Acceptance
net.ipv4.conf.all.accept_redirects = 0
# Decrease the time default value for tcp_fin_timeout connection
net.ipv4.tcp_fin_timeout = 15
# Decrease the time default value for tcp_keepalive_time connection
net.ipv4.tcp_keepalive_time = 1800
# Enable TCP SYN Cookie Protection
net.ipv4.tcp_syncookies = 1
# Enable ignoring broadcasts request
net.ipv4.icmp_echo_ignore_broadcasts = 1
# Enable bad error message Protection
net.ipv4.icmp_ignore_bogus_error_responses = 1
# Log Spoofed Packets, Source Routed Packets, Redirect Packets
net.ipv4.conf.all.log_martians = 1
# Increases the size of the socket queue
net.ipv4.tcp_max_syn_backlog = 1024
# Increase the tcp-time-wait buckets pool size
net.ipv4.tcp_max_tw_buckets = 1440000
# Arp
net.ipv4.conf.lo.rp_filter = 0
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
DR
vim /etc/modules
iptable_mangle
xt_multiport
xt_MARK
ip_vs
ip_vs_rr
ip_vs_nq
ip_vs_wlc
${IPTABLES} -t mangle -A PREROUTING -p tcp -d <VIP-WAN>/32 -j MARK --set-mark 0x1
Keepalived
virtual_server fwmark 1 {
delay_loop 10
lb_algo lc
lb_kind DR
protocol TCP
persistence_timeout 28800
real_server <WAN-WEB1> 0 {
weight 1
TCP_CHECK {
connect_port 443
connect_timeout 3
}
}
real_server <WAN-WEB2> 0 {
weight 2
TCP_CHECK {
connect_port 443
connect_timeout 3
}
}
}