1,lvs-dr原理图
2,准备工作:三台机子,lvs,real_1,real_2。
(1)都关闭防火墙和selinux
[root@localhost ~]# systemctl disable firewalld --now
[root@localhost ~]# setenforce 0
3,在lvs上配置,首先加一个公网网卡,然后配置负载均衡规则。
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# ls
ifcfg-ens33 ifdown-isdn ifdown-tunnel ifup-isdn ifup-Team
ifcfg-lo ifdown-post ifup ifup-plip ifup-TeamPort
ifdown ifdown-ppp ifup-aliases ifup-plusb ifup-tunnel
ifdown-bnep ifdown-routes ifup-bnep ifup-post ifup-wireless
ifdown-eth ifdown-sit ifup-eth ifup-ppp init.ipv6-global
ifdown-ippp ifdown-Team ifup-ippp ifup-routes network-functions
ifdown-ipv6 ifdown-TeamPort ifup-ipv6 ifup-sit network-functions-ipv6
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens36 #添加网卡后,我这里没出现ens36的网卡配置文件,所以自己就写了一个
[root@localhost network-scripts]# ls
ifcfg-ens33 ifdown-post ifup-bnep ifup-routes
ifcfg-ens36 ifdown-ppp ifup-eth ifup-sit
ifcfg-lo ifdown-routes ifup-ippp ifup-Team
ifdown ifdown-sit ifup-ipv6 ifup-TeamPort
ifdown-bnep ifdown-Team ifup-isdn ifup-tunnel
ifdown-eth ifdown-TeamPort ifup-plip ifup-wireless
ifdown-ippp ifdown-tunnel ifup-plusb init.ipv6-global
ifdown-ipv6 ifup ifup-post network-functions
ifdown-isdn ifup-aliases ifup-ppp network-functions-ipv6
[root@localhost network-scripts]# vim ifcfg-ens36
#修改为如下内容
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static" #设置为静态网址IP
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
DEVICE="ens36"
ONBOOT="yes"
IPADDR=192.168.163.100 #IP地址
PREFIX=24 #子网掩码24位
GATEWAY=192.168.163.2 #网关
DNS1=8.8.8.8 #域名解析服务器
[root@localhost network-scripts]# systemctl restart network
[root@localhost network-scripts]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:82:83:8a brd ff:ff:ff:ff:ff:ff
inet 192.168.163.162/24 brd 192.168.163.255 scope global noprefixroute dynamic ens33
valid_lft 1790sec preferred_lft 1790sec
inet6 fe80::dc6d:c524:26ee:93ff/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: ens36: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:82:83:94 brd ff:ff:ff:ff:ff:ff
inet 192.168.163.100/24 brd 192.168.163.255 scope global noprefixroute ens36
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe82:8394/64 scope link
valid_lft forever preferred_lft forever
[root@localhost network-scripts]# yum install -y ipvsadm
[root@localhost ~]# ipvsadm -A -t 192.168.163.100:80 -s rr #编写负载均衡规则
[root@localhost ~]# ipvsadm -a -t 192.168.163.100:80 -r 192.168.163.163:80
[root@localhost ~]# ipvsadm -a -t 192.168.163.100:80 -r 192.168.163.164:80
[root@localhost ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.163.100:80 rr
-> 192.168.163.163:80 Route 1 0 0
-> 192.168.163.164:80 Route 1 0 0
4,在real_1上,添加lvs上的公网IP地址到real_1上的主机本地网卡上,这样子的话就可以直接返回用户请求了,不用过lvs了。并且设置静默模式,然后开启精准回包。
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# ls
ifcfg-ens33 ifdown-isdn ifdown-tunnel ifup-isdn ifup-Team
ifcfg-lo ifdown-post ifup ifup-plip ifup-TeamPort
ifdown ifdown-ppp ifup-aliases ifup-plusb ifup-tunnel
ifdown-bnep ifdown-routes ifup-bnep ifup-post ifup-wireless
ifdown-eth ifdown-sit ifup-eth ifup-ppp init.ipv6-global
ifdown-ippp ifdown-Team ifup-ippp ifup-routes network-functions
ifdown-ipv6 ifdown-TeamPort ifup-ipv6 ifup-sit network-functions-ipv6
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:1 #添加一块本地公网网卡,用来精准回包
[root@localhost network-scripts]# ls
ifcfg-ens33 ifdown-post ifup-bnep ifup-routes
ifcfg-lo ifdown-ppp ifup-eth ifup-sit
ifcfg-lo:1 ifdown-routes ifup-ippp ifup-Team
ifdown ifdown-sit ifup-ipv6 ifup-TeamPort
ifdown-bnep ifdown-Team ifup-isdn ifup-tunnel
ifdown-eth ifdown-TeamPort ifup-plip ifup-wireless
ifdown-ippp ifdown-tunnel ifup-plusb init.ipv6-global
ifdown-ipv6 ifup ifup-post network-functions
ifdown-isdn ifup-aliases ifup-ppp network-functions-
[root@localhost network-scripts]# vim ifcfg-lo:1
#修改为如下内容
DEVICE=lo
IPADDR=192.168.163.100 #添加lvs公网IP
NETMASK=255.255.255.255 #子网掩码设置为32位,公网都是32位
ONBOOT=yes
NAME=loopback
[root@localhost network-scripts]# systemctl restart network
[root@localhost network-scripts]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet 192.168.163.100/32 brd 192.168.163.100 scope global lo #有这个就是好了
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:6c:64:87 brd ff:ff:ff:ff:ff:ff
inet 192.168.163.163/24 brd 192.168.163.255 scope global noprefixroute dynamic ens33
valid_lft 1799sec preferred_lft 1799sec
inet6 fe80::dc6d:c524:26ee:93ff/64 scope link tentative noprefixroute dadfailed
valid_lft forever preferred_lft forever
inet6 fe80::5ba9:8fb:3ae0:1fde/64 scope link tentative noprefixroute
valid_lft forever preferred_lft forever
[root@localhost network-scripts]# scp ./ifcfg-lo:1 192.168.163.164:`pwd` #传给另一个机器
[root@localhost ~]# vim /etc/sysctl.conf
# 加入如下内容
net.ipv4.conf.all.arp_ignore = 1 #设置为静默模式
net.ipv4.conf.all.arp_announce = 2 #打开精准回包
[root@localhost ~]# sysctl -p #当下生效,下次开机也生效
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
[root@localhost ~]# nginx
[root@localhost ~]# ss -lntp
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:80 *:* users:(("nginx",pid=2364,fd=6),("nginx",pid=2363,fd=6))
LISTEN 0 128 *:22 *:* users:(("sshd",pid=1143,fd=3))
LISTEN 0 100 127.0.0.1:25 *:* users:(("master",pid=1304,fd=13))
LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=1143,fd=4))
LISTEN 0 100 [::1]:25 [::]:* users:(("master",pid=1304,fd=14))
[root@localhost ~]# vim /etc/nginx/nginx.conf
keepalive_timeout 0; #将设置时间改为0,以便我们测试的时候看到变化,生产中就不要改了,原值为60
[root@localhost ~]# nginx -s reload #修改配置文件后,一定要重启服务
[root@localhost ~]# systemctl restart network #必须要重启网络,因为我们修改了配置文件