> Linux集群 > 服务器集群 >

Linux 集群的基本概念与LB(负载均衡)集群详解(2)



四、LVS-NAT 模式演示

注:测试环境

虚拟机:VMware 9.0

操作系统:CentOS 6.4 X86_64

实验图:

Lvs-Nat

1. ip 规则

Director IP:

  • 外网:172.16.100.1

  • 内网:192.168.10.1

RS IP:

  • RS1: 192.168.10.10

  • RS2: 192.168.10.11

网关指向:192.168.10.1

2.安装软件

Director:

1
[root@master ~]# yum install -y ipvsadm-1.25-10.el6.x86_64

RS1:

1
2
[root@master ~]# yum install -y httpd 
[root@master ~]# vim /var/www/html/index.html #增加测试页面

rs1.test.com

RS2:

1
2
[root@master ~]# yum install -y httpd 
[root@master ~]# vim /var/www/html/index.html #增加测试页面

rs2.test.com

3.配置Director

(1).开启转发

1
2
3
[root@master ~]# net.ipv4.ip_forward = 1 
[root@master ~]# sysctl -p 
[root@master ~]# cat /proc/sys/net/ipv4/ip_forward

(2).配置lvs-nat模型

1
2
3
ipvsadm -A -t 172.16.100.1:80 -s rr 
ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.10 -m 
ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.11 -m

4.服务测试

1
2
3
4
5
6
7
[root@master ~]# ipvsadm -L -n 
IP Virtual Server version 1.2.1 (size=4096) 
Prot LocalAddress:Port Scheduler Flags 
-> RemoteAddress:Port Forward Weight ActiveConn InActConn 
TCP 172.16.100.1:80 rr 
-> 192.168.10.10:80 Masq 1 0 516 
-> 192.168.10.11:80 Masq 1 0 499

5.保存lvs规则

1
2
3
4
5
6
[root@master ~]# service ipvsadm save 
ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm: [确定] 
[root@master ~]# cat /etc/sysconfig/ipvsadm 
-A -t 172.16.100.1:80 -s rr 
-a -t 172.16.100.1:80 -r 192.168.10.10:80 -m -w 1 
-a -t 172.16.100.1:80 -r 192.168.10.11:80 -m -w 1

手动保存

1
2
3
4
5
[root@master ~]# ipvsadm -S > /etc/sysconfig/ipvsadm.web 
[root@master ~]# cat /etc/sysconfig/ipvsadm.web 
-A -t 172.16.100.1:http -s rr 
-a -t 172.16.100.1:http -r 192.168.10.10:http -m -w 1 
-a -t 172.16.100.1:http -r 192.168.10.11:http -m -w 1

6.删除规则并还原规则

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@master ~]# ipvsadm -C 
[root@master ~]# ipvsadm -L -n 
IP Virtual Server version 1.2.1 (size=4096) 
Prot LocalAddress:Port Scheduler Flags 
-> RemoteAddress:Port Forward Weight ActiveConn InActConn 
[root@master ~]# ipvsadm -R < /etc/sysconfig/ipvsadm.web 
[root@master ~]# ipvsadm -L -n 
IP Virtual Server version 1.2.1 (size=4096) 
Prot LocalAddress:Port Scheduler Flags 
-> RemoteAddress:Port Forward Weight ActiveConn InActConn 
TCP 172.16.100.1:80 rr 
-> 192.168.10.10:80 Masq 1 0 0 
-> 192.168.10.11:80 Masq 1 0 0

7.修改lvs调度算法

rr -> wrr

1
2
3
[root@master ~]# ipvsadm -E -t 172.16.100.1:80 -s wrr 
[root@master ~]# ipvsadm -e -t 172.16.100.1:80 -r 192.168.10.10 -m -w 3 
[root@master ~]# ipvsadm -e -t 172.16.100.1:80 -r 192.168.10.11 -m -w 1

效果

1
2
3
4
5
6
7
[root@master ~]# ipvsadm -L -n 
IP Virtual Server version 1.2.1 (size=4096) 
Prot LocalAddress:Port Scheduler Flags 
-> RemoteAddress:Port Forward Weight ActiveConn InActConn 
TCP 172.16.100.1:80 wrr 
-> 192.168.10.10:80 Masq 3 0 765 
-> 192.168.10.11:80 Masq 1 0 255


五、LVS-DR 模式演示

实验图:

Lvs-DR

1.ip 规则

Director:

  • eth0 172.16.100.2 DIP

  • eth0:0 172.16.100.1 VIP

RS1:

  • eth0: 172.16.100.10 RIP

  • lo0:0 172.16.100.1 VIP

RS2:

  • eth0: 172.16.100.11 RIP

  • lo0:0 172.16.100.1 VIP

2.关闭arp响应

RS1与RS2:

1
2
3
4
sysctl -w net.ipv4.conf.eth0.arp_announce=2 
sysctl -w net.ipv4.conf.all.arp_announce=2 
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

说明:

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

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

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

arp_ignore = 1

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

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

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

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

arp_announce = 2

3.配置VIP

Director:

1
[root@master ~]# ifconfig eth0:0 172.16.100.1 netmask 255.255.255.0

RS1:

1
[root@rs1 ~]# ifconfig lo:0 172.16.100.1 broadcast 172.16.100.1 netmask 255.255.255.255 up

RS2:

1
[root@rs2 ~]# ifconfig lo:0 172.16.100.1 broadcast 172.16.100.1 netmask 255.255.255.255 up

4.增加路由

RS1:

1
[root@rs1~]# route add -host 172.16.100.1 dev lo:0

RS2:

1
[root@rs2~]# route add -host 172.16.100.1 dev lo:0

Director:

1
[root@master ~]# route add -host 172.16.100.1 dev eth0:0

5.配置lvs-dr

1
2
3
[root@master ~]# ipvsadm -A -t 172.16.100.1:80 -s wlc 
[root@master ~]# ipvsadm -a -t 172.16.100.1:80 -r 172.16.100.10 -g -w 3 
[root@master ~]# ipvsadm -a -t 172.16.100.1:80 -r 172.16.100.10 -g -w 1

6.测试效果

1
2
3
4
5
6
7
[root@master ~]# ipvsadm -L -n 
IP Virtual Server version 1.2.1 (size=4096) 
Prot LocalAddress:Port Scheduler Flags 
-> RemoteAddress:Port Forward Weight ActiveConn InActConn 
TCP 172.16.100.1:80 rr 
-> 172.16.100.10:80 Route 3 0 0 
-> 172.16.100.11:80 Route 1 0 0

六、LVS 持久连接

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

1.LVS 持久连接和类型

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

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

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

2.持久连接命令

1
2
ipvsadm -A|E … -p timeout 
-p timeout 持久连接时长,默认为300秒,单位是秒!

3.PCC 演示

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

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

1
2
3
ipvsadm -A -t 172.16.100.1:0 -s rr -p 3600 
ipvsadm -a -t 172.16.100.1:0 -r 172.16.100.10 -g -w 2 
ipvsadm -a -t 172.16.100.1:0 -r 172.16.100.11 -g -w 2

4.PPC 演示

例如:client---->LVS(80,22)------>RS1 client----->LVS(23)----->RS2

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

1
2
3
ipvsadm -A -t 172.16.100.1:80 -s rr -p 3600 
ipvsadm -a -t 172.16.100.1:80 -r 172.16.100.10 -g -w 2 
ipvsadm -a -t 172.16.100.1:80 -r 172.16.100.11 -g -w 2

5.PNMP 演示

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

1
2
3
4
5
iptables -t mangle -A PREROUTING -d 172.16.100.1 -i eth0 -p tcp --dport 80 -j MARK --set-mark 8 
iptables -t mangle -A PREROUTING -d 172.16.100.1 -i eth0 -p tcp --dport 443 -j MARK --set-mark 8 
ipvsadm -A -f 8 -s rr -p 600 
ipvsadm -a -f 8 -r 172.16.100.10 -g -w 2 
ipvsadm -a -f 8 -r 172.16.100.11 -g -w 1

注:关于LVS持久连接的具体案例(80与443)


(责任编辑:IT)