一、LVS相关原理
1.LVS简介
LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项 目,它的官方站点是www.linuxvirtualserver.org。现在LVS已经是 Linux标准内核的一部分,在 Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但是从Linux2.4内核以后,已 经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能。
使用LVS技术要达到的目标是:通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用 的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能
2.LVS体系结构
使用LVS架设的服务器集群系统有三个部分组成:最前端的负载均衡层(调度层DIP),用Load Balancer表示,中间的 服务器群组层(RIP),用Server Array表示,最底端的数据共享存储层(本实验不涉及),用Shared Storage表示。
3.LVS相关术语
名称 | 缩写 | 说明 |
虚拟IP地址(Virtual IP Address) | VIP | 客户端访问服务的ip |
真实IP地址(Real Server IP Address) | RIP | 集群服务器(real server)的ip |
Director的IP地址(Director IP Address) | DIP | Director用于连接内外网网络的IP地址 |
客户端主机IP地址(Client IP Address) | CIP | 客户端用户计算机请求集群服务器的IP地址,该地址用作 发送给集群的请求的源IP地址 |
4.LVS工作模式(重点分析VS/NAT、VS/DR模式)
共有三种模式:nat(地址转换)、tunnl(隧道)、dr(直连)
NAT优势:
• 部署简单:只需在负载均衡器上进行地址转换配置,内部服务器无需特殊设置,可使用私有IP地址,易于构建和管理小型负载均衡集群。• 易于管理:所有外部请求都由负载均衡器接收和分发,对后端服务器的管理相对集中,便于进行流量控制、监控和故障排查等操作。• 支持端口映射:能灵活地将外部请求的不同端口映射到后端服务器的不同端口,满足后端服务器提供多种服务且端口需求不同的情况。• 网络隔离性好:内部服务器使用私有IP,与外部网络隔离,增强了内部网络的安全性,减少了外部网络攻击的风险。
DR优势:
• 高性能:直接将请求数据包通过MAC地址转发到后端服务器,无需像NAT模式那样进行地址转换,减少了网络开销,提高了转发效率,能处理大量并发请求,提升系统整体性能。• 支持大规模集群:由于转发效率高,理论上可以连接的后端服务器数量更多,能更好地满足大规模服务器集群的负载均衡需求,实现更高的扩展性。• 对后端服务器要求低:后端服务器只需配置与负载均衡器在同一物理网段的IP地址,无需进行复杂的网络配置,兼容性好,可方便地添加或替换后端服务器。• 响应速度快:请求直接到达后端服务器,响应数据可以直接返回给客户端,无需经过负载均衡器再次转发,缩短了响应时间,提高了用户体验。
5 LVS调度算法(主要掌握标红即可)
当Director收到来自客户端计算机访问她的VIP上的集群服务的入站请求时,Director必须决定那个集 群节点应该获得请求。Director可用于做出该决定的调度方法分成两个基本类别:
固定调度算法:rr,wrr,dh,sh
动态调度算法:lc,wlc,lblc,lblcr,SED,NQ(后两种官方站点没提到)
算法 | 说明 |
rr | 轮循调度(Round-Robin),它将请求依次分配不同的RS,也就是在RS中均摊请求。这种 算法简单,但是只适合于处理性能相差不大的情况 |
wrr | 加权轮循调度(Weighted Round-Robin)它将依据不同RS的权值分配任务。权值较高的 RS将优先获得任务,并且分配到的连接数将比权值较低的RS更多。相同权值的RS得到相 同数目的连接数。 |
lc | 最小连接数调度(Least-Connection),IPVS表存储了所有的活动的连接。把心的连接请 求发送到当前连接数最小的RS。 |
wlc | 加权最小连接数调度(weighted leastconnection)假设各台RS的权值依次为wi (i=1..n),当前的TCP连接数依次为Ti(i=1..n),依次选取Ti/Wi为最小的RS作为下一个 分配的RS。 |
二、LVS-DR集群服务搭建
1.对real server 配置
1)下载nginx安装包,并写测试页面,启动服务
2)配置VIP
(1)命令格式
nmcli connection add type dummy ifname dummy1 ipv4.method manual ipv4.addresses 10.0.0.70/32 ####2台rs服务器相同操作或者采用子接口方式配置VIPifconfig eth160:70 192.168.63.70 netmask
255.255.255.255 up
3)arp抑制
#1.打开下面配置文件
vi /etc/sysctl.conf
#2.添加arp抑制
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.dummy1.arp_ignore = 1
net.ipv4.conf.dummy1.arp_announce = 2
#3. 重载配置文件
sysctl -p
(2)脚本配置
#!/bin/sh## Startup script handle the initialisation of LVS# chkconfig: - 28 72# description: Initialise the Linux Virtual Server for DR#### BEGIN INIT INFO# Provides: ipvsadm# Required-Start: $local_fs $network $named# Required-Stop: $local_fs $remote_fs $network# Short-Description: Initialise the Linux Virtual Server# Description: The Linux Virtual Server is a highly scalable and highly# available server built on a cluster of real servers, with the load# balancer running on Linux.# description: start LVS of DR-RIPLOCK=/var/lock/ipvsadm.lockVIP=192.168.95.70. /etc/rc.d/init.d/functionsstart() {PID=`ifconfig | grep lo:10 | wc -l`if [ $PID -ne 0 ];thenecho "The LVS-DR-RIP Server is already running !"else/sbin/ifconfig ens160s:70 $VIP netmask 255.255.255.255 broadcast $VIP up/sbin/route add -host $VIP dev ens160s:70echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "1" >/proc/sys/net/ipv4/conf/eth0/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/eth0/arp_announceecho "1" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/all/arp_announce/bin/touch $LOCKecho "starting LVS-DR-RIP server is ok !"fi}stop() {/sbin/route del -host $VIP dev lo:10/sbin/ifconfig lo:10 down >/dev/nullecho "0" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/eth0/arp_ignoreecho "0" >/proc/sys/net/ipv4/conf/eth0/arp_announceecho "0" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "0" >/proc/sys/net/ipv4/conf/all/arp_announcerm -rf $LOCKecho "stopping LVS-DR-RIP server is ok !"}status() {if [ -e $LOCK ];thenecho "The LVS-DR-RIP Server is already running !"elseecho "The LVS-DR-RIP Server is not running !"fi}case "$1" instart)start;;stop)stop;;restart)stopstart;;status)status;;*)echo "Usage: $1 {start|stop|restart|status}"exit 1esacexit 0
2.对direct server配置
1)行配置添加LVS服务并增加两台RS
再操作前要先安装ipvsadm服务
(1)命令配置
[root@localhost ~]# ipvsadm -A -t 192.168.63.70:80 -s rr #配置VIP[root@localhost ~]# ipvsadm -a -t 192.168.63.70:80 -r 192.168.63.11:80 -g -w 1 [root@localhost ~]# ipvsadm -a -t 192.168.63.70:80 -r 192.168.63.12:80 -g -w 1###添加两台RS [删除方法]# ipvsadm -D -t 192.168.63.70:80 -s wrr# ipvsadm -d -t 192.168.63.70:80 -r 192.168.63.11:80
[root@localhost ~]# ipvsadm –help-A 添加虚拟服务器-t 设置群集地址(VIP,Virtual IP)-s 指定负载调度算法-a 添加真实服务器-d 删除真实服务器-r 指定真实服务器(Real Server)的地址-m 使用NAT模式;-g、-i分别对应DR、TUN模式-w 为节点服务器设置权重,默认为1
(2)脚本配置
lvs director 上的脚本
=================================================================#!/bin/sh## Startup script handle the initialisation of LVS# chkconfig: - 28 72# description: Initialise the Linux Virtual Server for DR#### BEGIN INIT INFO# Provides: ipvsadm# Required-Start: $local_fs $network $named# Required-Stop: $local_fs $remote_fs $network# Short-Description: Initialise the Linux Virtual Server# Description: The Linux Virtual Server is a highly scalable and highly#
available server built on a cluster of real servers, with the load#
balancer running on Linux.# description: start LVS of DRLOCK=/var/lock/ipvsadm.lockVIP=192.168.63.70RIP1=192.168.63.11RIP2=192.168.63.12
DipName=ens160. /etc/rc.d/init.d/functionsstart() {PID=`ipvsadm -Ln | grep ${VIP} | wc -l`if [ $PID -gt 0 ];thenecho "The LVS-DR Server is already running !"else#Set the Virtual IP Address/sbin/ifconfig ${DipName}:70 $VIP broadcast $VIP netmask
255.255.255.255 up /sbin/route add -host $VIP dev ${DipName}:70 #基于子接口方式配置VIP#Clear IPVS Table/sbin/ipvsadm -C#Set Lvs/sbin/ipvsadm -At $VIP:80 -s rr /sbin/ipvsadm -at $VIP:80 -r $RIP1:80 -g/sbin/ipvsadm -at $VIP:80 -r $RIP2:80 -g/bin/touch $LOCK#Run Lvsecho "starting LVS-DR Server is ok !" fi}stop() { #停止LVS集群服务#clear Lvs and vip /sbin/ipvsadm -C/sbin/route del -host $VIP dev ${DipName}:70/sbin/ifconfig ${DipName}:10 down >/dev/nullrm -rf $LOCKecho "stopping LVS-DR server is ok !"}status() {if [ -e $LOCK ];thenecho "The LVS-DR Server is already running !"elseecho "The LVS-DR Server is not running !"fi}case "$1" instart)start;;stop)stop;;restart)stopstart;;status)status;;*)echo "Usage: $1 {start|stop|restart|status}"exit 1esacexit 0======================================================
2)查看ipvsadm配置
# ipvsadm -L -n
三、测试
1)上面是没关防火墙和seliunx前的测试