纠正:报文进入内核空间后,当到达input链时发现是一个集群服务时,则直接发送到postrouting链,不经过forward链。
调度算法:
1、静态方法:
rr:轮询,即依照次序从所有RS中进行挑选
wrr:加权轮询,按照权重在RS中进行轮询
sh:source hashing,源地址哈希,即对来自相同客户端的请求发送至同一RS,这样会破坏负载均衡效果。可以基于cookie实现session绑定。
dh:destination hash,目标地址哈希,将同样的请求发给同一个RS。可以提高缓存命中率。
2、动态方法:
lc:最少连接。(活动连接数*256+非活动连接数),谁的最小就是谁。
wlc:加权最少连接。(活动连接数*256+非活动连接数)/weight,谁的最小就是谁。
sed:最少期望延迟。不再考虑非活动连接。(活动连接数+1)*256/weight,谁的最小就是谁。
nq:最少队列调度,改进的sed算法,也不考虑非活动连接数。无需队列。如果有台realserver的连接数=0就直接分配过去,不需要在进行sed运算。
lblc:基于本地的最少连接。和dh一样,考虑cache的连接数。可能破坏缓存命中率。
lblcr:基于本地的带复制功能的最少连接。如果一台服务器的访问过高,可以将缓存复制给其他服务器前面的缓存服务器,然后由其他服务器提供服务。缓存服务器之间会部分复制缓存。
生产环境中比较理想的是wlc,因为非活动连接可能是无法忽略的。
安装ipvsadm及命令详解:
yum直接安装ipvsadm即可。
grep -i 'vs' /boot/config-2.6.32-504.el6.x86_64 #即可查看ipvsadm的相关算法等信息
主要功能:
1、管理集群服务: 添加:ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] -t|u|:tcp|udp service-address:ip:port -f:防火墙标记 service-address:mark number 默认使用wlc算法 修改:同上 删除:ipvsadm -D -t|u|f service-address 2、管理集群中RS: 添加:ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower] service-address:先定义的集群服务 -r server-address:RS地址,在NAT模型中可以使用ip:port来做端口映射 [-g|i|m]:g,DR模型;i,TUN模型;m,地址伪装NAT模型,默认为DR模型 -w weight:权重,若集群不指定权重,则此处无意义 修改:同上 删除:ipvsadm -d -t|u|f service-address -r server-address 3、查看 -L|l:查看 -n:数字格式显示ip和端口 --stats:显示统计信息 --rate:显示速率 --timeout:显示tcp,tcpfin,udp超时 --daemon:显示多播等信息 --sort:排序 -c:显示连接状态 -Z:清空计数器 -C:清空所有集群服务 保存规则: -S > 文件(使用输出重定向) 或者service ipvsadm save,自动保存至/etc/sysconfig/ipvsadm中 导入规则: -R < 文件(使用输入重定向)
实验:
前提:
1、时间得同步。尤其是以后的高可用模型对时间同步要求很严格。
2、改主机名
3、directory(调度器)的两块网卡之间得打开转发功能
IP规划如上图
开启网卡转发功能:
Directory网络配置(eth0设置为桥接,eth1设置为仅主机模式):
RS网络设置
RS1:(网卡设置为仅主机模式)
RS2:(网卡设置为仅主机模式)
添加集群服务并查看
在RS中添加默认网页:
echo “RS1” > /var/www/html/index.html echo “RS2” > /var/www/html/index.html
再RS中启动httpd服务:service httpd start
查看一下index.html文件:
(此处未改主机名)
(此处未改主机名)
在网页中输入192.168.0.20并刷新
保存规则并查看:
清空规则并查看:
此时已无规则。
导入规则并查看:
DR模型:
Director配置:(配置DIP,VIP,添加路由)
RS1配置:
(此处未改主机名)
[root@RS1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore [root@RS1 ~]# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore [root@RS1 ~]# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce [root@RS1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
配置vip:
[root@RS1 ~]# ifconfig lo:0 192.168.0.21 broadcast 192.168.0.21 netmask 255.255.255.255 up
添加路由:
[root@RS1 ~]# route add -host 192.168.0.21 dev lo:0
RS2配置:
(此处未改主机名)
[root@RS2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore [root@RS2 ~]# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore [root@RS2 ~]# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce [root@RS2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
配置VIP:
[root@RS2 ~]# ifconfig lo:0 192.168.0.21 broadcast 192.168.0.21 netmask 255.255.255.255 up
配置路由:
[root@RS2 ~]# route add -host 192.168.0.21 dev lo:0
Director添加集群服务并查看
浏览器查看:
原创文章,作者:黑白子,如若转载,请注明出处:http://www.178linux.com/9488
评论列表(1条)
哈,很不错,不过最核心的 arp_announce 原理呢?