LVS简介
LVS主要起一个调度器的作用。通过负载均衡:LVS能够将流量均匀分配到多个服务器,避免单点故障;LVS具有高可用性:通过冗余配置,LVS可确保在某台服务器故障时,流量自动切换到其他可用服务器;LVS还支持多种负载均衡算法:如轮询、最少连接、基于IP哈希等。LVS可以和Linux操作系统组合来实现一个高性能、高可用的服务器群集。
LVS常见的工作模式
常见的工作模式有:NAT 、DR 2种模式
NAT模式
实验流程:
1.准备3台主机
lvs、web1、web2(按照下表配置网络)
主机名 | 网卡 | ip地址 | 网关 |
---|---|---|---|
lvs | vm8;vm1 | 192.168.160.100/24;172.25.254.100/24 | |
web1 | vm1 | 172.25.254.10/24 | 172.25.254.100 |
web2 | vm1 | 172.25.254.20/24 | 172.25.254.100 |
2.在2台web主机上配置apache服务
[root@web1 ~]# dnf install -y httpd
[root@web1 ~]# echo web1 - 172.25.254.10 > /var/www/html/index.html
[root@web1 ~]# systemctl enable httpd --now
[root@web1 ~]# curl 172.25.254.10
web1 - 172.25.254.10
3.在lvs中打开内核路由功能并关闭防火墙
[root@lvs ~]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 0
net.ipv4.ip_forward_update_priority = 1
net.ipv4.ip_forward_use_pmtu = 0[root@lvs ~]# vim /etc/sysctl.conf
添加 net.ipv4.ip_forward = 1
[root@lvs ~]# sysctl -p
net.ipv4.ip_forward = 1[root@lvs ~]# cat /etc/sysctl.conf
net.ipv4.ip_forward=1[root@lvs ~]# systemctl stop firewalld
[root@lvs ~]# setenforce 0
4.在lvs中检测web主机服务是否能访问得到:
[root@lvs ~]# curl 172.25.254.10
web1 - 172.25.254.10
[root@lvs ~]# curl 172.25.254.20
web2 - 172.25.254.20
5.在lvs中安装ipvsadm 软件,并添加lvs(调度器)规则 :
[root@lvs ~]# dnf install -y ipvsadm
[root@lvs ~]# ipvsadm -A -t 192.168.160.100:80 -s rr ##将一个虚拟服务添加到 IPVS,允许负载均衡到后端真实服务器。
[root@lvs ~]# ipvsadm -Ln ##列出当前 IP Virtual Server (IPVS) 的配置和状态
[root@lvs ~]# ipvsadm -a -t 192.168.160.100:80 -r 172.25.254.10:80 -m
##将 IP 地址为 172.25.254.10 的真实服务器添加到虚拟服务 192.168.160.100:80 中,并使用直接路由模式进行负载均衡。
[root@lvs ~]# ipvsadm -a -t 192.168.160.100:80 -r 172.25.254.20:80 -m
[root@lvs ~]# ipvsadm -Ln
测试,在一个shell环境里测试(需要配置好vm8的网络):
## 我们通过测试访问lvs的VIP地址,从而访问到了内部web服务器的CIP地址提供的服务
[root@client ~]# for i in {1..10}
do
curl 192.168.160.100
done
DR模式:
工作流程:
实验流程:
准备4台主机
router、lvs、web1、web2
主机名 | 网卡 | ip地址 | 网关 |
---|---|---|---|
router | vm8;vm1 | 192.168.160.100/24;172.25.254.100/24 | |
lvs | vm1;lo | 172.25.254.50/24;172.25.254.200/32 | 172.25.254.100 |
web1 | vm1;lo | 172.25.254.10/24;172.25.254.200/32 | 172.25.254.100 |
web2 | vm1;lo | 172.25.254.20/24;172.25.254.200/32 | 172.25.254.100 |
在router上配置:
nmcli connection modify ens33 ipv4.address 192.168.160.100/24
nmcli connection modify ens36 ipv4.address 172.25.254.100/24
nmcli connection up ens33
nmcli connection up ens36
在lvz上配置:
# nmcli connection modify Wired\ connection\ 1 ipv4.addresses 172.25.254.50/24 ipv4.gateway 172.25.254.100
# nmcli connection up Wired\ connection\ 1
# ip a a 172.25.254.200/32 dev lo
ipvsadm -A -t 172.25.254.200:80 -s wrr
ipvsadm -a -t 172.25.254.200:80 -r 172.25.254.10 -g
ipvsadm -a -t 172.25.254.200:80 -r 172.25.254.20 -g
在webserver1:
# nmcli connection modify ens36 ipv4.address 172.25.254.10/24 ipv4.gateway 172.25.254.100
# nmcli connection up ens36
# ip a a 172.25.254.200/32 dev lo## 禁止arp转发
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
在webserver2:
# nmcli connection modify ens36 ipv4.address 172.25.254.20/24 ipv4.gateway 172.25.254.100
# nmcli connection up ens36
# ip a a 172.25.254.200/32 dev loecho 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
在client:
nmcli connection modify ens33 ipv4.address 192.168.160.200/24 ipv4.gateway 192.168.160.100
nmcli connection up ens33
测试:在client上:
curl 172.25.254.200