假如后端有多台RS;同时定义了两个集群服务,web服务和telnet服务
目的:前端用户访问80端口的时候会同时负载后端的多台RS上,并且23号端口的访问也会同时负载到多台RS上。
描述:后端有多台RS。每台RS上同时提供web服务和telnet服务。我们希望前端用户访问的时候,对80端口发起的访问请求会分别负载到多台RS上。
同时对23号端口的访问也会负载到多台RS上。所以说,它们同时提供了两类集群服务,那么就是Dirctor同时提供两种集群服务的负载均衡。
结论:
持久连接有这种功能
比如,user1访问80端口服务的时候,Director把报文转发RS1上;当user1下次在访问23号端口的时候,Director还是会把报文转发RS1上的。
1、ipvsadm轮询算法rr
[root@LVS ~]
# 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.100:80 rr
-> 172.16.100.10:80 Route 1 0 0
-> 172.16.100.11:80 Route 2 0 0
结论:通过上面的轮询算法rr;用浏览器访问的结果是
第一次被定向到RS1上面
第二次被定向到RS2上面
第三次被定向到RS1上面
第四次被定向到RS2上面
......
2、ipvsadm的持久连接web服务(PPC)
[root@LVS ~]
# ipvsadm -E -t 172.16.100.100:80 -s rr -p 600
[root@LVS ~]
# 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.100:80 rr persistent 600
-> 172.16.100.10:80 Route 1 0 0
-> 172.16.100.11:80 Route 2 0 0
结论:通过上面的持久连接;用浏览器访问的结果是
如果此时定向到RS1上,那么刷新页面之后被定向到RS2上,以后你无论怎么刷新都被定向到RS2上面。
[root@LVS ~]
# ipvsadm -L --persistent-conn
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Weight PersistConn ActiveConn InActConn
-> RemoteAddress:Port
TCP 172.16.100.100:http rr persistent 600
-> 172.16.100.10:http 1 0 0 0
-> 172.16.100.11:http 2 1 0 16
[root@LVS ~]
# ipvsadm -L -c
IPVS connection entries
pro expire state
source
virtual destination
TCP 00:00 FIN_WAIT 172.16.100.2:52083 172.16.100.100:http 172.16.100.11:http
TCP 00:10 FIN_WAIT 172.16.100.2:52086 172.16.100.100:http 172.16.100.11:http
TCP 00:00 FIN_WAIT 172.16.100.2:52071 172.16.100.100:http 172.16.100.11:http
TCP 00:00 FIN_WAIT 172.16.100.2:52085 172.16.100.100:http 172.16.100.11:http
TCP 08:00 NONE 172.16.100.2:0 172.16.100.100:http 172.16.100.11:http
TCP 00:00 FIN_WAIT 172.16.100.2:52084 172.16.100.100:http 172.16.100.11:http
3、ivpsadm的持久连接telnet服务(PPC)
注意:telnet是不允许超级管理员root直接远程登陆的
{
#安装、启动telnet服务
# yum -y install telnet-server
# chkconfig --add telnet
# chkconfig telnet on
# useradd jerry
# passwd jerry
# netstat -tnlp |grep :23
}
{
#定义telnet集群服务
ipvsadm -C
ipvsadm -A -t 172.16.100.100:23 -s rr
ipvsadm -a -t 172.16.100.100:23 -r 172.16.100.10 -g -w 2
ipvsadm -a -t 172.16.100.100:23 -r 172.16.100.11 -g -w 1
测试1
Xshell:\> telnet 172.16.100.100
login: jerry
Password: jerry
[jerry@web2 ~]$
#RS2
看主机名称可以辨别出连接的是哪一台RS,然后退出后在此登陆
Xshell:\> telnet 172.16.100.100
login: jerry
Password: jerry
[jerry@web1 ~]$
#RS1
支持持久连接的telnet服务
[root@LVS ~]
# ipvsadm -E -t 172.16.100.100:23 -s rr -p 3600
[root@LVS ~]
# 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.100:23 rr persistent 3600
-> 172.16.100.10:23 Route 2 0 0
-> 172.16.100.11:23 Route 1 0 1
测试2
Xshell:\> telnet 172.16.100.100
login: jerry
Password: jerry
[jerry@web1 ~]$
#RS1
退出后再次登陆
Xshell:\> telnet 172.16.100.100
login: jerry
Password: jerry
[jerry@web1 ~]$
#RS1
结论:telnet集群服务的持久连接成功
}
4、ipvsadm持久连接(PCC)
{
#把0端口定义成集群服务,这意味所有的端口都是集群服务
ipvsadm -C
ipvsadm -A -t 172.16.100.100:0 -s rr -p 600
ipvsadm -a -t 172.16.100.100:0 -r 172.16.100.10 -g -w 2
ipvsadm -a -t 172.16.100.100:0 -r 172.16.100.11 -g -w 1
测试 浏览器、telnet、
ssh
浏览器访问被定向到比如RS2
telnet测试被定向到RS2
Xshell:\> telnet 172.16.100.100
login: jerry
Password: jerry
[jerry@web2 ~]$
#RS2
ssh
172.16.100.100
[root@web2 ~]
#
看下连接的模板
[root@LVS ~]
# ipvsadm -L -c
IPVS connection entries
pro expire state
source
virtual destination
TCP 14:32 ESTABLISHED 172.16.100.2:52735 172.16.100.100:
ssh
172.16.100.11:
ssh
TCP 00:09 NONE 172.16.100.2:0 172.16.100.100:0 172.16.100.11:0
TCP 04:11 NONE 172.16.100.2:0 172.16.100.100:telnet 172.16.100.10:telnet
TCP 14:55 ESTABLISHED 172.16.100.2:52499 172.16.100.100:telnet 172.16.100.11:telnet
}
5、ivpsadm持久连接(PCC)
现在把23端口和80端口的定义成一个集群服务
22端口的是另外一个集群服务
ipvsadm -C
service ipvsadm restart
ipvsadm -L -n
iptables -A PREROUTING -i eth2 -t mangle -p tcp -d 172.16.100.100 --dport 80 -j MARK --
set
-mark 8
iptables -A PREROUTING -i eth2 -t mangle -p tcp -d 172.16.100.100 --dport 23 -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
结论:
由于22端口的
ssh
服务没有被定义成集群服务,所以在登陆的时候是Director来响应
Xshell:\>
ssh
172.16.100.100
[root@LVS ~]
#
由于80服务和23服务都被定义集群服务,所以在访问的时候应该是调度算法轮询来响应的
Xshell:\> telnet 172.16.100.100
login: jerry
Password:
[jerry@web2 ~]$
退出再次访问
Xshell:\> telnet 172.16.100.100
login: jerry
Password:
[jerry@web1 ~]$
浏览器访问也是一样的,轮询这响应请求
第一次响应的是RS1
第二次响应的是RS2
第三次响应的是RS1
第四次响应的是RS2