LVS负载均衡群集

一、LVS群集应用基础

1.1群集技术概述

1.群集的类型

  • 负载均衡群集(Load Balance Cluster):以提高应用系统的响应能力、尽可能处理更多的访问请求、减少延迟为目标,获得高并发、高负载的整体性能。例如,"DNS轮询""应用层交换""反向代理"等都可用作负载均衡群集。LB 的负载分配依赖于主节点的分流算法,将来自客户机的访问请求分担给多个服务器节点,从而缓解整个系统的负载压力。
  • 高可用群集(High Availability Cluster):以提高应用系统的可靠性、尽可能地减少中断时间为目标,确保服务的连续性,达到高可用(HA)的容错效果。例如,"故障切换""双机热备""多机热备"等都属于高可用群集技术。HA 的工作方式包括双工和主从两种模式。双工即所有节点同时在线;主从则只有主节点在线,但当出现故障时从节点能自动切换为主节点。
  • 高性能运算群集(High Performance Computer Cluster):以提高应用系统的 CPU运算速度、扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能运算(HPC)能力。例如,"云计算""网格计算"也可视为高性能运算的一种。高性能运算群集的高性能依赖于"分布式运算""并行计算",通过专用硬件和软件将多个服务器的 CPU、内存等资源整合在一起,实现只有大型、超级计算机才具备的计算能力。

2.负载均衡的分层结构

  • 第一层,负载调度器:这是访问整个群集系统的唯一入口,对外使用所有服务器共有的 VIP(Virtual IP,虚拟 IP)地址,也称为群集 IP 地址。通常会配置主、备两台调度器实现热备份,当主调度器失效以后能够平滑替换至备用调度器,确保高可用性。
  • 第二层,服务器池:群集所提供的应用服务(如HTTP、FTP)由服务器池承担,其中每个节点具有独立的 RIP(Real IP,真实IP)地址,只处理调度器分发过来的客户机请求。当某个节点暂时失效时,负载调度器的容错机制会将其隔离,等待错误排除以后再重新纳入服务器池。
  • 第三层,共享存储:为服务器池中的所有节点提供稳定、一致的文件存取服务,确保整个群集的统一性。在 Linux/UNIX 环境中,共享存储可以使用 NAS 设备,或者提供 NFS(Network File System,网络文件系统)共享服务的专用服务器。

3.负载均衡的工作模式

关于群集的负载调度技术,可以基于 IP、端口、内容等进行分发,其中基于 IP的负载调度是效率最高的。基于IP 的负载均衡模式中,常见的有地址转换、IP 隧道和直接路由三种工作模式,如图1.2所示。

  • 地址转换(Network Address Translation):简称 NAT 模式,类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,即作为客户机的访问入口,也是各节点回应客户机的访问出口。服务器节点使用私有IP地址,与负载调度器位于同一个物理网络,安全性要优于其他两种方式。
  • IP 隧道(IP Tunnel):简称 TUN 模式,采用开放式的网络结构,负载调度器仅作为客户机的访问入口,各节点通过各自的 Internet 连接直接回应客户机,而不再经过负载调度器。服务器节点分散在互联网中的不同位置,具有独立的公网IP地址,通过专用 IP隧道与负载调度器相互通信。
  • 直接路由(Direct Routing):简称 DR 模式,采用半开放式的网络结构,与 TUN模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络。负载调度器与各节点服务器通过本地网络连接,不需要建立专用的 IP 隧道。

以上三种工作模式中,NAT方式只需要一个公网 IP地址,从而成为最易用的一种负载均衡模式,安全性也比较好,许多硬件负载均衡设备就采用这种方式。相比较而言,DR模式和 TUN 模式的负载能力更加强大,适用范围更广,但节点的安全性要稍差一些。

二、构建LVS负载均衡群集

2.1配置实验环境

1.实验环境:

注意:各web节点需要设置网关,NFS不需要

2.配置负载调度器

复制代码
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# yum -y install ipvsadm
[root@localhost ~]# ipvsadm -v
ipvsadm v1.27 2008/5/15 (compiled with popt and IPVS v1.2.1)
[root@localhost ~]# vi /etc/sysctl.conf 
net.ipv4.ip_forward = 1
[root@localhost ~]# sysctl -p

[root@localhost ~]# ipvsadm -C
[root@localhost ~]# ipvsadm -A -t 172.16.16.172:80 -s rr
[root@localhost ~]# ipvsadm -a -t 172.16.16.172:80 -r 192.168.10.102:80 -m -w 1
[root@localhost ~]# ipvsadm -a -t 172.16.16.172:80 -r 192.168.10.103:80 -m -w 1
[root@localhost ~]# ipvsadm-save
-A -t localhost.localdomain:http -s rr
-a -t localhost.localdomain:http -r 192.168.10.102:http -m -w 1
-a -t localhost.localdomain:http -r 192.168.10.103:http -m -w 1
[root@localhost ~]# systemctl enable ipvsadm

注释:

-s:指定调度算法

rr:轮询

wrr:加权轮询

lc:最小链接数

wlc:加权最小连接数

-A 添加一个新的集群服务;

-E 修改一个己有的集群服务;

-D 删除指定的集群服务;

-a 向指定的集群服务中添加RS及属性;

-e 修改RS属性;

-t 指定为tcp协议;

-u 指定为udp协议;

-s 调度方法,默认为wlc;

-w 指定权重,默认为1;

-g Gateway, DR模型;

-i ipip, TUN模型;

-m masquerade, NAT模型;

-S 保存ipvsadm设定的规则策略,默认保存在/etc/sysconfig/ipvsadm中;

-R 载入己保存的规则策略,默认加载/etc/sysconfig/ipvsadm;

-C 清除所有集群服务;

-Z 清除所有记数器;

-L 显示当前己有集群服务,能通过相应的options查看不同状态信息;

-r 指定真实服务器的地址

复制代码
例如:
删除群集
[root@localhost ~]# ipvsadm -D -t 192.168.10.172:80 

删除某个real server
[root@localhost ~]# ipvsadm -d -t 192.168.10.172:80 -r 192.168.10.103

3.配置web节点服务器

(1)在两个web节点安装httpd,并创建测试页
复制代码
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# systemctl stop firewalld 
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum -y install nfs-utils
[root@localhost ~]# vi /var/www/html/index.html
LVS test1

注意:

另一台web节点的测试页面可以修改为其他文字,这样在测试时,就可以看到调度效果

vi /var/www/html/index.html

LVS test2

(2)启动httpd服务
复制代码
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl enable httpd

4.测试LVS群集

客户端测试网站http://172.16.16.172

可以刷新页面,观察页面的变化,是否在多个web站点中实现负载均衡

5.在LVS上产看调度信息

复制代码
[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  172.16.16.172:80 rr
  -> 192.168.10.102:80              Masq    1      0          0         
  -> 192.168.10.103:80              Masq    1      0          0  

注释:

ActiveConn是活动连接数,也就是tcp连接状态的ESTABLISHED

InActConn是指除了ESTABLISHED以外的,所有的其它状态的tcp连接

备注:共有十个连接状态,常见的如下

LISTENING状态

服务启动后首先处于侦听(LISTENING)状态。

ESTABLISHED状态

ESTABLISHED的意思是建立连接。表示两台机器正在通信。

CLOSE_WAIT

对方主动关闭连接或者网络异常导致连接中断,这时我方的状态会变成CLOSE_WAIT 此时我方要调用close()来使得连接正确关闭

TIME_WAIT

我方主动调用close()断开连接,收到对方确认后状态变为TIME_WAIT。

SYN_SENT状态

SYN_SENT状态表示请求连接,当你要访问其它的计算机的服务时首先要发个同步信号给该端口,此时状态为SYN_SENT,如果连接成功了就变为ESTABLISHED

6.linux做客户端时可以用以下代码进行测试

复制代码
[root@localhost ~]# for i in $(seq 10);do curl 172.16.16.172;done

2.2NFS共享存储服务

**1.**使用NFS发布共享资源

(1)安装nfs-utils、rpcbind软件包
复制代码
[root@localhost ~]# systemctl stop firewalld 
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum -y install nfs-utils rpcbind
[root@localhost ~]# systemctl enable nfs
[root@localhost ~]# systemctl enable rpcbind
(2)设置共享目录
复制代码
[root@localhost ~]# mkdir -p /opt/wwwroot
[root@localhost ~]# vi /etc/exports
/opt/wwwroot   192.168.10.0/24(rw,sync,no_root_squash)

可以同时发布多个目录,并且可以为不同的客户端设置不同的访问权限

备注:

  • rw 可读写的权限
  • ro 只读的权限
  • no_root_squash 登入NFS主机,使用该共享目录时相当于该目录的拥有者,如果是root的话,那么对于这个共享的目录来说,他就具有root的权限,这个参数极不安全,不建议使用
  • root_squash 登入NFS主机,使用该共享目录时相当于该目录的拥有者。但是如果是以root身份使用这个共享目录的时候,那么这个使用者(root)的权限将被压缩成为匿名使用者,即通常他的UID与GID都会变成nobody那个身份
  • all_squash 不论登入NFS的使用者身份为何,他的身份都会被压缩成为匿名使用者,通常也就是nobody
  • sync 资料同步写入到内存与硬盘当中
  • async 资料会先暂存于内存当中,而非直接写入硬盘
  • insecure 允许从这台机器过来的非授权访问
(3)启动NFS服务程序
复制代码
[root@localhost ~]# systemctl start rpcbind
[root@localhost ~]# systemctl start nfs
[root@localhost ~]# netstat -anpt | grep rpc
tcp        0      0 0.0.0.0:20048     0.0.0.0:*               LISTEN      44153/rpc.mountd    
tcp        0      0 0.0.0.0:50661     0.0.0.0:*               LISTEN      7511/rpc.statd      
tcp6       0      0 :::20048          :::*                    LISTEN      44153/rpc.mountd    
tcp6       0      0 :::54742          :::*                    LISTEN      7511/rpc.statd 
(4)查看本机发布的NFS共享目录
复制代码
[root@localhost ~]# showmount -e
Export list for localhost.localdomain:
/opt/wwwroot 192.168.7.0/24
/var/ftp/pub 192.168.10.173,192.168.7.172
(5)在web节点挂载nfs
复制代码
[root@localhost ~]# yum -y install nfs-utils
[root@localhost ~]# mount -t nfs 192.168.10.105:/opt/wwwroot /var/www/html

2.在nfs上创建测试网页

复制代码
[root@localhost ~]# vi /var/www/html/index.html
LVS test

3.linux做客户端时可以用一下代码进行测试

复制代码
[root@localhost ~]# for i in $(seq 10);do curl 172.16.16.172;done
相关推荐
Avan_菜菜8 小时前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB1 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode3 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220703 天前
如何搭建本地yum源(上)
运维
大树886 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠6 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质6 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工6 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智6 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_6 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化