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      
相关推荐
Sadsvit5 小时前
HAProxy 完整指南:简介、负载均衡原理与安装配置
linux·运维·服务器·负载均衡
xx.ii5 小时前
52.haproxy负载均衡
运维·负载均衡
silence2505 小时前
CentOS 下使用 LVM 扩展根分区空间的完整流程
linux·运维·centos
郝学胜-神的一滴5 小时前
基于Linux,看清C++的动态库和静态库
linux·服务器·开发语言·c++·程序人生
toooooop85 小时前
linux centos 脚本批量启动宝塔服务(二)
linux·运维·centos
Linux技术芯5 小时前
SSD性能优化之4K对齐
linux
9毫米的幻想6 小时前
【Linux系统】—— 进程切换&&进程优先级&&进程调度
linux·运维·服务器·c++·学习·算法
维尔切6 小时前
Apache Tomcat 部署与配置
java·linux·运维·tomcat·apache
yaoxtao6 小时前
ubuntu22.04配置ip
linux·运维·服务器