数据包流向:
1 client ------------------------------------------>GW
sip:cip dip:wip
smac:client_mac dmac:gw_up_mac
2 GW ----------------------------->Director
sip :CIP dip:Vip
smac:GW_down_mac dmac:Vip_max
3 Director ------------------> Real Server
sip:dip dip:rip
smac:DIP_mac dmac:broadcast(局域网arp广播找到rip)
sip:RIP dip:DIP
smac:RealServer_mac dmac:DIP_mac(局域网回广播包)
sip:CIP dip:VIP
smac:DIP_mac dmac:RealServer_mac (将原始的数据包发给RealServer)
4 Real Server ----------------------------------------->GW
sip:VIP dip:CIP
smac:RealServer_mac dmac:GW_down_mac (处理完请求 返回数据包 )
5 GW------------------------------------------------------->
sip:VIP dip:CIP
smac:GW_up_mac dmac:Client_mac
面临的问题:
1 .数据包需从realServer返回 ,realServer 返回的数据需要源IP为VIP ,添加 lo接口(本地环路接口) ,lo:1 vip/32.
LO接口的作用是什么?
假如包是由一个本地进程为另一个本地进程产生的, 它们将通过外出链的'lo'接口,然后返回进入链的'lo'接口.
2 realServer的vip有了,接着就是同一个网段中拥有两个vip, 在网关发送arp广播 需找vip时需要让realServer不接受响应.
echo 1 >/proc/sys/net/ipv4/conf/eth0/arp_ignore # arp不回包
echo 2 >/proc/sys/net/ipv4/conf/eth0/arp_announce 另外一个网卡来接包 回包
3 Director 发送数据包给realServer , 要走dip的网卡,否则ip流向就是vip-->vip 发送不成功.
调整vip和dip网卡在路由表中的顺序,dip在上,vip在下 即可解决。
4 session共享机制, session存在memcache中,开启轮训模式 这样效率最高.(php中)
tcp://***.***.***.****:11211
use_cookies = 1
name=phpsessid
auto_start = 0
cookie_lifetime=0
cookie_path=/
cookie_httponly
serialize_handler = php
gc_probability=1
gc_divisor=1000
gc_maxlifetime=60
bug_compat_42 = 0
bug_conpat_warn = 1
refer_check =
entropy_length = 0
entropy_file =
cache_limiter = nocache
cache_expire = 180
use_trans_sid=0
hash_function=0
hash_bits_per_character =5
参数可视具体情况修改。