专栏首页洁癖是一只狗Linux 集群总结 + LVS(负载均衡器)原理及配置

Linux 集群总结 + LVS(负载均衡器)原理及配置

一、集群相关概念

1. 集群是什么?

集群是一组协同工作的服务器,对外表现为一个整体。

集群的意义:更好的利用现有资源实现服务的高度可用

集群扩展方式:

  • 垂直扩展:更换服务器硬件
  • 水平扩展:添加更多的服务器节点

2. 集群的分类

  • 负载均衡集群-LBC 使用意图:减轻单台服务器的压力,将用户请求分担给多台主机一起处理。 实现方法:硬件:典型代表F5 软件:LVS Nginx HaProxy RAC 等 使用范围:业务并发较大的应用程序
  • 高可用集群-HAC 使用意图:最大限度的保证用户的应用持久,不间断的提供服务 实现原理:心跳检测 实现方法:硬件:F5 软件:heartbeat Linux-HA keepalived 等 使用范围:需要持续提供服务的应用程序
  • 高性能运算集群-HPC 使用意图:提供单台计算机所不具备的计算能力 负载均衡集群和高性能运算集群的原理对比: 负载均衡集群通过提高单位时间内的执行的任务数来提升效率 高性能运算集群通过缩短单个任务的执行时间来提高效率

二、常见的集群拓扑:

三、LVS(负载均衡器) 搭建负载均衡集群

相信你已经对集群分类有了大致了解了,那么我们现在详细说说使用LVS来实现负载均衡集群。

1、LVS 简介

LVS,英文全称LinuxVirtualServer,Linux虚拟服务器,是一个虚拟服务器集群,由章文嵩博士创建。使用LVS技术要达到的目标是利用Linux操作系统和LVS集群软件实现一个高可用、高性能、低成本的服务器应用集群;利用LVS技术实现高可用、可伸缩的网络服务,如www服务、cache服务、DNS服务、FTP服务mail服务等。

2. LVS实现负载均衡原理

LVS 的 IP 负载均衡技术是通过 IPVS 模块来实现的,IPVS 是 LVS集群系统的核心软件,它的主要作用是:安装在 Director Server 上,同时在 Director Server上虚拟出一个IP 地址,用户必须通过这个虚拟的 IP 地址访问服务器。这个虚拟 IP 一般称为 LVS 的VIP,即 Virtual IP访问的请求首先经过 VIP 到达负载调度器,然后由负载调度器从Real Server 列表中选取一个服务节点响应用户的请求。

补充:ipvs称之为IP虚拟服务器(IP Virtual Server,简写为IPVS)。是运行在LVS下的提供负载平衡功能的一种技术。

3. LVS术语

Director Server: 调度服务器,将负载分发到RealServer的服务器上

Real Server: 真实服务器,真正提供应用服务的服务器

VIP: 虚拟IP地址,公布给用户访问的IP地址。比如:www.eti.org 域名就要解析到vip上提供服务

RIP: 真实IP地址,集群节点上使用的IP地址

DIP:Director连接到RealServer的IP地址(Director用于连接内外网络的IP地址,物理网卡上的IP地址。是负载均衡器上的IP)

CIP: 客户端IP

4. LVS体系结构

使用LVS架设的服务器集群系统有三个组成部分。

(1)最前端负载均衡层,用LoadBalancer表示

(2)中间的服务器群组层,用ServerArray表示

(3)最底层的数据共享存储层,用Share Storage表示。

LVS 体系结构图如下:

重点来了, 下面我们来介绍LVS的三种工作模式。也是面试时经常问到的一道题。

5. LVS 三种工作模式

1)NAT

NAT 原理:基于DNAT(目标地址转换)和SNAT(源地址转换)

①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP(客户端IP),后面统称为CIP,目标地址为VIP(负载均衡器前端地址,后面统称为VIP)。

②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的目标地址改为了后端服务器的RIP地址并将报文根据算法发送出去。

③.报文送到Real Server后,由于报文的目标地址是自己,所以会响应该请求,并将响应报文返还给LVS。

④.然后lvs将此报文的源地址修改为本机并发送给客户端。

注意:

在NAT模式中,Real Server的网关必须指向LVS,否则报文无法送达客户端

特点:

1、NAT 技术将请求的报文和响应的报文都需要通过 LB 进行地址改写,因此网站访问量比较大的时候 LB 负载均衡调度器有比较大的瓶颈,一般要求最多之能 10-20 台节点

2、只需要在 LB 上配置一个公网 IP 地址就可以了。

3、每台内部的 realserver 服务器的网关地址必须是调度器 LB 的内网地址。

4、NAT 模式支持对 IP 地址和端口进行转换。即用户请求的端口和真实服务器的端口可以不一致。

优点:

集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址。

缺点

扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变慢!

NAT 模式配置:

安装ipvsadm:

[root@LVS ~]# yum install ipvsadm* -y
[root@LVS ~]# lsmod | grep lv_
[root@LVS ~]# lsmod | grep ip_vs
ip_vs_rr                   
ip_vs                    ip_vs_rr
libcrc32c                  ip_vs
ipv6                     ip_vs,ip6t_REJECT,nf_conntrack_ipv6,nf_defrag_ipv6配置脚本如下:
#!/bin/bash

VIP=192.168.10.10 #外网用户直接访问网站的IP地址, LVS的eth1网卡的IP。 
RIP1=192.168.84.104 #后端web1服务器的IP地址
RIP2=192.168.84.105 #后端web2服务器的IP地址
DIP=192.168.84.103 #LVS的eth0网卡的IP

case "$1" in
start)
    echo "Start LVS as the mode NAT"
    echo "1" > /proc/sys/net/ipv4/ip_forward #开启LVS服务器的IP路由转发功能
    /sbin/ifconfig eth0:0 $VIP netmask 255.255.255.0 up #设定VIP地址
    /sbin/ipvsadm -A -t $VIP:80 -s rr   #添加vip
    #-A:添加虚拟服务器
    #-t :指定vip及tcp端口
    #-s:指定算法 
    #rr:轮询
    /sbin/ipvsadm -a -t $VIP:80 -r $RIP1 -m
    /sbin/ipvsadm -a -t $VIP:80 -r $RIP2 -m
    #-a :添加节点 
    #-t :指定vip和端口
    #-r :指定节点ip及端口
    #-m:表示使用nat模式
    #-w:设置权重

    /sbin/ipvsadm 
    ;;
stop)
    echo "Stop LVS"
    echo "0" > /proc/sys/net/ipv4/ip_forward
    /sbin/ifconfig eth0:0 down
    ;;
*)  
    echo "Usage:$0 {start|stop}"
    exit 1
esac

web服务器需要删除默认的路由网关,重新设置路由网关为LVS主机IP地址 (DIP)

还要配置网页

#web1服务器:
[root@web1 ~] echo "webserver1">/var/www/html/index.html   #写一个测试页面
[root@web1 ~] service httpd start

#web2服务器:
[root@web2 ~]# echo "webserver2">/var/www/html/index.html   #写一个测试页面
[root@web2 ~] service httpd start

[root@web1 ~]# route del default
[root@web1 ~]# route add default gateway 192.168.84.103   ##192.168.84.103 为LVS的DIP
[root@web1 ~]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.84.0    *               255.255.255.0   U                    eth0
link-local      *               255.255.0.0     U                 eth0
default         192.168.84.103  0.0.0.0         UG                   eth0

运行脚本后结果如下:

[root@LVS ~]# sh lvs_nat.sh start
Start LVS as the mode NAT
IP Virtual Server version 1.2.1 (size=)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.10.10:http rr
  -> 192.168.84.104:http          Masq                             
  -> 192.168.84.105:http          Masq                    

通过curl命令查看是否成功

[root@LVS ~]# curl 192.168.10.10
webserver2
[root@LVS ~]# curl 192.168.10.10
webserver1
[root@LVS ~]# curl 192.168.10.10
webserver2
[root@LVS ~]# curl 192.168.10.10
webserver1
[root@LVS ~]# curl 192.168.10.10
webserver2
[root@LVS ~]# curl 192.168.10.10
webserver1

2)DR(是LVS的默认模式,应用最为广泛)

DR 原理:通过改写请求报文的目标MAC地址,将请求发给真实服务器的。而真实服务器响应后的处理结果直接返回给客户端用户。

①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。

②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的源MAC地址改为自己DIP的MAC地址,目标MAC改为了RIP的MAC地址,并将此包发送给RS。

③.RS发现请求报文中的目的MAC是自己,就会将次报文接收下来,处理完请求报文后,将响应报文通过lo接口送给eth0网卡直接发送给客户端。

注意:

需要设置lo接口的VIP不能响应本地网络内的arp请求。

总结:

1、通过在调度器 LB 上修改数据包的目的 MAC 地址实现转发。注意源地址仍然是 CIP,目的地址仍然是 VIP 地址。

2、请求的报文经过调度器,而 RS 响应处理后的报文无需经过调度器 LB,因此并发访问量大时使用效率很高(和 NAT 模式比)

3、因为 DR 模式是通过 MAC 地址改写机制实现转发,因此所有 RS 节点和调度器 LB 只能在一个局域网里面

4、RS 主机需要绑定 VIP 地址在 LO 接口(掩码32 位)上,并且需要配置 ARP 抑制。

5、RS 节点的默认网关不需要配置成 LB,而是直接配置为上级路由的网关,能让 RS 直接出网就可以。

6、由于 DR 模式的调度器仅做 MAC 地址的改写,所以调度器 LB 就不能改写目标端口,那么 RS 服务器就得使用和 VIP 相同的端口提供服务。

7、直接对外的业务比如WEB等,RS 的IP最好是使用公网IP。对外的服务,比如数据库等最好使用内网IP。

优点

和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。

DR模式的效率很高,但是配置稍微复杂一点,因此对于访问量不是特别大的公司可以用haproxy/nginx取代。日1000-2000W PV或者并发请求1万以下都可以考虑用haproxy/nginx。

缺点

所有 RS 节点和调度器 LB 只能在一个局域网里面。

DR模式配置:

LVS-DR web服务器脚本

#!/bin/bash 
VIP=192.168.84.200 
/etc/rc.d/init.d/functions 
case "$1" in 
start) 
           echo "start LVS of RealServer DR" 
           /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
           #添加路由记录,当访问VIP交给l0:0 网卡接受 
           /sbin/route add -host $VIP dev lo:0
           #关闭对应ARP响应及公告功能
           echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore 
           echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce 
           echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore 
           echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce  
       ;; 
stop) 
           /sbin/ifconfig lo:0 down 
           echo "close LVS of RealServer DR" 
           echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore 
           echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce 
           echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore 
           echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce 
           ;; 

*) 
          echo "Usage: $0 {start|stop}" 
          exit 1 
esac  
exit 0 

Lvs-DR LVS server端启动脚本

#!/bin/bash 
VIP=192.168.84.200 
RIP1=192.168.84.104 
RIP2=192.168.84.105
/etc/rc.d/init.d/functions 
case "$1" in 
start) 
           echo "start LVS of DirectorServer DR" 
           # 添加IP地址为VIP的虚拟网卡lo:0
           /sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up 
           # 添加一条路由,目标IP为VIP的数据包使用lo接口发送,这样响应报文的源IP就会为VIP
           /sbin/route add -host $VIP dev eth0:0 
           echo "1" >/proc/sys/net/ipv4/ip_forward 
           #Clear IPVS table
           /sbin/ipvsadm -C
           #set LVS
           /sbin/ipvsadm -A -t $VIP:80 -s rr  
           /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g 
           /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g 
           #RUN LVS
           /sbin/ipvsadm 
       ;; 
stop) 
           echo "stop LVS of DirectorServer DR" 
           echo "0" >/proc/sys/net/ipv4/ip_forward 
           /sbin/ipvsadm -C 
           /sbin/ifconfig eth0:0 down 
           ;; 
*) 
          echo "Usage: $0 {start|stop}" 
          exit 1 
esac 
exit 0 

3)TUN

TUN 模式原理:在原请求IP报文之外新加一个IP首部

①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。

②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将在客户端请求报文的首部再封装一层IP报文,将源地址改为DIP,目标地址改为RIP,并将此包发送给RS。

③.RS收到请求报文后,会首先拆开第一层封装,然后发现里面还有一层IP首部的目标地址是自己lo接口上的VIP,所以会处理次请求报文,并将响应报文通过lo接口送给eth0网卡直接发送给客户端。

注意:

需要设置lo接口的VIP不能在公网上出现。

总结:

1.TUNNEL 模式必须在所有的 realserver 机器上面绑定 VIP 的 IP 地址

2.TUNNEL 模式的 vip ------>realserver 的包通信通过 TUNNEL 模式,不管是内网和外网都能通信,所以不需要 lvs vip 跟 realserver 在同一个网段内

3.TUNNEL 模式 realserver 会把 packet 直接发给 client 不会给 lvs 了

4.TUNNEL 模式走的隧道模式,所以运维起来比较难,所以一般不用。

优点

负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量,这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。

缺点:

隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling”(IP Encapsulation)协议,服务器可能只局限在部分Linux系统上。

TUN 模式配置:

负载均衡器:DIP: eth0 192.168.152.139
VIP:192.168.152.250
web节点IP:192.168.152.151 192.168.152.152

负载均衡器安装配置
1)安装
#yum -y install ipvsadm
#lsmod | grep ip_vs 查看没有输出
#modprobe ip_vs 安装即可
2)一样这里也写个脚本,#cat /etc/init.d/lvstun
#!/bin/bash
#lvs of TUN
VIP=192.168.152.250
RIP1=192.168.152.151
RIP2=192.168.152.152
case "$1" in
start)
echo "start lvs of TUN"
/sbin/ifconfig tunl0 $VIP broadcast $VIP netmask 255.255.255.0 up
/sbin/route add -host $VIP dev tunl0
/sbin/ipvsadm -C
/sbin/ipvsadm -A -t $VIP:80 -s rr
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -i
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -i
/sbin/ipvsadm
;;
stop)
echo "stop lvs of TUN"
/sbin/ipvsadm -C
/sbin/ifconfig tunl0 down
;;
*)
echo "Usage :$0 {start|stop}"
exit1
esac
#chmod o+x /etc/init.d/lvstun
#service lvstun start

节点服务器配置
节点1,2一样写脚本,# cat /etc/init.d/lvsTUNRIP
#!/bin/bash
#TUN server
VIP=192.168.152.250
case "$1" in
start)
echo "start LVS of TUN"
/sbin/ifconfig tunl0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev tunl0
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
;;
stop)
echo "stop LVS of TUN"
/sbin/ifconfig tunl0 down
echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
;;
*)
echo "Usage:$0 {start|stop}"
exit 1
esac
#chmod o+x /etc/init.d/lvsTUNRIP
#service lvsTUNRIP start

6. 三种工作模式比较

工作模式

VS/NAT

VS/TUN

VS/DR

Real server(节点服务器)

Config dr gw

Tunneling

Non-arp device/tie vip

Server Network

Private

LAN/WAN

LAN

Server number(节点数量)

Low 10-20

High 100

High 100

Real server gateway

Load balance

Own router

Own router

优点

地址和端口转换

Wan环境加密数据

性能最高

缺点

效率低

需要隧道支持

不能跨域LAN

7. LVS 调度算法

在内核中的连接调度算法上,IPVS已实现了以下八种调度算法:

  • 轮叫调度(Round-Robin Scheduling)
  • 加权轮叫调度(Weighted Round-Robin Scheduling)
  • 最小连接调度(Least-Connection Scheduling)
  • 加权最小连接调度(Weighted Least-Connection Scheduling)
  • 基于局部性的最少链接(Locality-Based Least Connections Scheduling)
  • 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication Scheduling)
  • 目标地址散列调度(Destination Hashing Scheduling)
  • 源地址散列调度(Source Hashing Scheduling)

今天我们先介绍到这里。之后我们继续介绍集群的内容。

参考资料:

https://www.cnblogs.com/gaoxu387/p/7941381.html

https://www.jianshu.com/p/2ed85a5204cc

本文分享自微信公众号 - 洁癖是一只狗(rookie-dog),作者:小土豆Yuki

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 面试java内存模型

    今天我们讲一下java内存模型(JMM),JMM的问题在面试中经常被问到,我们今天就讲一下这道题.

    小土豆Yuki
  • 面试Mybatis之对象工厂和拦截器

    这节我们讲两个关于Mybatsi常用知识点,欢迎持续关注,洁癖会推出一系类相关Mybatis面试以及经常在工作中使用的知识点,废话不多说,来开始我们的讲解吧!

    小土豆Yuki
  • 【红帽认证系列笔记之RHCE】RHCE 认证考试题库(上)

    RHCE的考试相对RHCSA来说要难很多,主要考网络配置,各种文件系统的挂载,web的配置,防火墙策略,数据库查找,脚本编写等等。一共20道题左右。rhce考试...

    小土豆Yuki
  • LVS负载均衡的三种工作模式的解析

    NAT(Network Address Translation)即网络地址转换,原理是是通过修改数据报头,让内网IP地址可以访问外网,以及外部用用户可以访问位于...

    用户7459214
  • Solr 笔记 2-core 创建后的数据导入

    在笔记 1 中,我们已经介绍了Solr下载及单节点启动和配置,以及如何创建core,但是如何进行数据导入却还没有介绍。这篇文章就将教你在创建core之后,应该如...

    村雨遥
  • MacOS 破坏 SSH 默认规则,程序员无法登录 Web 服务器,苹果新系统遭吐槽!

    最近,一位名叫Taylor Hall的程序员发现,自从更新了到macOS Catalina最新版,再也无法通过SSH登上自己的Web服务器。

    杰哥的IT之旅
  • exp/imp 参数说明,中英对照

    在任意可用exp/imp(导出/导入)命令的主机上,都可以通过exp/imp help=y查看所有的参数说明.

    Alfred Zhao
  • 如何在Ubuntu 14.04上备份和还原Redis数据

    Redis是一个键值缓存的数据库,它可以持久保存(永久保存)到磁盘存储(即数据库)中。在本文中,您将了解如何在Ubuntu 14.04服务器上备份Redis数据...

    吴凌云
  • Envoy源码分析之Dispatcher

    在Envoy的代码中Dispatcher是随处可见的,可以说在Envoy中有着举足轻重的地位,一个Dispatcher就是一个EventLoop,其承担了任务队...

    黑光技术
  • 18.4.21日报

    1,跟进一处woff2字体显示不了的问题。原因是获取的字符宽度为0,但在chromium.bb里也是0,暂时放弃跟进

    龙泉寺扫地僧

扫码关注云+社区

领取腾讯云代金券