实现NAT功能在调度器服务器和实际服务器之间转发数据处理用户请求和应答
echo 1 > /proc/sys/net/ipv4/ip_forward 开启linux系统的允许转发数据包的功能
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8001 -j DNAT --to-destination 10.0.1.210:8000 将调度器外网网卡eth0上8001端口接收的所有请求转发给10.0.1.210服务器的8000端口。
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8000 将所有从外部网络进入服务器80端口的请求转移到了8000端口,意在隐藏某些服务的实际端口,也便于将一个端口快速切换到其他端口的服务上,提供端口管理的灵活性。
将实际服务器的默认网关设置为NAT服务器 route add default gw 10.0.1.50
查看内核中是否已经安装IPVS模块
# modprobe -l | grep ipvs
/Lib/modules/2.6.18-238.el5/kernel/net/ipv4/ipvs/ip_vs.ko
/Lib/modules/2.6.18-238.el5/kernel/net/ipv4/ipvs/ip_vs_dh.ko
/Lib/modules/2.6.18-238.el5/kernel/net/ipv4/ipvs/ip_vs_ftp.ko
/Lib/modules/2.6.18-238.el5/kernel/net/ipv4/ipvs/ip_vs_lblc.ko
/Lib/modules/2.6.18-238.el5/kernel/net/ipv4/ipvs/ip_vs_lblcr.ko
/Lib/modules/2.6.18-238.el5/kernel/net/ipv4/ipvs/ip_vs_lc.ko
/Lib/modules/2.6.18-238.el5/kernel/net/ipv4/ipvs/ip_vs_nq.ko
/Lib/modules/2.6.18-238.el5/kernel/net/ipv4/ipvs/ip_vs_rr.ko
/Lib/modules/2.6.18-238.el5/kernel/net/ipv4/ipvs/ip_vs_sed.ko
/Lib/modules/2.6.18-238.el5/kernel/net/ipv4/ipvs/ip_vs_sh.ko
/Lib/modules/2.6.18-238.el5/kernel/net/ipv4/ipvs/ip_vs_wlc.ko
/Lib/modules/2.6.18-238.el5/kernel/net/ipv4/ipvs/ip_vs_wrr.ko
IPVS的管理工具是ipvsadm
添加一台虚拟服务器也就是负载均衡调度器,其中-s rr是指采用简单轮询的RR调度策略
ipvsadm -A -t 125.12.12.12:80 -s rr
ipvsadm -a -t 125.12.12.12:80 -r 10.0.1.210:8000 -m
ipvsadm -a -t 125.12.12.12:80 -r 10.0.1.211:8000 -m
这两命令用来为调度服务器添加实际服务器,其中-m表示采用NAT方式来转发数据包
查看所有实际服务器的状态 ipvsadm -L -n
LVS-NAT
负载均衡硬件产品,比如Cisco的LocalDirector、F5的BIG-IP Local Traffic Manager
突破vs/nat工作模式下Director Server也就是调度器瓶颈问题的一个简单有效办法是,将基于NAT的集群和DNS-RR混合使用,你可以组建多个条件允许的NAT集群,比如5个100Mbps出口带宽的集群,然后通过DNS-RR方式来将用户请求均衡地指向这些集群,同时,还可以利用DNS智能解析实现地域就近的访问。
直接路由(Direct Route,DR)
IP别名,根据规定,一个网络接口最多可以设置256个IP别名,包括物理网卡(比如eth0、eth1)和虚拟接口(比如回环网络接口lo);在Linux上设置IP别名的命令:ifconfig eth0:0 125.12.12.77
给实际服务器配置与调度服务器相同的IP别名
ifconfig lo:0 125.12.12.77 broadcast 125.12.12.77 netmask 255.255.255.255 up
设置路由规则让实际服务器不要去寻找其他拥有同样IP别名的服务器
route add -host 125.12.12.77 dev lo:0
还要防止实际服务器响应来自网络中针对IP别名的ARP广播
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
lvs-dr 或 vs/dr 工作模式下LVS+KeepAlived负载均衡系统,若是调度器也就是Director Server挂掉,可以立即使用DNS-RR简单负载均衡机制启用起来,待故障调度器处理好后再切换回去
LVS-TUN(IP隧道,IP Tunneling),与LVS-DR不同的是,实际服务器可以和调度器不在同一个WAN网段内,调度器通过IP隧道技术来转发请求到实际服务器,所以实际服务器也必须有合法的公网IP地址。
所有服务器还必须支持“IP Tunneling”或“IP Encapsulation”协议
基于IP隧道的独特方式,还可以将实际服务器根据需要部署在不同的地域,并且根据就近访问的原则转移请求,比如一些DNS服务便是基于IP隧道技术实现的。
总的来说,LVS-DR和LVS-TUN都适合响应和请求不对称的Web服务器,可以非常有效地提高集群的扩展能力。
调度器高可用性实现方法:Heartbeat,我们可以准备一台备用调度器,通过运行Heartbeat对主调度器进行心跳检测,一旦发现主调度器停止心跳,便立即启动故障转移,接管主调度器,这个接管过程包括IP别名变更、相关服务启动等,随后,一旦主调度器恢复后,备用调度器便自动将相关资源转交回主调度器。为了避免主调度器和备用调度器之间线路的单点故障,大量的事实证明,最好采用多条独立线路进行连接,不依赖需要电源的交换机;也可以使用串行电缆,通过服务器的COM端口进行连接,更安全。
如果希望让线路不存在单点故障,可以使用Linux Bonding技术来将多条线路绑定在一台服务器的多个网卡上,对流量进行RR负载均衡或将一条线路设置为备用模式;也可以使用Bonding实现带宽聚合,比如将6根100Mbps独享线路绑定到bond0虚拟网卡上,实现600Mbps的出口带宽。
阅读(2661) | 评论(0) | 转发(0) |