在FreeBSD下用vrrp实现基于DNS轮询的冗余服务
在FreeBSD下实现基于DNS Robin Round的冗余服务
在传统的基于DNS Robin Round的web load balance解决方案下,有一个明显的缺点,
那就是万一其中一个服务器死了(服务宕了,或者断电、硬盘坏之类的硬故障),那轮转到该服务器上的web服务将是一个死点,
所有定向到该服务器上的web request都将返回服务不可得到的结果。
利用vrrp(Virtual Router Redundancy Protocol,虚拟路由冗余协议),可以避免这个毛病。
假设你有3台双网卡的webserver,其内/外网的ip分别是:
1) 192.168.0.1/202.1.1.1
2) 192.168.0.2/202.1.1.2
3) 192.168.0.3/202.1.1.3
在dns上做了robin round,即www.company.com指向202.1.1.1,202.1.1.2,202.1.1.3
即用域名查询工具得到如下的结果:
# host www.company.com
www.company.com has address 202.1.1.1
www.company.com has address 202.1.1.2
www.company.com has address 202.1.1.3
这时,加上vrrp功能就不会有死点存在了。
比如第二台server down了,第一台server或第三台server(具体哪台server接管服务,可由配置文件定义)
会在自己的外网卡绑一个202.1.1.2的ip别名,接管第二台机的服务,使web server不出现访问死点。
FreeVRRPd的特点:
* 守护进程兼容RFC 2338
* 实现虚拟地址
* 支持多 VRID
* 用BPF包把主服务器的健康状态告诉从服务器
* 能够主服务器down后3秒钟内改变从服务器的ip和路由。
* 能清除所有主机里的arp cache(这一点很重要,原因自己体会)。
* 可以在不同的从服务器间选择一台来接管服务。
* 主机能同时被设置为主(master)或从(slave)方式。
* 如果主服务器up,恢复正常运行后,从服务器会自动降级
* 能防止地址冲突
* 多线程的vrrp守护进程
* 支持明文密码
* 支持虚拟地址的掩码
在三台机分别安装freevrrpd(FreeBSD 4.6下freevrrpd的版本是0.8.4,home: