LVS负载均衡集群

LVS负载均衡集群

一.什么是集群

1.1概念

所有服务器组合在一起做同一件事。

1.2集群分类

1)负载均衡集群 LB
提高系统响应效率,处理更多访问请求,减少延迟时间,实现高并发、高负载能力。
应用代表: 软件类:LVS Nginx HAproxy  硬件类:F5 绿盟

2)高可用集群 HA
提高系统可靠性,减少中断时间,确保服务连续性。
应用代表:Keepalived heartbeat

3)高性能运算集群 HPC
通过云计算或分布式计算获取高性能的CPU、内存等资源

二.负载均衡集群(LVS)

2.1负载均衡架构

LVS负载均衡集群_第1张图片

2.2负载均衡工作模式

2.2.1NAT模式

调度器会作为所有节点服务器的默认网关,也是客户机的访问入口和节点服务器返回响应消息的出口,也就是说调度器会承较双向数据的负载压力,可能会成为整个群集的性能瓶颈。
由于节点服务器都处于内网环境,使用私网IP地址,所以安全性尚可。

LVS负载均衡集群_第2张图片

2.2.2TUN模式

调度器仅作为客户端的访问入口,节点服务器的响应消息是直接返回给客户端的,不经过调度器
由于节点服务器需要部署在不同位置的公网环境中,需要具有独文公网IP。调度器与节点服务器是通过专用的IP隧道实现相互通信,因为IP隧道的成本模式较高、安全性较低,且IP隧道需要更多的封装和解封装过程,性能也会受到一定影响。

LVS负载均衡集群_第3张图片

2.2.3DR路由

调度器仅作为客户端访问入口,节点服务器的响应消息是直接返回给客户端,不经过调度器,节点服务器与调度器是部署在同一局域网内,因此不需要建立专用的IP的隧道,DR模式是企业的首选模式。

LVS负载均衡集群_第4张图片

2.2.4关于LVS虚拟服务器

LVS负载均衡集群_第5张图片

2.3.LVS调度器常见算法

LVS调度器用的调度方法基本分为两类:
固定调度算法: rr, wrr, dh, sh
rr:轮询算法将请求依次分配给不同的rs节点,即RS节点中均摊分配。适合于RS所有节点处理性能接近的情况。
wrr:加权轮训调度,依挥不同RS的权值分配任务。权值较高的RS将优先获得任务,并日分配到的连接教将比权值低的RS更多。相同权值的RS得到相园数目的连接教
dh:目的地址哈希调度 (destination hashing) 以目的地址为关键字查找一个静态hash表来获得所需RS。
sh:源地址哈希调度 (source hashing) 以源地址为关键字查找一个静态hash表来获得需要的RS。

动态调度算法: wlc,lc,lblc
wc:加权最小连接数调度,假设各台RS的权值依次为Wi,当前tcp连接数依次为Ti,依次除/Ti/wi为最小的RS作为下一个分配的RS
lc:最小连接数调度(least-connection),IPVS表存储了所有活动的连接。IB会比较将连接请求发送到当前连接最少的RS。
lblc: 基于地址的最小连接数调度 (locality-based)
1east-connection):将来自同一个目的地的请求分配给同一台BS,此时这台服务器是尚未满负荷的。否则就将这个请求分配给连接数最小的ES,并以它作为下一次分配的首先考虑

2.4ipvsadm 工具选项说明

选项 说明
-A 添加虚拟服务器
-D 删除整个虚拟服务器
-s 指定负载调度算法(轮询:rr、加权轮询:wrr、最少连接:lc、加权最少连接:wlc)
-a 表示添加真实服务器(节点服务器)
-d 删除某一个节点
-t 指定 VIP地址及 TCP端口
-r 指定 RIP地址及 TCP端口
-m 表示使用 NAT群集模式
-g 表示使用 DR模式
-i 表示使用 TUN模式
-w 设置权重(权重为 0 时表示暂停节点)
-p 60 表示保持长连接60秒(默认关闭连接保持)
-l 列表查看 LVS 虚拟服务器(默认为查看所有)
-n 以数字形式显示地址、端口等信息,常与“-l”选项组合使用。ipvsadm -ln

三.LVS-NAT部署

3.1实验分析

LVS负载均衡集群_第6张图片

3.2实验部署

3.2.1准备nfs共享目录

[root@localhost ~]# systemctl stop firewalld.service   
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl disable firewalld.service   //关闭防火墙,设置为禁止开机自启
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost ~]# mkdir -p /data/test1  
[root@localhost ~]# mkdir -p /data/test2
[root@localhost ~]# echo '

this is test1 web

' >/data/test1 [root@localhost ~]# echo '

this is test2 web

' >/data/test2 [root@localhost test1]# cat index.html

this is test1 web

[root@localhost test2]# cat index.html //准备测试页面

this is test2 web

[root@localhost ~]# systemctl enable --now rpcbind nfs [root@localhost ~]# vim /etc/exports /data/test1 192.168.111.0/24 (ro) /data/test2 192.168.111.0/24 (ro) [root@localhost ~]# systemctl restart rpcbind [root@localhost ~]# systemctl restart nfs //安顺序重启服务,先重启rpcbind,然后重启nfs. [root@localhost ~]# showmount -e 192.168.111.40 //查看共享目录 Export list for 192.168.111.40: /data/test2 (everyone) /data/test1 (everyone) [root@localhost ~]#

3.2.2准备两台节点服务器

第一台节点服务器:IP地址为192.168.111.30//

[root@localhost xu]# cd 
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33  //将节点服务器的网关设置为负载调度器的IP地址,这样才能确保节点服务器和调度实现私网通信。
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=b4f89563-114e-420b-a397-932455123868
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.111.30
NETMASK=255.255.255.0
GATEWAY=192.168.111.10     //网关设置为负载调度器的IP

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0//关闭防火墙,设置为禁止开机自启
[root@localhost ~]# netstat -lntp |grep nginx       //安装nginx服务做web服务器提供页面服务
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      10274/nginx: master 
[root@localhost ~]# mount 192.168.111.40:~/data/test1 /usr/share/nginx/html 
mount.nfs: Stale file handle
[root@localhost ~]# cd /usr/share/nginx/
[root@localhost nginx]# ls
ls: 无法访问html: 失效文件句柄
html
[root@localhost nginx]# cd html
bash: cd: html: 失效文件句柄
[root@localhost nginx]# mount 192.168.111.40:/data/test1 /usr/share/nginx/html 
mount.nfs: /usr/share/nginx/html is busy or already mounted
[root@localhost nginx]# umount -lf /usr/share/nginx/html/           //当挂载卡死时通过umount -lf 共享目录解挂载
[root@localhost html]# mount 192.168.111.40:/data/test1 /usr/share/nginx/html/   //重新挂载目录
[root@localhost html]# mount -a            //刷新挂载
[root@localhost html]# cd /usr/share/nginx/html/
[root@localhost html]# ls
index.html
[root@localhost html]# cat index.html   //查看共享结果

this is test1 web

[root@localhost html]# systemctl restart nginx //重启nginx服务 第二台节点服务器:IP地址为192.168.111.35// [root@localhost ~]# systemctl stop firewalld [root@localhost ~]# setenforce 0 [root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 //将节点服务器的网关设置为负载调度器的IP地址,这样才能确保节点服务器和调度实现私网通信。 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 UUID=b4f89563-114e-420b-a397-932455123868 DEVICE=ens33 ONBOOT=yes IPADDR=192.168.111.35 NETMASK=255.255.255.0 GATEWAY=192.168.111.10 //网关设置为负载调度器的IP [root@localhost ~]# systemctl restart nginx [root@localhost ~]# netstat -lntp |grep nginx tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 11687/nginx: master [root@localhost ~]# mount 192.168.111.40:/data/test2 /usr/share/nginx/html/ [root@localhost ~]# mount -a [root@localhost ~]# cd /usr/share/nginx/html/ [root@localhost html]# cat index.html

this is test2 web

[root@localhost html]# systemctl restart nginx

3.2.3准备负载调度服务器

[root@localhost xu]# cd 
[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# setenforce 0           //关闭防火墙
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens32
[root@localhost network-scripts]# vim ifcfg-ens33     //添加私网网卡,负责对内网通信
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=b4f89563-114e-420b-a397-932455123868
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.111.10
NETMASK=255.255.255.0

[root@localhost network-scripts]# vim ifcfg-ens32     //添加外网网卡,负责对外通信
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens32
DEVICE=ens32
ONBOOT=yes
IPADDR=12.0.0.50
NETMASK=255.255.255.0

[root@localhost network-scripts]# systemctl restart network  //重启网卡
[root@localhost network-scripts]# vim /etc/sysctl.conf  //添加配置,使得服务器可以有路由转发功能
[root@localhost network-scripts]# sysctl -p
net.ipv4.ip_forward = 1
[root@localhost network-scripts]# iptables -F && iptables -t nat -F   //清空原有的防火墙规则
[root@localhost network-scripts]# iptables -t nat -A POSTROUTING -s 192.168.111.0/24 -o ens32 -j SNAT --to 12.0.0.50
//添加防火墙规则,-t指定nat表,-A 指定POSTROUTING链(源IP), -s指定源IP网段 ,-o指定出站网卡,-j指定控制类为SNAT, --to指定外网网卡
[root@localhost network-scripts]# iptables -nL -t nat  //查看nat表的防火墙规则
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
SNAT       all  --  192.168.111.0/24     0.0.0.0/0            to:12.0.0.50
[root@localhost network-scripts]# iptables -t filter -A FORWARD -p tcp --dport 80 -j ACCEPT 
//-t指定filter表(过滤数据包),-A指定FORWARD链(转发数据),-p指定协议,-j指定控制类型
[root@localhost network-scripts]# modprobe ip_vs  //加载LVS内核模块
[root@localhost network-scripts]# yum install -y ipvsadm    //安装ipvsadm 管理工具
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
local                                                                                     | 3.6 kB  00:00:00     
正在解决依赖关系
--> 正在检查事务
---> 软件包 ipvsadm.x86_64.0.1.27-7.el7 将被 安装
--> 解决依赖关系完成

依赖关系解决

=================================================================================================================
 Package                   架构                     版本                           源                       大小
=================================================================================================================
正在安装:
 ipvsadm                   x86_64                   1.27-7.el7                     local                    45 k

事务概要
=================================================================================================================
安装  1 软件包

总下载量:45 k
安装大小:75 k
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在安装    : ipvsadm-1.27-7.el7.x86_64                                                                    1/1 
  验证中      : ipvsadm-1.27-7.el7.x86_64                                                                    1/1 

已安装:
  ipvsadm.x86_64 0:1.27-7.el7                                                                                    

完毕!
[root@localhost yum.repos.d]# ipvsadm-save > /etc/sysconfig/ipvsadm //创建一个空文件 
[root@localhost yum.repos.d]# systemctl start ipvsadm.service  //启动服务
[root@localhost yum.repos.d]# ipvsadm -C   //清空原有规则
[root@localhost yum.repos.d]# ipvsadm -A -t 12.0.0.50:80 -s rr   //-A添加虚拟服务器,-t指定VIP地址及TCP端口,-s指定调度算法
[root@localhost yum.repos.d]# ipvsadm -a -t 12.0.0.50:80 -r 192.168.111.30:80 -m -w 1
//-a添加真实服务器,-t指定VIP地址及TCP端口,-r指定 RIP地址及 TCP端口,-表示使用 NAT群集模式,-w设置权重(权重为 0 时表示暂停节点)
[root@localhost yum.repos.d]# ipvsadm -a -t 12.0.0.50:80 -r 192.168.111.35:80 -m -w 1
//-a添加真实服务器,-t指定VIP地址及TCP端口,-r指定 RIP地址及 TCP端口,-表示使用 NAT群集模式,-w设置权重(权重为 0 时表示暂停节点)
[root@localhost yum.repos.d]# ipvsadm -ln //查看规则
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  12.0.0.50:80 rr
  -> 192.168.111.30:80            Masq    1      0          0         
  -> 192.168.111.35:80            Masq    1      0          0         
[root@localhost yum.repos.d]# systemctl restart ipvsadm.service 
[root@localhost yum.repos.d]# 

3.2.4准备客户端访问测试

LVS负载均衡集群_第7张图片
LVS负载均衡集群_第8张图片

LVS负载均衡集群_第9张图片

你可能感兴趣的:(负载均衡,lvs,服务器)