一、用户提出采用域名DNS设置进行不同服务器的业务负载均衡是否可行?
用户拟在运营商租用了多台的服务器,都为提供业务交易查询的web服务器。用户提出准备使用自购的dns服务进行单个域名的多个ip地址设置,已完成业务交易查询的web服务器的负载均衡。粗一听,好像挺完美的方案,但实际不可行。
原因1:服务器down机,DNS是不知道的,而修改DNS完成全网同步,一般需要三小时以上。原因2:DNS一般是轮询机制,无法根据业务真实负载进行均衡。原因3:DNS存在本地会话保持,如果是需要身份验证的网站,在不修改软件构架的情况下,这点是比较致命的。因为DNS解析无法将验证用户的访问持久分配到同一服务器。虽然有一定的本地DNS缓存,但是很难保证在用户访问期间,本地DNS不过期,而重新查询服务器并指向新的服务器,那么原服务器保存的用户信息是无法被带到新服务器的,而且可能要求被重新认证身份。
该问题的需求处理建议如下:1、使用智能DNS(GSLB)完成向不同运营商的客户返回不同的IP地址。同时智能DNS具有健康状态检测功能,当解析出的IP地址不可达时,会将其它可用的IP地址返回。2、在智能DNS下启用F5弹性负均衡机制。3、在F5的SLB设备下还可以用启Ngnix的缓存服务、多服务器均衡机制。
感觉挺复杂,但在一般项目中,F5(SLB)+多台服务器已足够了。:)
二、我的交易系统受到部分城市用户的恶意攻击,想进行阻断,天翼云SLB能不能帮到我?
这是客户的真实需求。在上云之前,用户采用在F5中将一段恶意用户的IP地址段设置到F5的黑名单中,阻断访问;或在F5中强制将业务流量指向其它的服务器,以避免对正常用户的访问。但上天翼云后,SLB不再提供类似功能,如何解决。
我的解决办法其实需要得到客户的帮助,方案为SLB+Ngnix,在Ngnix中进行业务分流。这样实施后,有可能误伤一些真实用户,但至少提供了服务,而不是服务器被全部拖垮。
如:ngnix中的代码
set $flag = 0;
if ($http_user_agent ~* "spider"){
set $flag "1";
}
if ($flag ="0"){
//代理至正常集群
} else if ($flag ="1"){
//代理至低等级的集群
}
三、在两台物理服务器下挂同一个共享磁盘,实现数据库的共享是否可行?
这也是客户的真实解决方案,但被我们否掉。客户未使用Oracle Rac等集群管理软件,而准备在共享磁盘中划两个分区,不同的服务器数据库文件写入不同的分区中,不同分区的数据库同步采用ADG方案。
听起来没有什么问题。但真实的实践中,已问题明显出现。1、操作系统存在缓存,另一台服务器可能看不到写入的数据。在该案例场景中应不会出现该问题。2、更致命的问题是,如果没有集群软件的协助,两台服务器写入的数据可能会存在互相覆盖的情况。
因此,该问题最后解决办法还是走回最简单的办法,不同服务器挂不同的硬盘。