LVS负载均衡群集

一、企业群集应用概述

  • 群集的含义
    • Cluster,集群、群集
    • 由多台主机构成,但对外只表现为一个整体
  • 问题
    • 互联网应用中,随着站点对硬件性能、响应速度、服务稳定性、数据可靠性等要求越来越高,单台服务器力不从心
  • 解决方法
    • 使用价格昂贵的小型机、大型机
    • 使用普通服务器构建服务群集

二、企业群集分类

  • 根据群集所针对的目标差异,可分为三种类型
    • 负载均衡群集
    • 高可用群集
    • 高性能运算群集
  • 负载均衡群集(Load Balance Cluster)
    • 提高应用系统的响应能力,尽可能处理更多的访问请求、减少延迟为目标、获得高并发、高负载(LB)的整体性能
    • LB的负载分配依赖于主节点的分流算法
  • 高可用群集(High Availability Cluster)
    • 提高应用系统的可靠性、尽可能地减少中断时间为目标,确保服务的连续性,达到高可用(HA)的容错效果
    • HA的工作方式包括双工和主从两种模式
  • 高性能运算群集(High Performance Computer Cluster)
    • 提高应用系统的 CPU运算速度、扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能运算(HPC)能力
    • 高性能依赖于 “分布式运算”、“并行计算”,通过专用硬件和软件将多个服务器的CPU、内存等资源整合在一起,实现只有大型、超级计算机才具备的计算能力

三、负载均衡群集架构

  • 在典型的负载均衡群集中,包括三个层次的组件,如图 1.1 所示。前端至少有一个负载
  • 调度器(Load Balancer,或称为Director)负责响应并分发来自客户机的访问请求;
  • 后端由大量真实服务器(Real Server)构成服务器池(Server Pool),提供实际的应用服务,整个群集的伸缩性通过增加、删除服务器节点来完成,而这些过程对客户机是透明的;
  • 为了 保持服务的一致性,所有节点使用共享存储设备。
    在这里插入图片描述

四、负载均衡群集工作模式分析

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

五、关于LVS虚拟服务器

Linux Virtual Server

  • 针对Linux内核的负载均衡解决方案
  • 1998年5月,由我国的章文嵩博士创建
  • 官方站点位于 http://www.linuxvirtualserver.org/。

LVS的负载调度算法

  • 轮询(Round Robin)
    • 将收到的访问请求按照顺序轮流分配给群集中的各节点(真实服务器)、均等地对待每一台服务器,而不管服务器实际的连接数和系统负载
  • 加权轮询(Weighted Round Robin)
    • 根据调度器设置的权重值来分发请求,权重值高的节点优先获得任务并且分配的请求越多,这样可以保证性能高的节点承担更 多请求。
  • 最少连接(Least Connections)
    • 根据真实服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接数最少的节点。如果所有的服务器节点性能相近,采 用这种方式可以更好地均衡负载。
  • 加权最少连接(Weighted Least Connections)
    • 在服务器节点的性能差异较大的情况下,调度器可以根据节点服务器负载自动调整权重,权重较高的节点将承担更 大比例的活动连接负载

实验报告

资源列表

  • web节点尽量避免使用多网卡,如果采用双网卡机制很容易出现,TCP连接问题,也就是syn消息收不到ack响应,所以尽量将无关的网卡禁用,以免路由配置的复杂
主机操作系统IP配置
lvsCentOS7192.168.72.1312C4G
web01CentOS7192.168.72.132
gateway:192.168.72.131
2C4G
web02CentOS7192.168.72.133
gateway:192.168.72.131
2C4G
web03CentOS7192.168.72.134
gateway:192.168.72.131
2C4G
nfsCentOS7192.168.72.1352C4G
clientCentOS7192.168.72.1362C4G

基础环境

  • 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
  • 关闭内核安全机制
setenforce 0
sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
  • 修改主机名
hostnamectl set-hostname lvs
hostnamectl set-hostname web01
hostnamectl set-hostname web02
hostnamectl set-hostname web03
hostnamectl set-hostname nfs
hostnamectl set-hostname client

# web01,web02,web03这三台的ip采用静态
# lvs,nfs的IP采用静态IP或者动态IP都可以
# client节点采用dhcp模式

一、准备环境

1.准备案例环境

nmcli con mod ens33   ipv4.gateway LVS节点的IP
nmcli con up ens33

# 在3个 web 节点执行,修改网络接口的IPv4网关地址,并重新激活连接
# 在web01,web02,web03节点执行即可
nmcli con mod ens33   ipv4.gateway 192.168.72.131
nmcli con up ens33
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/2[root@web01 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.72.131  0.0.0.0         UG    100    0        0 ens33
192.168.72.0    0.0.0.0         255.255.255.0   U     100    0        0 ens33
# 没有 route -n 命令的用 ip route
[root@web01 ~]# ip route
default via 192.168.72.131 dev ens33 proto static metric 100 
192.168.72.0/24 dev ens33 proto kernel scope link src 192.168.72.132 metric 100 

2.配置负载调度器

# 在 lvs 里执行,开启路由转发规则
[root@lvs ~]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
[root@lvs ~]# sysctl -p
net.ipv4.ip_forward = 1

# 在 lvs 虚拟机设置里添加一个网络适配器 设置为仅主机模式

在这里插入图片描述

# 添加完之后查看ip会发现多出一个网卡,网段不相同
[root@lvs ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.72.131  netmask 255.255.255.0  broadcast 192.168.72.255
        inet6 fe80::a0df:8b6:704a:2632  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:c9:ff:b1  txqueuelen 1000  (Ethernet)
        RX packets 597  bytes 57810 (56.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 478  bytes 49600 (48.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens36: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.126.128  netmask 255.255.255.0  broadcast 192.168.126.255
        inet6 fe80::f121:dba5:3cad:653e  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:c9:ff:bb  txqueuelen 1000  (Ethernet)
        RX packets 3  bytes 746 (746.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 12  bytes 1496 (1.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  • 在 client 节点
    在这里插入图片描述
# 修改 client 节点,修改网络适配器为仅主机模式,之后IP会和 lvs 节点的第二个网卡网段一样 126网段
[root@client ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.126.130  netmask 255.255.255.0  broadcast 192.168.126.255
        inet6 fe80::214e:67ff:b5de:75d0  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:48:ce:39  txqueuelen 1000  (Ethernet)
        RX packets 815  bytes 80804 (78.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 710  bytes 80006 (78.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 68  bytes 5916 (5.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 68  bytes 5916 (5.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

3.配置节点服务器

# web 节点
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

# 1.安装httpd服务
yum -y install httpd
# 2.启用 httpd 服务程序
systemctl start httpd
systemctl enable httpd

二、部署 LVS

1.加载 ip_vs模块

# 加载 ip_vs 模块
modprobe ip_vs

# 查看 ip_vs 版本信息
cat /proc/net/ip_vs

2.使用 ipvsadm 管理工具

yum -y install ipvsadm
ipvsadm -v

3.创建虚拟服务器

  • 若群集的 VIP 地址为 192.168.72.131,针对 TCP80 端口提供负载分流服务,使用的调度算法为轮询,则对应的 ipvsadm 命令操作如下所示。对于负载均衡调度器来说,VIP 必须是本机实际已启用的 IP 地址
# 清除原有策略
ipvsadm -C

# -A 表示添加虚拟服务器
# -t 用来指定 VIP 地址及 TCP 端口
# -s 用来指定负载调度算法——轮询(rr)、加权轮询(wrr)、最少连接(lc)、加权最少连接(wlc)

# 这条命令添加了一个新的虚拟服务,监听在192.168.126.128的80端口上,并使用轮询(rr)调度算法。
[root@lvs ~]# ipvsadm -A -t 192.168.126.128:80 -s rr

4.添加服务器节点

# -a 表示添加真实服务器
# -t 用来指定 VIP 地址及 TCP 端口
# -r 用来指定 RIP 地址及 TCP 端口
# -m 表示使用 NAT 群集模式(-g DR 模式和-i TUN 模式)
# -w 用来设置权重(权重为 0 时表示暂停节点)

# 这些命令将后端服务器添加到虚拟服务中
ipvsadm -a -t 192.168.126.128:80 -r 192.168.72.132 -m -w 1
ipvsadm -a -t 192.168.126.128:80 -r 192.168.72.133 -m -w 1
ipvsadm -a -t 192.168.126.128:80 -r 192.168.72.134 -m -w 1 

ipvsadm --save

5.查看群集节点状态

[root@lvs ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.126.128:80 rr
  -> 192.168.72.132:80            Masq    1      0          0         
  -> 192.168.72.133:80            Masq    1      0          0         
  -> 192.168.72.134:80            Masq    1      0          0 

# 查看群集节点状态
ipvsadm -ln
# 显示统计信息
ipvsadm -L -n --stats
# 看速率
ipvsadm -L -n --rate

添加内容测试

echo 'This is web01' > /var/www/html/index.html
echo 'This is web02' > /var/www/html/index.html
echo 'This is web03' > /var/www/html/index.html

[root@client ~]# curl 192.168.126.128
This is web03
[root@client ~]# curl 192.168.126.128
This is web02
[root@client ~]# curl 192.168.126.128
This is web01

6.删除服务器节点

# 删除服务器池中某一个节点
[root@lvs ~]# ipvsadm -d -r 192.168.72.134:80 -t 192.168.126.128:80



# 删除整个服务器
[root@lvs ~]# ipvsadm -D -t 192.168.126.128:80

# 清除原有策略
[root@lvs ~]# ipvsadm -C

7.保存负载分配策略

# 保存策略
[root@lvs ~]# ipvsadm-save -n > /etc/sysconfig/ipvsadm    

# 确认保存结果
[root@lvs ~]# cat /etc/sysconfig/ipvsadm    
-A -t 192.168.126.128:80 -s rr
-a -t 192.168.126.128:80 -r 192.168.72.132:80 -m -w 1
-a -t 192.168.126.128:80 -r 192.168.72.133:80 -m -w 1
-a -t 192.168.126.128:80 -r 192.168.72.134:80 -m -w 1

# 启动服务(重建规则)
   
systemctl start ipvsadm    

# 停止服务(清除策略)
systemctl stop ipvsadm    

三、部署 NFS

1.安装 nfs-utils、rpcbind 软件包

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

yum -y install nfs-utils rpcbind
systemctl enable nfs
systemctl enable rpcbind

2.设置共享目录

mkdir -p /opt/wwwroot
# rw 表示允许读写(ro 为只读),
# sync 表示同步写入,
# no_root_squash 表示当客户机以 root 身份访问时赋予本地 root 权限
#(默认是 root_squash,将作为 nfsnobody 用户降权对 待)。
echo '/opt/wwwroot 192.168.72.0/24(rw,sync,no_root_squash)' > /etc/exports

3.启动 NFS 服务程序

systemctl start rpcbind
systemctl start nfs

# 查看本机发布的 NFS 共享目录
showmount -e

4.在客户机中访问 NFS 共享资源,所有web节点操作

yum -y install rpcbind nfs-utils
systemctl enable rpcbind
systemctl start rpcbind

# 手动挂载 NFS 共享目录
mount 192.168.72.135:/opt/wwwroot /var/www/html

# fstab 自动挂载设置
echo '192.168.72.135:/opt/wwwroot /var/www/html nfs defaults,_netdev 0 0' >> /etc/fstab

# 挂载完以后在 nfs 节点写一个网页
echo 'This is NFS' >> /opt/wwwroot/index.html

# 最后在 client 节点测试
[root@client ~]# curl 192.168.126.128
This is NFS

四、测试

  • 做实验的时候是挂载的nfs,测试的时候可以取消nfs挂载,然后修改每台web默认的首页,通过客户端访问
  • 可以再lvs节点使用以下命令查看节点状态
ipvsadm -ln
  • 可以查看客户端访问详细信息及状态,便于排查问题
ipvsadm -lnc
  • 30
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值