LVS 四层结构(最多实现到iso第四层:传输层的功能
部署NAT模式集群案例
创建3台主机,分别为:lvs 、 webserver1 、 webserver2,其中lvs有两张网卡分别是net网卡为外网和仅主机内网
主机名 | 网卡 | IP地址 | 网关 |
lvs | net和主机 | 192.168.0.100/24;172.25.250.100/24 | |
server1 | 主机 | 192.168.0.10 | 192.168.0.100 |
server2 | 主机 | 192.168.0.20 | 192.168.0.100 |
lvs的集群
[root@lvs ~]# sysctl -a | grep ip_forward #改成1打开内核路由功能
net.ipv4.ip_forward = 0
net.ipv4.ip_forward_update_priority = 1
net.ipv4.ip_forward_use_pmtu = 0net.ipv4.ip_forward=0
[root@lvs ~]# cat /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
[root@lvs ~]# vim /etc/sysctl.conf
-bash: vim: command not found
[root@lvs ~]# vi /etc/sysctl.conf
[root@lvs ~]# sysctl -p #查看命令
net.ipv4.ip_forward = 1
server2
server1
[root@server1 ~]# dnf install httpd -y
[root@server1 ~]# echo " webserver1 - 192.168.0.10" > /var/www/html/index.html
[root@server1 ~]# systemctl restart httpd[root@server1 ~]# systemctl stop firewalld
[root@server2 ~]# echo " webserver1 - 192.168.0.10" > /var/www/html/index.html #其他的与server1相同
要添加端口
[root@lvs ~]# ipvsadm -A -t 172.25.250.100:80 -s rr
[root@lvs ~]# ipvsadm -a -t 172.25.250.100:80 -r 192.168.0.10:80 -m
[root@lvs ~]# ipvsadm -a -t 172.25.250.100:80 -r 192.168.0.20:80 -m
部署DR模式集群案例
[root@server1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@server1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce[root@server1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@server1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce ##rs主机不对外响应 rs主机都要添加[root@lvs ~]# ip a a 192.168.0.200/32 dev lo #在lvs主机中和rs主机中添加vip
[root@server1 ~]# ip a a 192.168.0.200/32 dev lo #临时修改ip命令 一定要32
[root@server2 ~]# ip a a 192.168.0.200/32 dev lo
[root@lvs ~]# ipvsadm -A -t 192.168.0.200:80 -s wrr #权重算法
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g -w 1
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g -w 2
[root@lvs ~]# ipvsadm -A -t 192.168.0.200:80 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g
FO调度算法:静态;常用作灰度发布
2.OVF调度算法:动态;
以http和https为例,当我们在RS中同时开放80和443端口,那么默认控制是分开轮询的,这样我们就出
现了一个轮询错乱的问题
当我第一次访问80被轮询到RS1后下次访问443仍然可能会被轮询到RS1上
lvs火墙标记:
在webserver1 和 webserver2 上
[root@server1 ~]# dnf install mod_ssl -y
[root@server1 ~]# echo " webserver1 172.25.250.10" >/var/www/html/index.html
[root@server1 ~]# ip a a 172.25.250.200 dev lo
[root@server1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@server1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@server1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@server1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
下图是lvs
在lvs上
[root@haproxy ~]# ipvsadm -A -t 172.25.250.200:80 -s rr
[root@haproxy ~]# ipvsadm -a -t 172.25.250.200:80 -r 172.25.250.10:443 -g
[root@haproxy ~]# ipvsadm -a -t 172.25.250.200:80 -r 172.25.250.20:443 -g
[root@haproxy ~]# ipvsadm -A -t 172.25.250.200:443 -s rr
[root@haproxy ~]# ipvsadm -a -t 172.25.250.200:443 -r 172.25.250.20:443 -g
[root@haproxy ~]# ipvsadm -a -t 172.25.250.200:443 -r 172.25.250.10:443 -g
[root@haproxy ~]# ipvsadm -LN
[root@localhost ~]# curl 172.25.254.200;curl -k https://172.25.254.200
webserver2 - 172.25.254.20
webserver2 - 172.25.254.20
[root@localhost ~]# curl 172.25.254.200;curl -k https://172.25.254.200
webserver1 - 172.25.254.10
webserver1 - 172.25.254.10 俩字访问都是同一个
在lvs上修改
[root@haproxy ~]# iptables -t mangle -A PREROUTING -d 172.25.250.200 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 66
[root@haproxy ~]# iptables -t mangle -nL[root@haproxy ~]# ipvsadm -C
[root@haproxy ~]# ipvsadm -A -f 66 -s rr
[root@haproxy ~]# ipvsadm -a -f 66 -r 172.25.250.10 -g
[root@haproxy ~]# ipvsadm -a -f 66 -r 172.25.250.20 -g
[root@haproxy ~]# ipvsadm -Ln
在client
总结
一、LVS集群概述
- 定义:LVS集群是一个基于IP负载均衡技术和基于内容请求分发技术的虚拟服务器集群系统。
- 目标:提高应用系统的响应能力、可靠性和CPU运算速度,获得高并发、高负载的整体性能。
- 特点:
- 高效的数据处理能力,工作在网络层,由操作系统内核直接处理流量。
- 高可用性,通过负载均衡和容错机制确保服务连续性。
- 可扩展性,支持动态添加或删除后端服务器。
- 低成本,将多台低性能的服务器组合成一个高性能的服务器集群。
二、LVS集群的组成
- 负载均衡层(Load Balancer):
- 一台或多台LVS服务器构成负载调度器,也称为Director Server。
- 负责接收客户端的请求,并根据调度算法将请求分发给后端的Real Server。
- 监控Real Server的健康状况,动态地从LVS路由表中添加或剔除不健康的服务器。
- 后端服务器(Real Server/Backend Server):
- 一台或多台实际运行的应用服务器。
- 负责处理LVS分发过来的请求,并将处理结果返回给客户端。
- Real Server之间可以通过有效网络互连,实现数据的共享和通信。
- 共享存储(可选):
- 为后端服务器提供稳定、一致的文件存取服务,确保整个集群的统一性。
- 可以使用NAS设备或提供NFS共享服务的专用服务器。
三、LVS集群的工作模式
LVS集群支持多种工作模式,每种模式都有其特点和适用场景:
- NAT(Network Address Translation)模式:
- 修改请求报文的目标IP地址和端口,将请求转发给后端服务器。
- 后端服务器的响应报文通过调度器返回给客户端,因此调度器容易成为瓶颈。
- 支持端口映射,可以修改请求报文的目标端口。
- DR(Direct Routing)模式:
- 通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变。
- 请求报文要经由Director,但响应不能经由Director,而是由RS直接发往Client。
- 不支持端口映射。
- TUN(IP Tunneling)模式:
- 不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而是在原IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS。
- RS直接响应给客户端(源IP是VIP,目标IP是CIP)。
- 支持跨网络部署集群节点,但响应报文仍然由RS直接返回给客户端。
- RS的OS得支持隧道功能。
- FULLNAT模式:
- 通过同时修改请求报文的源IP地址和目标IP地址进行转发。
- 请求和响应报文都经由Director。
- 支持端口映射。
四、LVS集群的优势
- 高性能:LVS工作在网络层,由操作系统内核直接处理流量,具有高效的数据处理能力。
- 高可用性:通过负载均衡和容错机制,确保集群在部分服务器故障时仍能对外提供服务。
- 可扩展性:支持动态添加或删除后端服务器,以适应业务规模的变化。
- 低成本:将多台低性能的服务器组合成一个高性能的服务器集群,降低了硬件成本。
五、LVS集群的应用场景
LVS集群广泛应用于需要高并发、高可用性和高性能的互联网服务场景,如Web服务器集群、数据库服务器集群、应用服务器集群等。通过LVS集群,可以实现请求的均衡处理,提高系统的整体响应能力和处理能力,从而满足大规模用户访问的需求。