为什么有的网站有多个IP地址(A record)
我们会经常注意到有些大型的网站都有两个或更多的IP地址, 比如hotmail.com
hotmail.com. A 64.4.33.7 [TTL=3600]
hotmail.com. A 64.4.32.7 [TTL=3600]
这是为什么, 还有多个IP又是怎么工作的呢?
我先来说下GSLB (global server load balancing),中文翻译过来就是广域网(Internet)上的服务器负载平衡. 它把一般的服务器负载平衡技术扩展到了利用Internet在不同的数据中心间的负载平衡。把在不同城市的数据中心里的服务器群虚拟成一个单一的服务器提供给用户使用。这样做的好处就是即使一个数据中心所在地区发生了毁灭性的灾害,例如地震,在另外一个城市的服务器可以马上接替工作,使你的生意不受影响。当然在平时也可以把负载均衡到所有群里的服务器上。
一个可行的办法就是用DNS服务器监视每个数据中心的运行状态,在各个数据中心间进行切换。GSLB的相关设备一般都有这样的功能。
比如eblhost.cn有两个服务器群,一个在郑州,一个在上海,分别对应IP地址1.1.1.1和2.2.2.2。他们使用的GSLB设备不间断的检测两个城市的服务器群的运行状况。当一个用户访问eblhost.cn的时候,这个请求被GSLB设备收到。GSLB设备会判断应该把这个请求送到那个城市的服务器去。如果上海的服务器2.2.2.2出现问题,GSLB就会把请求送到郑州的服务器1.1.1.1去,一直到上海的服务器重新开始工作。
DNS服务器或者GSLB设备都可以设定DNS的’TTL’值,这个数值用来决定IP地址在客户网络和电脑中缓存的时间,GSLB设备希望把这个值设的越小越好,甚至是0,应为它希望每次用户请求都从它这里重新得到网站的IP地址, 而不是使用缓存的上一次老的IP地址。但是大多数的浏览器和一些代理服务器都不遵守TTL规范,它们会缓存IP地址15分钟到6个小时不等。这样的行为就影响了GSLB的使用。
例如,当2.2.2.2服务器不能正常工作的时候,GSLB会把所有新的访问者指向1.1.1.1, 但是所有在不久前访问过eblhost.cn而且被指向2.2.2.2的用户,由于他们的浏览器缓存IP地址2.2.2.2, 都会不能正常访问eblhost.cn的网站。
这样解决缓存IP地址的问题最好的办法就是用多IP地址(A Record),当用户请求eblhost.cn的时候,name server或者GSLB设备同时返回1.1.1.1和2.2.2.2两个IP地址。现在所有的浏览器,DNS服务器和GSLB设备都支持这个功能.
这样当1.1.1.1有问题的时候,浏览器会自动把请求转到服务器2.2.2.2上。这个过程一般是几秒钟到一分钟不等,还是可以接受的。
当然使用多IP地址技术又引起了其他的一些问题。比如GSLB会返回一个优化过的多IP地址列表:
1.1.1.1
2.2.2.2
1.1.1.1做为现在的连接,2.2.2.2做为备份。但实际上优化过的IP列表并不工作, 因为大多数已有的dns服务器都是随机返回IP列表的,这不是GSLB设备所能控制的。所以使用多IP地址,网站的冗余性得到加强,但是负载均衡功能得到了削弱。有没有什么方法可以两者兼顾呢?我们下次再讲。
