Linux Load Balancing之NAT与DR模型

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介:

温馨提示:集群的基础知识请点击此链接

---本文大纲

  • 定义集群的命令(ipvsadm)

  • NAT模型演示

  • DR模型演示

  • 持久连接演示

一、定义集群的命令

命令格式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ipvsadm -A|E -t|u|f service-address [-s scheduler]
               [-p [timeout]] [-M netmask]
       ipvsadm -D -t|u|f service-address
       ipvsadm -C
       ipvsadm -R
       ipvsadm -S [-n]
       ipvsadm -a|e -t|u|f service-address -r server-address
               [-g|i|m] [-w weight] [-x upper] [-y lower]
       ipvsadm -d -t|u|f service-address -r server-address
       ipvsadm -L|l [options]
       ipvsadm -Z [-t|u|f service-address]
       ipvsadm -- set  tcp tcpfin udp
       ipvsadm --start-daemon state [--mcast-interface interface]
               [--syncid syncid]
       ipvsadm --stop-daemon state
       ipvsadm -h

常用选项

(1).管理集群服务

添加

-t :tcp协议的集群 service-address后面必须写成ip:port

-u :udp协议的集群 service-address后面必须写成ip:port

-f :防火墙的标记 service-address后面必须写成mark numbe

-s :指定调试算法

-p :保存session会话 -p  times

修改

ipvsadm -E -t|u|f server-adddress

-E: (实例中会有说明)

删除

ipvsadm -D -t|u|f server-adddres

-D:删除集群服务

(2).管理集群服务中的realserver

-t|u|f service-address 实现定义好的某集群服务

-r server-address rs的地址在nat模型中可使用ip:port实现端口映射

-g : DR(所使用的模型)

-i : TUN

-m : NAT

[-w weight] 指定权重(此处为数值)

修改

ipvsadm -e -t|u|f server-adddress    

删除

ipvsadm -d -t|u|f server-adddress

(3).查看

-n 显示主机地址和端口为数字格

--stats 显示进出站数据

--rate 显示速率

--timeout 显示每一个tcp tcpfin udp 的超时时间值

--deamon 显示进程信息

--sort 显示排序规则 默认是升序的

-c 显示多少个客户连接进来

(4).删除所有集群服务

ipvsadm -C

(5).保存定义的规则

service ipvsadm save(默认保存于/etc/sysconfig/ipvsadm文件中,当中没有集群服务,只有转发记录)

ipvsadm -S > /path/to/somefile

(6).载入此前的规则

ipvsadm -R(以默认文件/etc/sysconfig/ipvsadm为模板)

ipvsadm -R < /path/to/somefile

二、NAT模型演示

注:

NAT原理请参阅DNAT原理

1、资源分配

服务类型 软件版本/服务/说明 IP地址
OS Centos6.5.x86_64
Director

ipvsadm

vip:192.168.1.111

dip:172.16.32.111

real server 1 http rip:172.16.32.110
real server 2 http rip:172.16.32.112

2、实验拓扑图

wKiom1NS5cez-6tBAAHEt1QveK8091.jpg

3、配置过程

第一步、Director

VIP(eth0):192.168.1.111

DIP(eth1):172.16.32.111/16

配置命令

1、配置外网IP(VIP)

2、配置内网IP(DIP)

3、开启路由间转发功能

4、安装ipvsadm程序包

1
2
3
4
5
#ifconfig eth0 192.168.1.111 netmask 255.255.255.0 up
#ifconfig eth1 172.16.32.111 netmask 255.255.0.0 up
#sysctl -w net.ipv4.ip_forward=1
#sysctl -p
#yum install -y ipvsadm

第二步、rs1

rip(eth0):172.16.32.110

配置命令

1、配置内网IP

2、添加默认网关

3、安装http服务

4、设置默认页面

5、启动http服务

1
2
3
4
5
#ifconfig eth0  172.16.32.110 netmask 255.255.0.0 up
#route add default gw 172.16.32.111
#yum install -y http
#echo "172.16.32.110" > /var/www/html/index.html
#service httpd start

第三步、rs2

rip(eth0):172.16.32.112

配置命令

1、配置内网IP

2、添加默认网关

3、安装http服务

4、设置默认页面

5、启动http服务

1
2
3
4
5
#ifconfig eth0  172.16.32.112 netmask 255.255.0.0 up
#route add default gw 172.16.32.111
#yum install -y http
#echo "172.16.32.112" > /var/www/html/index.html
#service httpd start

第四步、配置集群服务

配置命令

1
2
3
4
#ipvsadm -C
#ipvsadm -A -t 192.168.1.111:80 -s rr
#ipvsadm -a -t 192.168.1.111:80 -r 172.16.32.110:80 -m
#ipvsadm -a -t 192.168.1.111:80 -r 172.16.32.112:80 -m

第五步、测试

wKiom1NTAnfCt8RjAAPXVjsPQaM548.jpg

wKiom1NTBCWjUpB9AAEwZTxYptU172.jpg

====================================NAT模型演示完毕======================================

三、DR模型演示

1、资源分配

服务类型 软件版本/服务/说明 IP地址
OS Centos6.5.x86_64
Director

ipvsadm

vip(eth0:0):192.168.1.10

dip(eth0):192.168.1.11

real server 1 http

vip(lo:0):192.168.1.10

rip(eth0):192.168.1.21

real server 2 http

vip(lo:0):192.168.1.10

rip(eth0):192.168.1.31

2、实验拓扑图

wKioL1NTD5qzSjOKAAJuxD_VxGI379.jpg

3、配置过程

第一步、配置Director

1
2
#ifconfig eth0 192.168.1.11 netmask 255.255.255.0 up
#ifconfig eth0:0 192.168.1.10 netmask 255.255.255.0 up

第二步、配置RS1

1
2
3
4
5
6
7
8
9
#ifconfig eth0 192.168.1.21 netmask 255.255.255.0 up
#echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
#echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
#ifconfig lo:0 192.168.1.10 netmask 255.255.255.255 broadcast 192.168.1.10 up
#yum install -y http
#echo "192.168.1.21" >/var/www/html/index.html
#service httpd restart

第三步、配置RS2

1
2
3
4
5
6
7
8
9
#ifconfig eth0 192.168.1.31 netmask 255.255.255.0 up
#echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
#echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
#ifconfig lo:0 192.168.1.10 netmask 255.255.255.255 broadcast 192.168.1.10 up
#yum install -y http
#echo "192.168.1.31" >/var/www/html/index.html
#service httpd restart

说明:

arp_ignore: 定义接收到ARP请求时的响应级别;

0:只要本地配置的有相应地址,就给予响应;

1:仅在请求的目标地址配置请求到达的接口上的时候,才给予响应;

arp_ignore = 1

arp_announce:定义将自己地址向外通告时的通告级别;

0:将本地任何接口上的任何地址向外通告;

1:试图仅向目标网络通告与其网络匹配的地址;

2:仅向与本地接口上地址匹配的网络进行通告;

arp_announce = 2

第四步、增加主机路由

Director

1
#route add -host 192.168.1.10 dev eth0:0

RS1

1
#route add -host 192.168.1.10 dev lo:0

RS2

1
#route add -host 192.168.1.10 dev lo:0

第五步、配置集群服务

1
2
3
#ipvsadm -A -t 192.168.1.10:80 -s rr
#ipvsadm -a -t 192.168.1.10:80 -r 192.168.1.21:80 -g
#ipvsadm -a -t 192.168.1.10:80 -r 192.168.1.31:80 -g

第六步、测试

wKiom1NTI6TAx-HbAAD-59h7XKI118.jpg

注:

如果反复刷新只有一个页面,可能是有缓存,过一会再刷新就可能切换到另一个页面了。

=================================DR模式演示完毕=====================================

四、持久连接演示

说明

尽管我们选择了LVS的分发方法,但是大多时候我们要保证返回给客户端的所有响应请求必须来自于同一台Real Server,这里我们就要用到LVS Persistence(持久性)。

1、LVS 持久连接和类型

  • PCC 来自同一客户端所有服务的请求都被重定向到同一台Real Server上,以IP地址为准。

  • PPC 来自同一服务的请求都被重定向到同一台Real Server上,以端口号为准。

  • PNMP 基于防火墙标记的持久连接,根据iptables 的规则,将对于某类服务几个不同端口的访问定义为一类

2、PCC 演示

PCC是一个虚拟服务没有端口号(或者端口号为0),以"-p" 来标识服务。

缺陷:定向所有服务,期望访问不同的Real Server无法实现。

1
2
3
4
5
6
7
8
9
10
# ipvsadm -A -t 192.168.1.10:0 -s rr -p 200
# ipvsadm -a -t 192.168.1.10:0 -r 192.168.1.21 -g
# ipvsadm -a -t 192.168.1.10:0 -r 192.168.1.31 -g
# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.10:0 rr persistent 200
   -> 192.168.1.21:0               Route   1      0          0     
   -> 192.168.1.31:0               Route   1      0          0

用ssh连接到192.168.1.10

wKioL1NTI8OBwDAjAALDOYPQQUw366.jpg

3、PPC 演示

缺陷:期望访问不同的端口到同一台RS上,无法实现。

1
2
3
#ipvsadm -A -t 192.168.1.10:80 -s rr -p 600
#ipvsadm -a -t 192.168.1.10:80 -r 192.168.1.21:80 -g
#ipvsadm -a -t 192.168.1.10:80 -r 192.168.1.31:80 -g

4、PNMP 演示

先对某一特定类型的数据包打上标记,然后再将基于某一类标记的服务送到后台的Real Server上去,后台的Real Server 并不识别这些标记。将持久和防火墙标记结合起来就能够实现端口姻亲功能,只要是来自某一客户端的对某一特定服务(需要不同的端口)的访问都定义到同一台 Real Server上去。假设这样一种场景:一个用户在访问购物网站时同时使用HTTP(80)和HTTPS(443)两种协议,我们需要将其定义到同一台 Real Server上,而其他的服务不受限制。

1
2
3
4
5
#iptables -t mangle -A PREROUTING -d 192.168.1.10 -i eth0 -p tcp --dport 80 -j MARK --set-mark 3
#iptables -t mangle -A PREROUTING -d 192.168.1.10 -i eth0 -p tcp --dport 443 -j MARK --set-mark 3
#ipvsadm -A -f 3 -s rr -p 600
#ipvsadm -a -f 3 -r 192.168.1.21 -g
#ipvsadm -a -f 3 -r 192.168.1.31 -g

五、ipvs集群内生性不足

1、后端RS的健康状态检测?

补救方法

   ⑴、脚本

   ⑵、ldirectord

2、Director自身的可用性

补救方法

   ⑴、ldirectord(heartbeat,corosync)

   ⑵、keekalived

===============================完=================================================










本文转自 jinlinger 51CTO博客,原文链接:http://blog.51cto.com/essun/1398868,如需转载请自行联系原作者
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
基于阿里云,构建一个企业web应用上云经典架构,让IT从业者体验企业级架构的实战训练。
目录
相关文章
|
1月前
|
安全 Linux API
Linux设备模型统一:桥接硬件多样性与应用程序开发的关键
在Linux的宏大世界中,各种各样的硬件设备如星辰般繁多。从常见的USB设备到复杂的网络接口卡,从嵌入式设备到强大的服务器,Linux需要在这些差异极大的硬件上运行。这就引出了一个问题:Linux是如何统一这些不同硬件的设备模型的呢?本文将探讨Linux是如何针对不同的硬件统一设备模型的,这一统一的设备模型对于应用程序开发人员来说又有何意义。让我们一探究竟🕵️‍♂️。
Linux设备模型统一:桥接硬件多样性与应用程序开发的关键
|
2月前
|
Linux C语言 SoC
嵌入式linux总线设备驱动模型分析
嵌入式linux总线设备驱动模型分析
33 1
|
3月前
|
监控 网络协议 Linux
Linux多路转接or多路复用模型
【2月更文挑战第5天】
36 1
|
4月前
|
Linux
Linux 下的五种 IO 模型详细介绍
根据上述定义,我们的前4种模型——阻塞式I/O模型、非阻塞式I/O模型、I/O复用模型和信号驱动式I/O模型都是同步I/O模型,因为其中真正的I/O操作(recvfrom )将阻塞进程。异步请求:A调用B,B的处理是异步的,B在接到请求后先告诉A我已经接到请求了,然后异步去处理,处理完之后通过回调等方式再通知A。和上面的阻塞IO模型相比,非阻塞IO模型在内核数据没准备好,需要进程阻塞的时候,就返回一个错误,以使得进程不被阻塞。阻塞请求:A调用B,A一直等着B的返回,别的事情什么也不干。
38 0
Linux 下的五种 IO 模型详细介绍
|
1月前
|
监控 中间件 Linux
深入Linux设备模型:开发者指南
Linux的设备模型是操作系统管理硬件设备的一种高级抽象,它不仅涉及到设备驱动程序的加载和卸载,还包括设备之间的关系、设备的状态管理以及与用户空间通信的机制。理解Linux的设备模型对于应用开发人员来说至关重要,它有助于开发出更加稳定、高效的应用程序。🌟
深入Linux设备模型:开发者指南
|
6天前
|
存储 安全 算法
【Linux | C++ 】基于环形队列的多生产者多消费者模型(Linux系统下C++ 代码模拟实现)
【Linux | C++ 】基于环形队列的多生产者多消费者模型(Linux系统下C++ 代码模拟实现)
22 0
|
6天前
|
算法 Linux 数据安全/隐私保护
【Linux | C++ 】生产者消费者模型(Linux系统下C++ 代码模拟实现)
【Linux | C++ 】生产者消费者模型(Linux系统下C++ 代码模拟实现)
12 0
|
20天前
|
网络协议 Linux Shell
【linux网络(一)】初识网络, 理解四层网络模型
【linux网络(一)】初识网络, 理解四层网络模型
|
20天前
|
Java Linux
【linux线程(三)】生产者消费者模型详解(多版本)
【linux线程(三)】生产者消费者模型详解(多版本)