详细集群概述,实战lvs-nat集群

集群概述,实战lvs-nat集群

  • LVS集群概述
    • 什么是集群?
    • 集群的特性:
    • 集群的应用场景
    • 集群的种类
    • LB实现手段
  • LVS集群
    • LVS集群工作流程图
  • LVS模式及工作原理
    • LVS负载均衡的三种包转发方式
    • NAT(网络地址映射)
    • IP Tunneling(IP隧道)
    • Direct Routing(直接路由)
  • LVS-NAT 模式工作原理:
      • 步骤1:客户端访问VIP1的网站
      • 步骤2:客户端访问调度器时,调度器通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器
      • 步骤3:真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程
      • 步骤总结及过程地址变化:
  • 配置LVS-NAT
    • 实验前期准备:
    • 真实环境中的拓扑图
      • 集群各节点IP注解
    • 实验拓扑图
    • 配置LVS(server-1分发器)
      • 1、打开路由转发:
      • 2、配置网络环境:
      • 3、配置防火墙规则:
      • 4、安装: LVS管理工具:
      • 5、使用ipvsadm命令设置规则:
    • 配置web服务器:
      • 配置第一台web服务器网络信息
        • 配置realserver,并启动web服务
      • 配置第二台web服务器网络信息
        • 配置realserver,并启动web服务
    • 测试访问
      • **测试直接访问服务器IP地址:**
      • **测试访问VIP**
    • 拓展:ipvsadm 更多参数说明

LVS集群概述

什么是集群?

一组各自相互独立且又相互依赖的,通过高速网络互联的计算机组成的一个计算机组, 以单一的系统模式加以管理, 为用户提供服务, 对用户来说, 用户只会认为对方是一个服务. 这个里面, 一组计算机的一台计算机就是集群的一个节点

集群的特性:

可伸缩性, 可靠性, 可管理性

集群的应用场景

例:
一台服务器 如果能够响应10000个并发,返回的状态码全部是200
如果现在有20000个并发 返回的状态码[ 200 304 301 500 404 ]
由以上例子说明,web服务已经达到瓶颈

解决这个问题的办法:
加配置: 加CPU, 加内存, 加带宽, 加SSD 这种解决方法称为“向上扩展”, 能够解决一时, 却不能持久一世[单台服务器上做动作]
加服务器: 一台==>两台, 两台==>四台 四台==>8台 使用多台服务器同时为用户提供服务 ,而这一种解决方法则称为“横向扩展”或“向外扩展”
向外扩展: 就是集群

集群的种类

集群系统主要分为
负载均衡(Load Balance)集群,简称LB
高可用(High Availability)集群,简称 HA 集群
高性能计算(High Perfermance Computing)集群,简称 HPC 集群

详细集群概述,实战lvs-nat集群_第1张图片

LB实现手段

硬件的实现: – F5 负载均衡器
软件的实现: – LVS(4层,传输层) – Nginx(7层,应用层)

LVS集群

LVS(Linux Virtual Server)
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一,是根据iptables的实现来开发的,所以使用时候会和iptables相当类似
官网: http://www.linuxvirtualserver.org/.
中文站点:http://zh.linuxvirtualserver.org/.

LVS集群工作流程图

详细集群概述,实战lvs-nat集群_第2张图片
负载调度器,:分发器(Load Balancer, Director): 整个集群对外的最前端机, 负责接收用户请求, 并且根据自己的调度算法, 将请求转发到后端真实服务器上的动作,而客户认为服务是来自一个IP地址(我们可称之为VIP虚拟IP地址)上的。

服务器池: Server Pool 真正为用户提供服务的服务器, 每一台服务器就是一台RS[RealServer],执行的服务有WEB、MAIL、FTP和DNS等。

共享存储: Shared Storaged 为RS保持相同内容, 提供数据的一致性,也就是说,它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。

LVS模式及工作原理

LVS(4层) 模式:
VS/NAT
LVS-VS/DR
VS/TUN

LVS负载均衡的三种包转发方式

LVS提供了三种包转发方式:
NAT(网络地址映射)
IP Tunneling(IP隧道)
Direct Routing(直接路由)
不同的转发模式决定了不同的cluster的网络结构

NAT(网络地址映射)

NAT: 网络地址转换
DNAT: 目标地址转换 改变的是目标地址
SNAT: 原地址转换 改变的是原地址
LVS-NAT 就是使用的SNAT和DNAT完成报的转发
NAT方式可支持任何的操作系统,以及私有网络,并且只需一个Internet IP地址,但是整个系统的性能受到限制。因为执行NAT每次需要重写包,有一定的延迟;另外,大部分应用有80%的数据是从服务器流向客户机,也就是用户的请求非常短,而服务器的回应非常大,对负载均衡器形成很大压力,成为了新的瓶颈。

IP Tunneling(IP隧道)

director(分发器)分配请求到不同的real server。real server处理请求后直接回应给用户,这样director负载均衡器仅处理客户机与服务器的一半连接。IP Tunneling技术极大地提高了director的调度处理能力,同时也极大地提高了系统能容纳的最大节点数,可以超过100个节点。real server可以在任何LAN或WAN上运行,这意味着允许地理上的分布,这在灾难恢复中有重要意义。服务器必须拥有正式的IP地址用于与客户机直接通信,并且所有服务器必须支持IP隧道协议。

Direct Routing(直接路由)

与IP Tunneling类似,负载均衡器仅处理一半的连接,避免了新的性能瓶颈,同样增加了系统的可伸缩性。Direct Routing与IP Tunneling相比,没有IP封装的开销,但由于采用物理层(修改MAC地址)技术,所有服务器都必须在一个物理网段。

LVS-NAT 模式工作原理:

客户端访问调度器时,调度器通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程

步骤1:客户端访问VIP1的网站

如图:
详细集群概述,实战lvs-nat集群_第3张图片
图上各IP注解:
CIP 客户端的IP
VIP 是域名解析的IP, 是集群对外的公网IP
DIP 用来和后端服务器进行数据交互的IP, 请求报文转发给后端服务器从此口出去
RIP 真实服务器的IP

步骤2:客户端访问调度器时,调度器通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器

详细集群概述,实战lvs-nat集群_第4张图片

步骤3:真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程

详细集群概述,实战lvs-nat集群_第5张图片

步骤总结及过程地址变化:

1: 客户端请求访问www.example.com[www.example.com ===> VIP]
源地址: CIP 目标地址: VIP
2: 请求报文到达负载均衡器
源地址: CIP 目标地址: RIP
3: RealServer收到报文处理, 响应
源地址: RIP 目标地址: CIP
4: 负载调度器收到报文, 根据自身之前的转发修改记录, 还原报文
源地址: VIP 目标地址: CIP

配置LVS-NAT

实验前期准备:

1、准备3台主机

真实环境中的拓扑图

详细集群概述,实战lvs-nat集群_第6张图片

集群各节点IP注解

客户端计算机的IP(CIP):
可能是一个本地的、与VIP在同一网络的私有ip地址,或者是一个因特网上的公共ip地址。用作向集群发送请求的源ip地址

虚拟IP(VIP):
Director用于向客户端提供服务的ip地址
Director的IP(DIP):
在Director的VIP上接收访问集群服务的请求,这些请求通过DIP转发出去抵达各个集群节点

真实real server IP(RIP):
在LVS术语中,向外部世界提供服务的节点叫做真实服务器,因此在真实服务器上使用的ip地址叫做真实ip地址(RIP)。

实验拓扑图

详细集群概述,实战lvs-nat集群_第7张图片
**注意:

  1. Server-1:作为分发器,必须有2个网卡,我们测试环境下做所以需要添加一块网卡,桥接模式下的是公网ip,我们后续搭建完成后会使用这个ip进行访问
  2. 两台WEB服务器的网卡都设置成为:vmnet4,与分发器处于同一局域网
  3. 客户端只要求能够访问到VIP即可**

WEB服务器网卡设置如下
详细集群概述,实战lvs-nat集群_第8张图片

配置LVS(server-1分发器)

1、打开路由转发:

[root@server-1 ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf 
[root@server-1 ~]# sysctl -p            #让配置生效

2、配置网络环境:

添加一个网卡(需要两张网卡), 配置成以下网络环境:
ens33 192.168.8.9 模式:br0 模拟公网
ens37 192.168.0.9 模式:vmnet4 模拟内网

[root@server-1 ~]# cd /etc/sysconfig/network-scripts/
[root@server-1 network-scripts]# cp ifcfg-ens33 ifcfg-ens37
[root@server-1 network-scripts]# vim ifcfg-ens37                      #编辑新加网卡信息

写入以下代码

BOOTPROTO=static
DEVICE=ens37
ONBOOT=yes
IPADDR=192.168.0.9
NETMASK=255.255.255.0
GATEWAY=192.168.0.254
#DNS1=223.5.5.5
#DNS2=223.6.6.6

3、配置防火墙规则:

[root@server-1 ~]# yum install -y iptables-services                #安装iptables
[root@server-1 ~]# systemctl stop firewalld.service                 #停止Firewalls防火墙
[root@server-1 ~]# iptables -t nat -F 
[root@server-1 ~]# iptables -t nat -X
[root@server-1 ~]# iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE      #添加规则          
#postrouting用来修改源地址用来做SNAT。  如:内网通过路由器NAT转换功能实现内网PC机通过一个公网IP地址上网
[root@server-1 ~]# service iptables save              #保存

4、安装: LVS管理工具:

[root@server-1 ~]# yum install -y ipvsadm 
或
[root@server-1 ~]# mount /dev/sr0 /mnt/
[root@server-1 ~]# rpm -ivh /mnt/Packages/ipvsadm-1.27-7.el7.x86_64.rpm

5、使用ipvsadm命令设置规则:

[root@server-1 ~]# ipvsadm -A -t 192.168.8.9:80 -s rr  

选项说明:
-A 添加虚拟服务器
-t 表示TCP的服务 VIP:PORT
-s 指定调度算法 rr表示round-robin 轮循

[root@server-1 ~]# ipvsadm -a -t 192.168.8.9:80 -r 192.168.0.4 -m 
[root@server-1 ~]# ipvsadm -a -t 192.168.8.9:80 -r 192.168.0.5 -m 

选项说明:
-a 表示添加real server的地址
-r 指定real server的IP地址
-m 表示masquerade 也就是NAT方式的LVS

怎么查看配置:
Ipvsadm命令,用于配置及查看内核IPVS表和算法的工具,类似于iptables

[root@server-1 ~]# 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.8.9:80 rr
  -> 192.168.0.4:80               Masq    1      0          0         
  -> 192.168.0.5:80               Masq    1      0          0      

保存配置或规则:

[root@server-1 ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@server-1 ~]# cat !$
cat /etc/sysconfig/ipvsadm
-A -t server-1:http -s rr
-a -t server-1:http -r 192.168.0.4:http -m -w 1
-a -t server-1:http -r 192.168.0.5:http -m -w 1
或者也可以:
[root@server-1 ~]# ipvsadm -S > /opt/aa

配置web服务器:

配置第一台web服务器网络信息

[root@apache-1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.4                      #IP地址和网关注意下,要对应分发器
NETMASK=255.255.255.0
GATEWAY=192.168.0.9
DOMAIN=example.com
[root@apache-1 ~]# systemctl restart network.service 
配置realserver,并启动web服务
[root@apache-1 ~]# yum install -y httpd 
[root@apache-1 ~]# echo "192.168.0.4" >> /var/www/html/index.html
[root@apache-1 ~]# systemctl restart httpd.service 
[root@apache-1 ~]# firewall-cmd --add-port=80/tcp --permanent 
[root@apache-1 ~]# firewall-cmd --reload 

配置第二台web服务器网络信息

[root@apache-2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.5                   
NETMASK=255.255.255.0
GATEWAY=192.168.0.9
DOMAIN=example.com
[root@apache-2 ~]# systemctl restart network.service 
配置realserver,并启动web服务
[root@apache-2 ~]# yum install -y httpd 
[root@apache-2 ~]# echo "192.168.0.5" >> /var/www/html/index.html
[root@apache-2 ~]# systemctl restart httpd.service 
[root@apache-2 ~]# firewall-cmd --add-port=80/tcp --permanent 
[root@apache-2 ~]# firewall-cmd --reload 

测试访问

测试直接访问服务器IP地址:

[root@server-1 ~]# yum install -y elinks             #纯文本界面的浏览器
[root@server-1 ~]# elinks 192.168.0.4 -dump           #-dump:将HTML文档以纯文本的方式打印到标准输出设备
   192.168.0.4
[root@server-1 ~]# elinks 192.168.0.5 -dump
   192.168.0.5

测试访问VIP

[root@server-1 ~]# elinks 192.168.8.9 -dump 
   192.168.0.4
[root@server-1 ~]# elinks 192.168.8.9 -dump 
   192.168.0.5

####浏览器测试访问:
详细集群概述,实战lvs-nat集群_第9张图片

拓展:ipvsadm 更多参数说明

-L -n ==> 查看规则,显示内核虚拟服务器表

[root@server-1 ~]# ipvsadm -Ln

-L -n -c ==> 查看客户端连接分发器和real server 的情况

[root@server-1 ~]# ipvsadm -Lnc 
IPVS connection entries
pro expire state       source             virtual            destination
TCP 00:59  TIME_WAIT   192.168.8.22:63090 192.168.8.9:80     192.168.0.4:80
TCP 00:59  TIME_WAIT   192.168.8.22:63091 192.168.8.9:80     192.168.0.5:80

-L -n --stats ==> 查看分发情况

[root@server-1 ~]# ipvsadm -Ln --stats
IP Virtual Server version 1.2.1 (size=4096)    #Conns:轮询数   InPkts:输入包  OutPkts:输出包  InBytes:输入字节 OutBytes:输出字节
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes        
 -> RemoteAddress:Port
TCP  192.168.8.9:80                     53      324      169    27939    19372
 -> 192.168.0.4:80                     26      158       82    13254     9324
 -> 192.168.0.5:80                     27      166       87    14685    10048

-L -n --rate ==> 查看速率

[root@server-1 ~]# ipvsadm -Ln --rate
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port                 CPS    InPPS   OutPPS    InBPS   OutBPS
  -> RemoteAddress:Port
TCP  192.168.8.9:80                      0        2        2      189      213
  -> 192.168.0.4:80                      0        1        1       87       98
  -> 192.168.0.5:80                      0        1        1      102      115

-Z --zero 虚拟服务表计数器清零(清空当前的连接数量等)

[root@server-1 ~]# ipvsadm -Z 
[root@server-1 ~]# ipvsadm -Ln --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  192.168.8.9:80                      0        0        0        0        0
  -> 192.168.0.4:80                      0        0        0        0        0
  -> 192.168.0.5:80                      0        0        0        0        0

–set tcp tcpfin udp 设置超时时间

[root@server-1 ~]# ipvsadm --set 1 1 1
表示为:
表示tcp空闲等待时间为1秒
客户端关闭链接等待时间为1秒
udp空闲等待为1秒

-C 清空规则

[root@server-1 ~]# ipvsadm -C 
[root@server-1 ~]# ipvsadm -Ln 
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

导入LVS配置文件:

[root@server-1 ~]# ipvsadm-restore < /etc/sysconfig/ipvsadm

你可能感兴趣的:(运维,linux,centos,服务器,运维,负载均衡)