知乎专栏 |
User --> Web LB1 --> Database
User | LB1 V 0.0.0.0:80 ---------------------------------------- / | \ web Node 1 web Node 2 web Node 3 LB1 LB2 LB3 \ | / ---------------------------------------- | V 0.0.0.0:1152 / 0.0.0.0:3306 ---------------------------------------- / | \ DB Node 1 DB Node 2 DB Node 3
这个方案非常适合全国布点的情况,经常夸公网访问数据库等资源。我们假设所有的服务器都不在同一个机房,广域网的链接是无法保证99.9%的联通性。
当一端公网的web服务器,链接另一端的数据库服务器是,一般会出现,由于网络不稳定ping时间长链接耗时严重,可能出现短时间中断,导致web不能正常工作
当然你可以通过调整程序解决,当DB1链接失败后尝试链接DB2..DB3..,这样的改进仍不能满足用户需求,例如:用户链接web用了1秒中,web链接数据DB1 用了30秒发现链接不上,在去链接DB2,最终用户打开网页至少32秒,而且下一个用户也会重复这样的操作去DB1链接在到DB2
你也可以考虑在增加一台负载均衡,但新的问题来了,web 到这台负载均衡的网络就能保证吗?
我的解决方法是,每个web server上都安装负载均衡软件,Web与负载均衡安装在一台服务器上,用户链接到web(通过智能DNS),web请求数据库localhost:3306负载均衡分配到数据库节点,这样可以解决当web服务器链接公网上的另一台数据服务器的时候,能保证剔除不稳定的节点,同时减少了web到另一台负载均衡设备上的开销