LVS详解:构建高性能Linux负载均衡集群

#作者:张桐瑞

文章目录

集群 Cluster

一、集群类型

负载均衡集群 Load Balance LB
高可用集群 High Avalibility HA
高性能计算集群 High Performace Compute HPC

1、负载均衡集群

作用: 提高业务的并发能力

2、高可用集群

作用: 解决单点故障、提高可用性

可用性:

运行时间/(运行时间+故障修复时间)

3、高性能计算集群

作用: 提高数据的处理能力

二、LVS ------ Linux Virtual Service

lvs被集成在linux内核,速度快

ipvsadm管理工具

1、调度算法 scheduler

  1. rr round robin 轮询

  2. wrr 基于权重的轮询 weight

    会话保持方案:

    a. 会话共享存储

    b. 换调度算法

  3. lc least connection 最少连接

  4. wlc 基于权重的最少连接 默认

  5. sh source hash 源hash

    根据客户端IP计算hash值,相同hash值的请求转发到同一个后端服务器

    一定程度可以解决会话保持问题

  6. dh destination hash 目的地址hash

    根据目的IP地址计算hash值,后续所有请求定位同一个目的IP上

    适用于后端是缓存服务器,提升缓存命中率

2、LVS工作模式

NAT模式

DR模式

TUN模式

3、NAT模式核心要素

请求、响应都要经过调度器转发

DIP、VIP要分属不同的网络

调度器开启路由转发功能

所有real server网关要指向DIP

复制代码
# vim /etc/sysctl.conf 
 net.ipv4.ip_forward = 1

4、NAT模式的工作原理



案例:基于NAT模式配置web集群

  1. 所有服务器关闭防火墙、SELinux、时间同步

  2. 在调度器上事先安装ipvsadm、所有real server事先安装httpd用于测试

    yum install -y ipvsadm

    yum install -y httpd




  1. 在调度器上分别配置VIP、DIP

    [root@lvs ~]# ip addr show
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:8f:c3:68 brd ff:ff:ff:ff:ff:ff
    inet 192.168.146.100/24 brd 192.168.146.255 scope global noprefixroute ens33

    3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:8f:c3:72 brd ff:ff:ff:ff:ff:ff
    inet 192.168.177.254/24 brd 192.168.177.255 scope global noprefixroute ens37

  1. 所有real server配置地址、网关指向DIP

    [root@web01 ~]# ifconfig ens33
    ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
    inet 192.168.177.10 netmask 255.255.255.0 broadcast 192.168.177.255
    inet6 fe80::20c:29ff:fe14:788e prefixlen 64 scopeid 0x20<link>
    ether 00:0c:29:14:78:8e txqueuelen 1000 (Ethernet)
    RX packets 9863 bytes 13214062 (12.6 MiB)
    RX errors 0 dropped 0 overruns 0 frame 0
    TX packets 3421 bytes 213516 (208.5 KiB)
    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

    [root@web01 ~]# route -n
    Kernel IP routing table
    Destination Gateway Genmask Flags Metric Ref Use Iface
    0.0.0.0 192.168.177.254 0.0.0.0 UG 100 0 0 ens33
    192.168.177.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33

  2. 调度器开启路由转发

    [root@lvs ~]# vim /etc/sysctl.conf
    net.ipv4.ip_forward = 1

    [root@lvs ~]# sysctl -p
    net.ipv4.ip_forward = 1

  3. 创建虚拟服务

    [root@lvs ~]# ipvsadm -A -t 192.168.146.100:80 -s rr

    [root@lvs ~]# ipvsadm -L -n
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
    -> RemoteAddress:Port Forward Weight ActiveConn InActConn
    TCP 192.168.146.100:80 rr

-A:添加一条新的虚拟服务器记录

-t:说明虚拟服务器提供的是TCP服务

-s:使用的调度算法

-m:指定LVS的工作模式为NAT模式

-g:指定LVS的工作模式为直接路由模式

-D:删除内核虚拟服务器表中的一条虚拟服务器记录

-d:删除一条虚拟服务器记录中的某条真实服务器记录

-a:在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录

-n:输出IP地址和端口的数字形式

-r:真实的服务器

-R:恢复虚拟服务器规则

-S:保存虚拟服务器规则

  1. 添加real server

    [root@lvs ~]# ipvsadm -a -t 192.168.146.100:80 -r 192.168.177.10:80 -m //-m nat模式
    [root@lvs ~]# ipvsadm -a -t 192.168.146.100:80 -r 192.168.177.20:80 -m

  2. 查看负载均衡表

    [root@lvs ~]# ipvsadm -L -n
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
    -> RemoteAddress:Port Forward Weight ActiveConn InActConn
    TCP 192.168.146.100:80 rr
    -> 192.168.177.10:80 Masq 1 0 0
    -> 192.168.177.20:80 Masq 1 0 0

  3. 测试访问
    http://192.168.146.100/

    [root@lvs ~]# ipvsadm -L -n
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
    -> RemoteAddress:Port Forward Weight ActiveConn InActConn
    TCP 192.168.146.100:80 rr
    -> 192.168.177.10:80 Masq 1 0 3
    -> 192.168.177.20:80 Masq 1 0 3

    [root@lvs ~]# ipvsadm -L -n -c
    IPVS connection entries
    pro expire state source virtual destination
    TCP 01:14 TIME_WAIT 192.168.146.1:55276 192.168.146.100:80 192.168.177.20:80
    TCP 00:30 TIME_WAIT 192.168.146.1:56266 192.168.146.100:80 192.168.177.20:80
    TCP 00:55 TIME_WAIT 192.168.146.1:60898 192.168.146.100:80 192.168.177.10:80
    TCP 01:01 TIME_WAIT 192.168.146.1:65024 192.168.146.100:80 192.168.177.10:80
    TCP 01:52 TIME_WAIT 192.168.146.1:51311 192.168.146.100:80 192.168.177.20:80

  4. 保存、恢复规则

    ipvsadm -S > /opt/web_rule

    ipvsadm -R < /opt/web_rule

三、DR模式 ---- Direct Route 直接路由模式

1、核心要素

请求经过调度器、响应由real server发送

real server的网关要指向真实网关,确保网络通畅

VIP、DIP要属于同一网络

在所有real server配置VIP

arp_ignore=1

只让主机回复关于物理网卡的ARP响应

arp_announce=2

让主机以适当的地址发送响应

real server的操作只能是类linux系统

案例:基于DR模式配置web集群

1、所有real server配置VIP(掩码必须32位 lo虚拟网卡)

复制代码
[root@lvs ~]# ip addr add dev lo 192.168.140.100/32

[root@lvs ~]# ip addr show lo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 192.168.140.100/32 scope global lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever

2、所有real server修改arp内核参数

复制代码
[root@localhost ~]# vim /etc/sysctl.conf 
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

[root@localhost ~]# sysctl -p

3、所有real server安装配置httpd

5、在调度器上配置VIP

复制代码
[root@lvs ~]# ip addr add dev lo 192.168.140.100/32

[root@lvs ~]# ip addr show lo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 192.168.140.100/32 scope global lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever

6、创建虚拟服务

复制代码
[root@lvs ~]# yum install -y ipvsadm.x86_64  

[root@lvs ~]# ipvsadm -A -t 192.168.140.100:80 -s rr   //调度算法rr

[root@lvs ~]# ipvsadm -a -t 192.168.140.100:80 -r 192.168.140.11:80 -g   //-g  DR模式
[root@lvs ~]# ipvsadm -a -t 192.168.140.100:80 -r 192.168.140.12:80 -g

[root@lvs ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.140.100:80 rr
  -> 192.168.140.11:80            Route   1      0          0         
  -> 192.168.140.12:80            Route   1      0          0     

7、测试访问

复制代码
[root@redis_server ~]# curl 192.168.140.100
<h1> web01</h1>
[root@redis_server ~]# curl 192.168.140.100
<h1> web02 </h1>

[root@redis_server ~]# curl 192.168.140.100
<h1> web01</h1>
[root@redis_server ~]# curl 192.168.140.100
<h1> web02 </h1>

四、持久性连接

作用:

在指定的时间范围内, 同一个客户端的请求会被转发到同一个real server

会话持久

复制代码
[root@lvs ~]# ipvsadm -E -t 192.168.140.100:80 -s rr -p 300

[root@lvs ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.140.100:80 rr persistent 300
  -> 192.168.140.11:80            Route   1      0          0         
  -> 192.168.140.12:80            Route   1      0          0      
相关推荐
江公望1 天前
Qt的环境变量QT_QPA_PLATFORM浅解
linux·qt
Wang's Blog1 天前
Linux小课堂: 文件操作核心命令深度解析(cat、less、head、tail、touch 与 mkdir 命令)
linux·chrome·less
Do_GH1 天前
【Linux】07.Ubuntu开发环境部署
linux·运维·ubuntu
CHH32131 天前
在 Mac/linux 的 VSCode 中使用Remote-SSH远程连接 Windows
linux·windows·vscode·macos
tryCbest1 天前
Linux使用Docker部署项目后期更新
linux·运维·docker
孤独得猿1 天前
聊天室项目开发——etcd的安装和使用
linux·服务器·c++·etcd
siriuuus1 天前
Linux Tomcat 简单使用及 Nginx 反向代理
linux·nginx·tomcat
呱呱巨基1 天前
vim编辑器
linux·笔记·学习·编辑器·vim
竹等寒1 天前
Linux-网络安全私房菜(二)
linux·服务器·web安全
YuCaiH1 天前
Linux文件处理
linux·笔记·嵌入式