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      
相关推荐
菜鸟祥哥32 分钟前
xfs文件系统磁盘损坏修复
linux
Y淑滢潇潇38 分钟前
RHCE Day2 时间管理服务器 NFS服务器
linux·运维·服务器
铭哥的编程日记1 小时前
【Linux网络】五种IO模型与非阻塞IO
linux·服务器·网络·tcp/ip·udp
liu****2 小时前
12.线程同步和生产消费模型
linux·服务器·开发语言·c++·1024程序员节
snakecy2 小时前
常用命令记录
linux·运维·github
cccyi72 小时前
Linux Socket 编程全解析:UDP 与 TCP 实现及应用
linux·tcp socket·udp socket
小苏兮2 小时前
【把Linux“聊”明白】自动化构建-make/Makefile详解
linux·服务器·学习·自动化·1024程序员节
fy zs3 小时前
linux文件系统和软硬连接
linux·centos
QT 小鲜肉3 小时前
【个人成长笔记】将Try Ubuntu里面配置好的文件系统克隆在U盘上(创建一个带有持久化功能的Ubuntu Live USB系统)
linux·开发语言·数据库·笔记·ubuntu
AC是你的谎言4 小时前
网络层和数据链路层
linux·网络·学习·智能路由器