Linux--LVS负载均衡群集

本文涉及的产品
网络型负载均衡 NLB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 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模块来添加,删除服务器节点,以及查看群集的运行状态。

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         
相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
3月前
|
运维 负载均衡 网络协议
LVS+Keepalived 负载均衡
LVS+Keepalived 负载均衡
92 8
LVS+Keepalived 负载均衡
|
3月前
|
域名解析 运维 负载均衡
LVS+Keepalived 负载均衡(二)28-1
【8月更文挑战第28天】LVS+Keepalived 负载均衡 配置 LVS VIP
74 5
|
7月前
|
负载均衡 网络协议 算法
LVS 负载均衡部署的三种模式 与搭建dr模式具体步骤
LVS 负载均衡部署的三种模式 与搭建dr模式具体步骤
|
4月前
|
监控 Linux 应用服务中间件
在Linux中,如何配置负载均衡器?
在Linux中,如何配置负载均衡器?
|
4月前
|
负载均衡 应用服务中间件 Linux
在Linux中,如何配置负载均衡器?
在Linux中,如何配置负载均衡器?
|
4月前
|
负载均衡 算法 应用服务中间件
在Linux中,nginx反向代理和负载均衡实现原理是什么?
在Linux中,nginx反向代理和负载均衡实现原理是什么?
|
4月前
|
负载均衡 网络协议
使用LVS搭建集群实现负载均衡(二)安装使用
【8月更文挑战第8天】使用LVS搭建集群实现负载均衡(二)安装使用
81 5
|
4月前
|
存储 负载均衡 算法
使用LVS搭建集群实现负载均衡(一)
【8月更文挑战第8天】使用LVS搭建集群实现负载均衡
178 5
|
4月前
|
负载均衡 监控 网络协议
在Linux中,负载均衡的作用有哪些?
在Linux中,负载均衡的作用有哪些?
|
4月前
|
负载均衡 应用服务中间件 Linux
在Linux中,Nginx如何实现负载均衡分发策略?
在Linux中,Nginx如何实现负载均衡分发策略?
下一篇
DataWorks