LVS NAT模式 DR模式

文章目录

    • LVS NAT模式 DR模式
      • 集群概述
        • 什么是集群
        • 集群目的
        • 集群分类
      • LVS概述
        • LVS集群组成
        • LVS缩写
        • LVS工作模式
        • LVS负载均衡调度算法
          • 常用的调度算法
          • 其他调度算法
      • ipvsadm
        • 命令了解
      • 案例测试
        • NAT模式
          • 前置准备
          • 测试
        • DR模式
          • 环境配置
          • 测试
          • 总结
            • ignore
            • announce
      • LVS和Nginx的区别
        • 思路

LVS NAT模式 DR模式

集群概述

什么是集群
  • 通过高速网络将很多服务器集中起来
    • 提供同一种服务,在客户端开来就像是只有一个服务器
  • 可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益
  • 任务调度是集群系统中的核心技术
集群目的
  • 提高性能
  • 降低成本
  • 提高可扩展性
  • 增强可靠性
集群分类
  • 高性能计算集群HPC
    • 通过以集群开发的并行应用程序,解决复杂的科学问题
  • 负载均(LB)衡集群
    • 客户端负载在计算机集群中尽可能平均分摊
  • 高可用(HA)集群
    • 避免单点故障,当一个系统发生故障时,可以快速迁移

LVS概述

LVS集群组成
  • 前端: 负载均衡层
    • 有一台或多台负载调度器构成
  • 中间: 服务器群组层
    • 由一组实际运行应用服务的服务器组成
  • 底端: 数据共享存储层
    • 提供共享存储空间的存储区域
LVS缩写
LVS术语 说明
Director Server 调度服务器 将负载分布到Real Server的服务器
Real Server 真实服务器 真正提供应用服务的服务器
VIP 虚拟IP地址 公布给用户访问的虚拟IP地址
DIP 调度器连接后端节点服务器的IP地址
RIP 真实IP地址 集群节点上使用的IP地址

LVS NAT模式 DR模式_第1张图片

LVS工作模式
  • VS/NAT
    • 通过网络地址转换实现的虚拟服务器
    • 大并发访问时,调度器的性能成为瓶颈
  • VS/DR
    • 直接使用路由技术实现虚拟服务器
    • 节点服务器需要配置VIP,注意MAC地址广播
  • VS/TUN
    • 通过隧道方式实现虚拟服务器
LVS负载均衡调度算法

目前实现10种调度算法

常用的调度算法
  • 轮询(Round Robin)
  • 加权轮询(Weighted Round Robin)
  • 最少连接(Least Connections)
  • 加权最少连接(Weighted Least Connections)
其他调度算法
  • 源地址散列(Source Hashing)
  • 目标地址散列(Destination Hashing)
  • 基于局部性的最少链接
  • 带复制的基于局部性最少链接
  • 最短的期望的延迟
  • 最少队列调度

ipvsadm

命令了解
命令基础选项 含义
ipvsadm -A (add)添加虚拟服务器
ipvsadm -E (edit)修改虚拟服务器
ipvsadm -D (delet)删除虚拟服务器
ipvsadm -C (clear)清空所有
ipvsadm -a (add)添加真实服务器
ipvsadm -e (edit)修改真实服务器
ipvsadm -d (delet)删除真实服务器
ipvsadm -L (list)查看LVS规则表
-s[ rr | wrr | lc | wlc | sh ] (scheduler)指定集群算法
命令格式 含义
ipvsadm -A -t|u 192.168.4.5:80 -s [算法] 添加虚拟服务器,协议为tcp(-t)或者udp(-u)
ipvsadm -E -t|u 192.168.4.5:80 -s [算法] 修改虚拟服务器,协议为tcp或者udp
ipvsadm -D -t|u 192.168.4.5:80 删除虚拟服务器 协议为tcp或udp
ipvsadm -C 清空所有
ipvsadm -a -t|u 192.168.4.5:80 -r 192.168.2.100 [-g|i|m] [-w 权重] 添加真实服务器 -g(DR模式) -i(隧道模式) -m(NAT模式)
ipvsadm -e -t|u 192.168.4.5:80 -r 192.168.2.100 [-g|i|m] [-w 权重] 修改真实服务器 -r 真实服务器
ipvsadm -d -t|u 192.168.4.5:80 -r 192.168.2.100 删除真实服务器
ipvsadm -Ln 查看LVS规则表

总结

  • 大写虚拟(针对调度器),小写真实(针对真实提供服务的服务器)
  • AaEeDd 增改删

案例测试

NAT模式
前置准备
主机名 说明
proxy 192.168.2.5 192.168.4.5 Directory Server 要开启路由功能
web1 192.168.2.100 网关为192.168.2.5 Real Server (设置网关是为了数据能够顺利回传)
web2 192.168.2.200 网关为 192.168.2.5 Real Server
client 192.168.4.10
测试
#proxy
cat /proc/sys/net/ipv4/ip_forward
0   #0为关闭路由功能
echo 1 > /proc/sys/net/ipv4/ip_forward  #写入1开启路由功能  临时的
vim  /etc/sysctl.conf           #修改配置文件 改永久的
============================
net.ipv4.ip_forward = 1
==============================

yum -y install ipvsadm #安装LVS所需包
ipvsadm -A -t 192.168.4.5:80 -s wrr   #开启集群 加权轮询算法

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.4.5:80 wrr

ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.100 -w 2 -m  #-m NAT模式
ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.200  -m    

#client
curl 192.168.4.5
192.168.2.100
curl 192.168.4.5
192.168.2.100
curl 192.168.4.5
192.168.2.200        #成功访问了  2:1的加权轮询
#特别提示下     2.100和2.200的回传需要这两台机子网关设置为2.5
#并且提供服务的两台机子不能和客户端同网段 (数据回传不会发给网关 照样不通 测试环境下)

ipvsadm -C   #清下环境  下面再测试
DR模式

与NAT模式的区别在于数据回传不需要经过Director Server

环境配置
主机名 说明
proxy ens33 192.168.4.5 ens33:0 192.168.4.15/24
web1 ens33 192.168.4.100/24 lo:0 192.168.4.15/32
web2 ens33 192.168.4.200/24 lo:0 192.168.4.15/32
client 192.168.4.10/24
测试
#proxy
cd /etc/sysconfig/network-scripts/  #配置伪装ip
cp ifcfg-ens33 ifcfg-ens33:0
vim ifcfg-ens33:0
===========================
TYPE=Ethernet #网卡类型:以太网卡
BOOTPROTO=none   #none 手动配置  dhcp 自动配置IP
NAME=ens33:0  #网卡名
DEVICE=ens33:0 #设备名
ONBOOT=yes #开始自动激活该网卡
IPADDR=192.168.4.15 #IP地址
PREFIX=24 #子网掩码
#因为是拷贝的  UUID记得删除~
==============================
systemctl restart network  #重启网络服务
ip address show  #看下Ip
......
ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:57:c2:c1 brd ff:ff:ff:ff:ff:ff
    inet 192.168.4.5/24 brd 192.168.4.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.4.15/24 brd 192.168.4.255 scope global secondary noprefixroute ens33:0
........
#发现有4.15的ip了
#RHEL7和Centos7系统中有两个管理网络的服务,如果冲突  关闭NetworkManager服务再重启network试试

#web1
nmcli connection ipv4.method manual ipv4.addresses 192.168.4.100/24 connection.autoconnect yes
#设置ip地址为4.100
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0  #复制模板
vim ifcfg-lo:0     #修改
===========================
DEVICE=lo:0  #设备名称
IPADDR=192.168.4.15  #IP地址
NETMASK=255.255.255.255   #子网掩码
NETWORK=192.168.4.15    #网络地址
BROADCAST=192.168.4.15   #广播地址
ONBOOT=yes           #开机是否激活网卡
NAME=lo:0           #网卡名称
================================

vim /etc/sysctl.conf  #因为web1也配置了4.15 默认会地址冲突 需要设置
======================================
net.ipv4.conf.all.arp_ignore = 1   #忽略
net.ipv4.conf.lo.arp_ignore = 1    #忽略
net.ipv4.conf.lo.arp_announce = 2   #不宣告
net.ipv4.conf.all.arp_announce = 2   #不宣告    看下方参数介绍
========================================
#当有arp广播问谁是192.168.4.15时,本机忽略arp广播,不做任何回应(防止进站冲突)
#本机不向外宣告自己的lo回环地址是192.168.4.15(防止出站冲突)

#web2重复上面操作 地址不一样  伪装ip都是4.15

#proxy
ipvsadm -A -t 192.168.4.15:80 -s wrr
ipvsadm -a -t 192.168.4.15:80 -r 192.168.4.100 -w 1 -g
ipvsadm -a -t 192.168.4.15:80 -r 192.168.4.200 -w 1 -g
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.4.15:80 wrr
  -> 192.168.4.100:80             Route   1      0          0
  -> 192.168.4.200:80             Route   1      0          0


#client
#测试下
curl 192.168.4.15
192.168.2.100
curl 192.168.4.15
192.168.2.200

#轮询成功   显示内容2.100是因为上个案例http服务网页内容没改
总结
  • DR模式数据方向来看 客户端传过来的数据经过Director Server之后给Real Server 然后Real Server 直接回传给客户端(真实情况应该是通过路由 这个案例测试中同是192.168.4.0网段 避开了这个问题)
  • 根据上面的思路 客户端最终会丢弃Real Server的数据 因为发送的请求是给Director Server 收到了数据包 发送者居然是Real Server 客户端只会接受Director Server回应的数据包
  • 那么只能使用地址欺骗了!
    • 设置VIP为192.168.4.15 且配置在虚拟接口
    • DIP192.168.4.5就是proxy和Real Server 交接的IP
    • LVS中交接的RIP分别是web1 192.168.4.100 和web2 192.168.4.200
    • web1 web2需在loopback address 上设置 192.168.4.15 和VIP一样 这样就能发送伪装成192.168.4.15发送的数据包了 解决了上面客户端丢弃数据包的问题
    • 特别说明 loopback address仅自己可见 对外部机子不可见 一定程度上解决了IP冲突 但是ARP过程中会回应 还是会有IP冲突!!!
  • 那么就需要设置特别操作了 设置/etc/sysctl.conf文件 上面那几句是为了防止暴露自身IP

  • /etc/sysctl.conf 中ignore 和 announce参数说明
ignore

arp_ignore参数的作用是控制系统在收到外部的arp请求时,是否要返回arp响应。
arp_ignore参数常用的取值主要有0,1,2,3~8较少用到:
0:响应任意网卡上接收到的对本机IP地址的arp请求(包括环回网卡上的地址),而不管该目的IP是否在接收网卡上。
1:只响应目的IP地址为接收网卡上的本地地址的arp请求。
2:只响应目的IP地址为接收网卡上的本地地址的arp请求,并且arp请求的源IP必须和接收网卡同网段。
3:如果ARP请求数据包所请求的IP地址对应的本地地址其作用域(scope)为主机(host),则不回应ARP响应数据包,如果作用域为全局(global)或链路(link),则回应ARP响应数据包。
4~7:保留未使用
8:不回应所有的arp请求
sysctl.conf中包含all和eth/lo(具体网卡)的arp_ignore参数,取其中较大的值生效。


announce

arp_announce参数常用的取值有0,1,2。
0:允许使用任意网卡上的IP地址作为arp请求的源IP,通常就是使用数据包a的源IP。
1:尽量避免使用不属于该发送网卡子网的本地地址作为发送arp请求的源IP地址。
2:忽略IP数据包的源IP地址,选择该发送网卡上最合适的本地地址作为arp请求的源IP地址。
  sysctl.conf中包含all和eth/lo(具体网卡)的arp_ignore参数,取其中较大的值生效。


LVS和Nginx的区别

LVS本身不自带健康检查功能 需要自己写程序监控

思路
  • 用LVS调度器循环访问提供服务集群的真实IP下的端口服务
  • 如果发现访问失败 就调用ipvsadm -d 命令将失败的服务器从集群中踢出
  • 如果后来又能访问了 就调用ipvsadm -a 命令加回来
  • 每次循环sleep个几秒

你可能感兴趣的:(Linux,LVS)