Linux--LVS负载均衡群集

简介:

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模块来添加,删除服务器节点,以及查看群集的运行状态。

modprobe ip_vs        #加载ip_vs模块
yum -y install ipvsadm   #安装ipvsadm
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)

ipvsadm -a -t 192.168.1.1:80 -r 192.168.2.1:80 -m -w 1
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软件包

yum -y install nfs-utils  rpcbind
systemctl enable nfs
systemctl enable rpcbind

        设置共享目录

mkdir -p /opt/wwwroot
vim /etc/exports
/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服务程序

systemctl start rpcbind
systemctl start nfs
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共享目录

mount 192.168.2.1:/opt/wwwroot /var/www/html
tail -l /etc/mtab

        fatab自动挂载设置

vim /etc/fstab
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         

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

征服bug

curry.30

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值