本文最后更新于 1039 天前,其中的信息可能已经有所发展或是发生改变。
术语
LB (Load Balancer 负载均衡)
HA (High Available 高可用)
Failover (失败切换)
Cluster (集群)
LVS (Linux Virtual Server Linux 虚拟服务器)
DS (Director Server),指的是前端负载均衡器节点
RS (Real Server),后端真实的工作服务器
VIP (Virtual IP),虚拟的 IP 地址,向外部直接面向用户请求,作为用户请求的目标的 IP 地址
DIP (Director IP),主要用于和内部主机通讯的 IP 地址
RIP (Real Server IP),后端服务器的 IP 地址
CIP (Client IP),访问客户端的 IP 地址
测试环境
软件环境:CentOS7、Keepalived、ipvsadm
DS1(MASTER):192.168.80.161
DS1(BACKUP):192.168.80.162
RS1:192.168.80.163:80 Nginx
RS1:192.168.80.164:80 Nginx
VIP:192.168.80.160
|
+----------------+-----------------+
| |
192.168.80.161|---- VIP:192.168.80.160 ----|192.168.80.162
+-------+--------+ +--------+-------+
| DS1 | | DS2 |
| LVS+Keepalived | | LVS+Keepalived |
+-------+--------+ +--------+-------+
| |
+-----------------+-----------------+
|
+------------+ | +------------+
| RS1 |192.168.80.163 |192.168.80.164 | RS2 |
| Web Server +--------------+--------------- + Web Server |
+------------+ +------------+
DS1、DS2
yum install ipvsadm keepalived -y
DS1
[root@node1 keepalived]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 60
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.80.160
}
}
virtual_server 192.168.80.160 80 {
delay_loop 3
lb_algo lc
lb_kind DR
persistence_timeout 0
protocol TCP
real_server 192.168.80.163 80 {
weight 1
TCP_CHECK {
connect_timeout 10
retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.80.164 80 {
weight 1
TCP_CHECK {
connect_timeout 10
retry 3
delay_before_retry 3
connect_port 80
}
}
}
DS2
[root@node2 keepalived]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state backup
interface ens33
virtual_router_id 60
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.80.160
}
}
virtual_server 192.168.80.160 80 {
delay_loop 3
lb_algo lc
lb_kind DR
persistence_timeout 0
protocol TCP
real_server 192.168.80.163 80 {
weight 1
TCP_CHECK {
connect_timeout 10
retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.80.164 80 {
weight 1
TCP_CHECK {
connect_timeout 10
retry 3
delay_before_retry 3
connect_port 80
}
}
}
DS1、DS2
重启 systemctl restart keepalived
[root@localhost ~]# systemctl restart keepalived
Nginx服务器的启动脚本
sysctl 开启IPV4转发 所有都操作一次
echo "net.ipv4.ip_forward =1" >> /etc/sysctl.conf && sysctl -p
#!/bin/bash
SNS_VIP=192.168.80.160
case "$1" in
start)
ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
/sbin/route add -host $SNS_VIP dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
route del $SNS_VIP >/dev/null 2>&1
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
bash vip.sh start
查看IP以及集群
watch ipvsadm -Ln --stats
查看负载均衡的信息
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
-> RemoteAddress:Port
TCP 192.168.80.160:80 4 183 0 36878 0
-> 192.168.80.163:80 1 77 0 15726 0
-> 192.168.80.164:80 3 106 0 21152 0
访问VIP
while true ; do curl 172.17.13.252; sleep 1;done
[root@node2 keepalived]# while true ; do curl 192.168.80.160; sleep 1;done
192.168.80.164
192.168.80.163
192.168.80.164
192.168.80.163
192.168.80.164
192.168.80.163
192.168.80.164
192.168.80.163