简介:
LVS,全称 Linux Virtual Server,即Linux虚拟服务器。是一个虚拟的服务器集群系统,使用负载均衡技术将多台服务器组成一个虚拟的服务器集群。在众多解决高并发问题的方案中,这是一个易于扩展并且价格相对低廉的方案。本项目是在1998年时,由章文嵩博士成立的,是中国最早出现的自由软件项目之一。
LVS工作模式分为NAT模式、TUN模式、以及DR模式。
一,群集的类型
负载均衡群集:以提高应用系统的响应能力,因可能处理更多的访问请求,减少延迟为目标,获得高并发,高负载的整体性能。
高可用群集:以提高应用系统的可靠性,尽可能的减少中断时间为目标,确保服务的连续性,达到高可用群集技术。
高性能运算群集:以提高应用系统的CUP运算速度,扩展硬件资源和分析能力为目标,获得相当于大型,超级计算机的高性能运算能力。
二,负载均衡的分层结构
第一层:负载调度器,这是访问整个群集系统的唯一入口,对外使用服务器共有的VIP地址,也称为群集IP地址。通常会配置主,备两台调度器实现热备份,当主调度器失效以后平滑替代至备用调度器,确保高可用性。
第二层:服务器池,群集所提供的应用服务由服务器池承担,其中每个节点具有独立的RIP地址,只处理调度器分发过来的客户机请求。当某个节点暂时失效时,负载调度器的容错机制会将其隔离,等待错误排除以后再重新纳入服务器池。
第三层:共享存储,为服务器池中的所有节点提供稳定,一致的文件存取服务,确保整个群集的统一性。
三,负载均衡的工作模式
地址转换(NAT):简称NAT模式,类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,以作为客户机的访问入口,也是个节点回应客户机的访问出口。服务器节点使用私有IP地址,与负载调度器位于同一物理网络,安全性要优于,其他两种方式。
IP隧道(IP Tunnel):简称TUN模式,采用开放式的网络结构,负载调度器仅作为客户机的访问入口,各节点通过各自的internet连接直接回应客户机,而不再经过负载调度器。服务器节点分散在互联网中的不同位置,具有独立的公网IP地址,通过专用IP隧道与负载调度器相互通信
直接路由(Direct Routing):简称DR模式,采用半开放式的网络结构,与TUN模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络。负载调度器与各节点服务器通过本地网络连接,不需要建立专用的ip隧道
四,LVS的负载调度算法
轮询(Round Robin):将收到的访问请求按照顺序轮流分配给群集中的各个节点
加权轮询(Weighted Round Robin):根据真实服务器的处理能力轮流分配收到的访问器请求,调度器可以自动查询各节点的负载情况,并动态调整其权重
最少连接(Least Connections):根据真实服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接最少的节点。
加权最少连接(Werghted Least Connections):在服务器节点的性能差异较大的情况下,可认为真实服务器自动调整权重,权重较高的节点将承受更大比例的活动连接负载。
一,LVS虚拟机服务器
1.LVS的负载调度算法
针对不同的网络服务和配置需要,LVS调度器提供多种不同的负载调度器算法,其中最常用的四种算法包括轮询,加权轮询,最少连接,加权最少连接
2.使用ipvsadm管理工具
注:ipvsadm是在负载调度器上使用的LVS群集管理工具,通过调用ip_vs模块来添加,删除服务器节点,以及查看群集的运行状态。
1. modprobe ip_vs #加载ip_vs模块 2. yum -y install ipvsadm #安装ipvsadm 3. ipvsadm -v #查看ipvsadm版本
创建虚拟机服务器
注:若群集的VIP地址为192.168.1.1,针对TCP 80 端口提供负载分流服务,使用的调度算法为,轮询,则对应的ipvsadm命令操作如下。对于负载均衡调度器来说,VIP必须是本机实际已启用的IP地址
ipvsadm -A -t 192.168.1.1:80 -s rr
选项-A表示添加虚拟机服务器,-t用来指定VIP地址及TCP端口,-s用来指定负载调度算法——轮询(rr),加权轮询(wrr),最少连接(lc),加权最少连接(wlc)。
添加服务器节点
为虚拟服务器192.168.1.1添加两个节点服务器,若希望使用保持连接,还应该添加“-p 60” 选项,其中60为保持时间(单位为s)
1. ipvsadm -a -t 192.168.1.1:80 -r 192.168.2.1:80 -m -w 1 2. ipvsadm -a -t 192.168.1.1:80 -r 192.168.2.2:80 -m -w 1
选项:-a表示添加真实服务器,-t用来指定VIP地址及TCP端口,-r用来指定RIP地址及TCP端口,-m表示使用NAT群集模式(-g DR模式和-i TUN模式),-w用来设置权重(权重为0时表示暂停节点)
查看群集节点状态
ipvsadm -ln
选项:-l可以列表查看LVS虚拟服务器,可以指定查看某一个VIP地址,结合选项-n将以数字形式显示地址,端口信息。
删除服务器节点
ipvsadm -d -r 192.168.1.1:80 -t 192.168.2.1:80
选项:-d 执行删除操作必须指定目标对象,包括节点地址,虚拟IP地址。使用-D并指定虚拟IP地址即可,无须指定节点。
保存负载分配策略
注:将配置添加到配置文件中
ipvsadm-save > /etc/sysconfig/ipvsadm
二,NFS共享存储服务
1.使用NFS发布共享资源
安装nfs-utils,rpcbind软件包
1. yum -y install nfs-utils rpcbind 2. systemctl enable nfs 3. systemctl enable rpcbind
设置共享目录
1. mkdir -p /opt/wwwroot 2. vim /etc/exports 3. /opt/wwwroot 192.168.1.1/24(rw,sync,no_root_squash)
注:客户机地址可以是主机名,IP地址,网段地址,允许使用*,?通配符;权限选项中的rw表示允许读写(ro为只读),sync表示同步写入,no_root_squash表示当客户机以root身份访问时赋予本地root权限(默认是root_squash,将作为nfsnobody用户降权对待)。
启动NFS服务程序
1. systemctl start rpcbind 2. systemctl start nfs 3. netstat -napt | grep rpcbind
查看本机发布的NFS共享目录
showmount -e
2.在客户机中访问NFS共享资源
安装rpcbind软件包,并启动rpcbind服务
yum -y install rpcbind nfs-utils systemctl enable rpcbind systemclt start rpcbind
查询NFS服务器共享了那些目录
showmount -e 192.168.2.1
手动挂载NFS共享目录
1. mount 192.168.2.1:/opt/wwwroot /var/www/html 2. tail -l /etc/mtab
fatab自动挂载设置
1. vim /etc/fstab 2. 192.168.2.1:/opt/wwwroot /var/www/html nfs defaults,_netdev 0 0
三,构建LVS负载均衡群集(LVS-NAT)
环境:
1.配置负载调度器
注:如果不是同一网段,记得配置网关,和开启路由转发
[root@localhost ~]# vim /etc/sysctl.conf net.ipv4.ip_forward = 1 [root@localhost ~]# sysctl -p net.ipv4.ip_forward = 1
配置负载分配策略
[root@localhost ~]# ipvsadm -C [root@localhost ~]# ipvsadm -A -t 192.168.2.1:80 -s rr [root@localhost ~]# ipvsadm -a -t 192.168.2.1:80 -r 192.168.2.2:80 -m -w 1 [root@localhost ~]# ipvsadm -a -t 192.168.2.1:80 -r 192.168.2.3:80 -m -w 1 [root@localhost ~]# ipvsadm-save -A -t localhost.localdomain:http -s rr -a -t localhost.localdomain:http -r 192.168.2.2:http -m -w 1 -a -t localhost.localdomain:http -r 192.168.2.3:http -m -w 1 [root@localhost ~]# systemctl enable ipvsadm Created symlink from /etc/systemd/system/multi-user.target.wants/ipvsadm.service to /usr/lib/systemd/system/ipvsadm.service. [root@localhost ~]#
配置2.2和2.3节点服务器,配置相同
[root@localhost ~]# yum -y install httpd [root@localhost ~]# echo "2.2" > /var/www/html/index.html [root@localhost ~]# systemctl start httpd [root@localhost ~]# systemctl enable httpd Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
测试LVS群集,使用多台测试机,直接访问http://192.168.2.1,将能看到真实机提供的网页内容,如果节点网页不同,多刷新几次可以看到不同
[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.2.1:80 rr -> 192.168.2.2:80 Masq 1 0 2 -> 192.168.2.3:80 Masq 1 0 1
挂载NFS共享存储
mount 192.168.2.4:/opt/wwwroot /var/www/html
四,直接路由模式(LVS-DR)
环境:
配置负载调度器虚拟IP地址(VIP)
[root@localhost ~]# cd /etc/sysconfig/network-scripts/ [root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0 [root@localhost network-scripts]# vim ifcfg-ens33:0 NAME=ens33:0 DEVICE=ens33:0 ONBOOT=yes IPADDR=192.168.2.254 NETWASK=255.255.255.0 [root@localhost network-scripts]# ifup ens33:0 [root@localhost network-scripts]# ip a ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:83:b0:2e brd ff:ff:ff:ff:ff:ff inet 192.168.2.1/24 brd 192.168.2.255 scope global ens33 valid_lft forever preferred_lft forever inet 192.168.2.254/24 brd 192.168.2.255 scope global secondary ens33:0 valid_lft forever preferred_lft forever inet6 fe80::f14d:4ec5:d7b2:c6c1/64 scope link valid_lft forever preferred_lft forever
调整/proc响应参数
[root@localhost network-scripts]# vim /etc/sysctl.conf net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.ens33.send_redirects = 0 [root@localhost network-scripts]# sysctl -p net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.ens33.send_redirects = 0
配置负载分配策略
[root@localhost network-scripts]# ipvsadm -C [root@localhost network-scripts]# ipvsadm -A -t 192.168.2.254:80 -s rr [root@localhost network-scripts]# ipvsadm -a -t 192.168.2.254:80 -r 192.168.2.2:80 -g -w 1 [root@localhost network-scripts]# ipvsadm -a -t 192.168.2.254:80 -r 192.168.2.3:80 -g -w 1 [root@localhost network-scripts]# ipvsadm-save -A -t localhost.localdomain:http -s rr -a -t localhost.localdomain:http -r 192.168.2.2:http -g -w 1 -a -t localhost.localdomain:http -r 192.168.2.3:http -g -w 1 [root@localhost network-scripts]# systemctl enable ipvsadm
配置节点服务器
[root@localhost ~]# cd /etc/sysconfig/network-scripts/ [root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0 [root@localhost network-scripts]# vim ifcfg-lo:0 [root@localhost network-scripts]# ifup lo:0 [root@localhost network-scripts]# ifconfig lo:0 lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 192.168.2.254 netmask 255.255.255.255 loop txqueuelen 1 (Local Loopback)
调整/proc相应参数
[root@localhost network-scripts]# vim /etc/sysctl.conf net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.default.arp_ignore = 1 net.ipv4.conf.default.arp_announce = 2 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 [root@localhost network-scripts]# sysctl -p net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.default.arp_ignore = 1 net.ipv4.conf.default.arp_announce = 2 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2
挂载NFS存储服务器
mount 192.168.2.4:/opt/wwwroot /var/www/html
测试LVS测试
[root@localhost network-scripts]# 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.2.254:80 rr -> 192.168.2.2:80 Route 1 0 0 -> 192.168.2.3:80 Route 1 0 0