lvs-nat
1.按照上图拓扑配置好网络;
2.开启director的转发功能(# echo 1 > /proc/sys/net/ipv4/ip_forward ),并将test1,test2网关指向DIP 192.168.1.1;
3.进入test1,test2,开启httpd服务;并分别给予创建主页index.html让其可以区分开test1 test2,
让我们直观的感受到调度器在工作;
4.进入director配置
安装ipvsadm:
# yum intall -y ipvsadm
配置:
定义本机192.168.191.111的80端口为集群服务,调度算法为轮询rr
# ipvsadm -A -t 192.168.191.111:80 -s rr
定义192.168.1.100为realserver,lvs类型为lvs-nat
# ipvsadm -a -t 192.168.191.111:80 -r 192.168.1.100:80 -m
定义192.168.1.200为realserver,lvs类型为lvs-nat
# ipvsadm -a -t 192.168.191.111:80 -r 192.168.1.200:80 -m
5.到此为止lvs-nat集群服务就算定义好了;
测试:
回到物理机,打开浏览器,访问http://192.168.191.111
刷新浏览器
6.测试成功,若要查看详细调度过程,可抓包或查看realserver的web服务日志;
抓包director可发现,客户机192.168.191.6请求192.168.191.111的80服务,
也是director 192.168.191.111的80端口响应的客户机192.168.191.6;
抓包RS,test2可发现,客户机192.168.191.6请求的RS 192.168.1.200的http服务,
也是RS,test2的http服务响应的客户机192.168.191.6,可以看出在响应数据包经过director的时候,被director修改了地址;
--------------
lvs-dr
1.首先在各主机eth0上配置IP地址;
2.在RS上设置内核参数,使得RS上的VIP不予响应arp广播请求;
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
3.在RS上的lo:0接口上配置VIP地址;(固定广播域和广播地址只是自己IP)
# ifconfig lo:0 192.168.191.100 netmask 255.255.255.255 broadcast 192.168.191.100
4.指定RS主机上对VIP192.168.191.100的请求,都通过lo:0接口响应出去;
# route add -host 192.168.191.100 dev lo:0
5.在director上配置VIP以及集群服务;
# ifconfig eth0:0 192.168.191.100 netmask 255.255.255.255 broadcast 192.168.191.100
# ipvsadm -A -t 192.168.191.100:80 -s rr
# ipvsadm -a -t 192.168.191.100:80 -r 192.168.191.112 -g
# ipvsadm -a -t 192.168.191.100:80 -r 192.168.191.113 -g
6.配置完成,客户机测试(浏览器可能有缓存,建议再开一台虚拟机使用curl命令测试);
FWM:firewall mark
大意:FWM就是根据防火墙标记做调度;依赖mangle链做防火墙标记;
方法:在ipvs生效之前的netfilter的某hook function上定义iptables规则,实现给报文打上防火墙标记;
还是使用上面的lvs-dr模型;现在将ipvsadm -A -t 改为ipvsadm -A -f
步骤:
1.清空上面已经定义的ipvsadm条目;
# ipvsadm -C
2.在防火墙mangle链上打标(可以将多种服务打标为一个标记,实现集群捆绑调度);
# iptables -t mangle -A PREROUTING -d 192.168.191.100 -p tcp --dport 80 -j MARK --set-mark 10
3.定义ipvsadm规则;
# ipvsadm -A -f 10 -s rr
# ipvsadm -a -f 10 -r 192.168.191.112 -g
# ipvsadm -a -f 10 -r 192.168.191.113 -g
4.测试(另外开启了一台虚拟机,配置好IP,使用curl测试,结果如下);
lvs的persistence: lvs持久连接
大意:无论使用哪一种调度方法,都能保证在指定时间范围之内,来自于同一个IP的请求将始终被定向至同个RS;
方法:ipvsadm -A -t|-u|-f service-address -s SCHEDULER [-p [#]] (增加-p选项,代表开启持久连接;默认时长360秒)持久连接模板:
PPC:每端口持久;持久连接生效范围仅为单个集群服务;如果有多个集群服务,每服务被单独持久调度;
PCC:每客户端持久;持久连接生效范围为所有服务;定义集群服务时,其TCP或UDP协议的目标端口要使用0;
PFWM:每FWM持久:持久连接生效范围为定义为同一个FWM下的所有服务;
PPC例子:
ipvsadm -A -t 192.168.191.100:80 -s rr -p 600
代表将192.168.191.100的80服务做持久连接600秒,来自同一个IP的客户端在600秒内访问80服务,都被调度到同一个后端RS
PCC例子:
ipvsadm -A -t 192.168.191.100:0 -s rr -p
ipvsadm -a -t 192.168.191.100:0 -r 192.168.191.112 -g
ipvsadm -a -t 192.168.191.100:0 -r 192.168.191.112 -g
代表来自同一个IP的客户端在访问,192.168.191.100的所有服务(ssh telnet www等)的时候,都在360秒内被调度到同一个后端RS
PFWM例子:
代表来自同一个IP的客户端在访问,同一个防火墙标记的服务时候,被调度到同一个后端RS