1、什么是LVS
LVS是Linux Virtual Server的简写,以为Linux虚拟服务器,是一个虚拟服务器集群,其具有很好的可伸缩性、可靠性、可管理性。LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。下图是一个简单的LVS拓扑
2、LVS集群的术语
VS:Virtual Server RS:Real Server CIP:Client IP VIP:Virtual Server IP RIP:Real Server IP DIP:Director IP
3、LVS集群的类型
lvs-nat:修改请求报文的目标IP
通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。 也就是多目标ip的DNAT机制,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发;lvs-nat有以下特性: (1)RIP和DIP必须在同一个IP网络,且应该使用私网地址;RS的网关要指向DIP; (2)请求报文和响应报文都必须应有Director转发;Director易于成为系统瓶颈; (3)支持端口映射,可修改请求报文的目标PORT; (4)VS必须是Linux系统,RS可以是任意系统;
lvs-dr:操作封装新的mac地址(直接路由)
VS/DR通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。同VS/TUN技术一样,VS/DR技术可极大地 提高集群系统的伸缩性。这种方法没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器与真实服务器都有一块网卡连 在同一物理网段上。 Director和各RS都得配置使用VIP; (1)确保前段路由器将目标IP为VIP 的请求报文发往Director; (a)在前段网关做静态绑定; (b)在RS上使用arptables; (c)在RS上修改内核参数以限制ARP通告及应答级别; arp_announce arp_ignore (2)RS的DIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一个IP网络,RIP的网关不能指向DIP,以确保响应报文不会经由Director (3)RS跟Director要在同一个物理网络 (4)请求报文要经由Director,但响应不能经由Director,而是由RS直接发往Client (5)不支持端口映射
lvs-tun:在原请求ip报文之外新加一个ip首部(IP隧道)
采用NAT技术时,由于请求和响应报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。为了解决这个问题,调度器把请求报 文通过IP隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。由于一般网络服务应答比请求报文大许多,采用 VS/TUN技术后,集群系统的最大吞吐量可以提高10倍。 (1)DIP , VIP , RIP都应该是公网ip (2)RS的网关不能,也不可能指向DIP; (3)请求报文要经由Director,但响应不能经由Director; (4)不支持端口映射; (5)RS的OS得支持隧道功能;
lvs-fullnat:修改请求报文的源IP和目标IP
通过同时修改请求报文的源ip地址和目标IP地址进行转发; (1)VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不指向DIP; (2)RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往client; (3)请求和响应报文都经由Director; (4)支持端口映射;
4、ipvs调度方法
针对不同的网络服务需求和服务器配置,调度器可以分为静态调度和动态调度
(1)静态调度:根据调度算法本身进行调度 RR:roundrobin,轮询:调度器通过"轮询"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。 WRR:weighted RR,加权轮询:调度器通过"加权轮询"调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。 SH:source hashing,源地址哈希:将来自与同一个ip地址的请求始终发往第一次挑中的RS,从实现会话绑定;保持会话 DH:destination hashing,目标地址哈希:将发往同一个目标地址 的请求始始终转发至第一次挑中的RS; (2)动态调度:根据每台RS当前的负载状态及调度算法进行调度 LC : least connections 最小连接:调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载。 WLC : weighted LC 加权最小连接 (默认的,值越大权重越大):在集群系统中的服务器性能差异较大的情况下,调度器采用"加权最少链接"调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。 SED:shortest expection delay 最短期望延迟 NQ : Never Queue LBLC : Locality-Based LC,动态的DH算法:"基于局部性的最少链接" 调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器 是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链接"的原则选出一个可用的服务 器,将请求发送到该服务器。 LBLCR:LBLC with Replication,带复制功能的LBLC:"带复制的基于局部性最少链接"调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个 目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务 器组,按"最小连接"原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按"最小连接"原则从这个集群中选出一 台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的 程度。
5、ipvsadm命令使用
ipvsadm是Linux虚拟服务器的管理工具,系统默认没有安装,需要执行yum install ipvsadm命令进行安装
(1)管理集群服务
增加:ipvsadm -A -t|u|f service-address [-s scheduler] -p [timeout] [root@localhost ~]# ipvsadm -A -t 10.1.0.5 -s rr 修改:ipvsadm -E -t|u|f service-address [-s scheduler] -p [timeout] 删除: ipvsadm -d -t|u|f service-address -t:tcp协议端口,表示VIP是tcp端口 -u:udp协议端口,表示VIP是udp端口 -f:firewall mark,是一个数字
(2)管理集群上的RS
增加:ipvsadm -a -t|u|f service-address -r server-address [-g|i|m] [-w weight] 修改:ipvsadm e -t|u|f service-address -r server-address [-g|i|m] [-w weight] 删除:ipvsadm -d -t|u|f service-address -r server-address -g:gateway,lvs-dr类型 -i:ipip,lvs-tun类型 -m:masquerade,lvs-nat类型
(3)清空定义的所有内容
ipvsadm -C
(4)查看定义的集群
ipvsadm -L | l [options] --numeric -n numeric output of addresses and ports --exact expand numbers (display exact values) --connection -c output of current IPVS connections --stats output of statistics information 统计数据 --rate output of rate information 速率
(5)保存和重载定义的集群
ipvsadm -S = ipvsadm-save ipvsadm -R = ipvsadm-restore
6、lvs-nat的拓扑及实现配置
(1)客户端的配置
1)配置网卡
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno33554984 BOOTPROTO=none NAME=eno33554984 DEVICE=eno33554984 ONBOOT=yes IPADDR=10.1.249.114 NETMASK=255.255.0.0
2)测试
(2)director的配置(注意防火墙和selinux的影响)
1)配置网卡
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777736 BOOTPROTO=none NAME=eno33554984 DEVICE=eno33554984 ONBOOT=yes IPADDR=10.1.252.55 NETMASK=255.255.0.0 [root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno33554984 DEVICE=eno33554984 HWADDR=00:0c:29:0e:27:d7 IPADDR=192.168.116.254 NETMASK=255.255.255.0 BOOTPROTO=none ONBOOT=yes
2)ipvs的配置
[root@localhost ~]# yum -y install ipvsadm [root@localhost ~]# ipvsadm -A -t 10.1.252.55:80 -s rr [root@localhost ~]# ipvsadm -a -t 10.1.252.55:80 -r 192.168.116.6 -m [root@localhost ~]# ipvsadm -a -t 10.1.252.55:80 -r 192.168.116.7 -m [root@localhost ~]# ipvsadm -l IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.1.252.55:http rr -> 192.168.116.6:http Masq 1 0 0 -> 192.168.116.7:http Masq 1 0 0
3)开启转发功能
[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
(3)web server1的配置(centos 6)
[root@localhost ~]# date 两台服务器的时间需要同步 Sat Oct 29 10:08:36 CST 2016
1)配置网卡
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1 网卡名和MAC地址每台虚拟机都不同的,可使用 ip a 命令查看再设置 DEVICE=eth1 HWADDR=00:0c:29:9f:12:63 BOOTPROTO=none ONBOOT=yes IPADDR=192.168.116.6 NETMASK=255.255.255.0 GATEWAY=192.168.116.254
2)安装httpd
[root@localhost ~]# yum -y install httpd [root@localhost ~]# vim /var/www/html/index.html <h1>real server c6</h1> 真实生产中通过同步机制使得两台服务器的内容一样,此实验故意以不同页面区分 [root@localhost ~]# service httpd start [root@localhost ~]# curl 192.168.116.6 <h1>real server c6</h1>
(4)web server2的配置 (centos 7)
[root@localhost ~]# date Sat Oct 29 10:08:36 CST 2016
1)配置网卡
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno33554984 DEVICE=eno33554984 ONBOOT=yes BOOTPROTO=none IPADDR=192.168.116.7 NETMASK=255.255.255.0 GATEWAY=192.168.116.254 HWADDR=00:0c:29:e8:7c:c6
2)安装httpd
[root@localhost ~]# yum -y install httpd [root@localhost ~]# vim /var/www/html/index.html <h1>real server c7</h1> [root@localhost ~]# systemctl start httpd [root@localhost ~]# curl 192.168.116.7 <h1>real server c7</h1>
7、lvs-dr的拓扑及实现配置
(1)客户端配置
1)网卡配置
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno33554984 BOOTPROTO=none NAME=eno33554984 DEVICE=eno33554984 ONBOOT=yes IPADDR=192.168.116.114 NETMASK=255.255.255.0
2)测试
(2)director 的配置
1)网卡配置
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777736 DEVICE=eno16777736 HWADDR= 00:0c:29:0e:27:cd IPADDR=192.168.116.1 NETMASK=255.255.255.0 BOOTPROTO=none ONBOOT=yes 先重启网络服务再配置下面lo0网络 [root@localhost ~]# ifconfig eno16777736:0 192.168.116.254 netmask 255.255.255.255 broadcast 192.168.116.254 up
2)ipvs的配置
[root@localhost ~]# yum -y install ipvsadm [root@localhost ~]# ipvsadm -A -t 192.168.116.254:80 -s wrr [root@localhost ~]# ipvsadm -a -t 192.168.116.254:80 -r 192.168.116.6 -g -w 1 [root@localhost ~]# ipvsadm -a -t 192.168.116.254:80 -r 192.168.116.7 -g -w 2
(3)web server1的配置
1)修改内核参数来限制arp响应和通告
先限制通告再设置ip [root@localhost ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore [root@localhost ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce [root@localhost ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore [root@localhost ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
2)网卡配置
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1 网卡名和MAC地址每台虚拟机都不同的,可使用 ip a 命令查看再设置 DEVICE=eth1 HWADDR=00:0c:29:9f:12:63 BOOTPROTO=none ONBOOT=yes IPADDR=192.168.116.6 NETMASK=255.255.255.0 先重启网络服务再配置下面lo0网络 [root@localhost ~]# ifconfig lo:0 192.168.116.254 netmask 255.255.255.255 broadcast 192.168.116.254 up [root@localhost ~]# route add -host 192.168.116.254 dev lo:0
3)安装httpd
[root@localhost ~]# yum -y install httpd [root@localhost ~]# vim /var/www/html/index.html <h1>real server c6</h1> 真实生产中通过同步机制使得两台服务器的内容一样,此实验故意以不同页面区分 [root@localhost ~]# service httpd start [root@localhost ~]# curl 192.168.116.6 <h1>real server c6</h1>
(4)web server2的配置
1)修改内核参数来限制arp响应和通告
先限制通告再设置ip [root@localhost ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore [root@localhost ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce [root@localhost ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore [root@localhost ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
2)网卡配置
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno33554984 DEVICE=eno33554984 ONBOOT=yes BOOTPROTO=none IPADDR=192.168.116.7 NETMASK=255.255.255.0 HWADDR=00:0c:29:e8:7c:c6 先重启网络服务再配置下面lo0网络 [root@localhost ~]# ifconfig lo:0 192.168.116.254 netmask 255.255.255.255 broadcast 192.168.116.254 up (临时设置网卡,重启网络服务时效) [root@localhost ~]# route add -host 192.168.116.254 dev lo:0
3)安装httpd
[root@localhost ~]# yum -y install httpd [root@localhost ~]# vim /var/www/html/index.html <h1>real server c7</h1> [root@localhost ~]# systemctl start httpd [root@localhost ~]# curl 192.168.116.7 <h1>real server c7</h1>
原创文章,作者:pao,如若转载,请注明出处:http://www.178linux.com/55493
评论列表(1条)
总结的很完整,图文并茂,继续加油