XXXX的Web Server是Linux+Apache+Php的多台机器上组成的集群,MySQL运行在SUN4800,4G内存的平台上。由于WEB的访问量在高峰的时候几乎满负荷运转,大量的请求都在访问数据库的时候被挂住了,导致一个请求没有完成,下一个请求又进来,最后恶性循环。数据库LoadAvg会在瞬间飙升至1000多,数据库的线程非常多,CPU忙于切换线程状态,这个时候除非Restart MySQL,否则怎么都不会好。在对SQL语句优化完成后还是不能很好的解决问题。在增加两台数据库服务器,通过MySQL的数据同步机制,让两台数据库上的数据保持同步,修改了一部分只会发生读取操作的php程序,让这些程序连接另外一台数据库,算是把负载分离出去一部分,问题得到了初步的解决。但是近期由于业务做大,XXXX又增加了多台服务器,本来想通过修改程序的方式实现将系统的负载分离,但是工程浩大,而且不能弄错,因为除了主服务器可以写入、修改数据,而其它的服务器只能通过数据同步更新自身的数据,所以如果你对那些数据库进行了写操作,结果将是灾难性的。
要保证数据库服务的响应能力和效率,稳定性和安全性,XXXX必须采用数据库服务器的负载均衡解决方案
但是,由于系统比较大,出于投资保护等考虑,XXXX 对数据库服务器的负载均衡解决方案的需求有如下几个特点:不改变XXXX的数据库体系结构;可用性目标达到99.9%;需承载XXXX每年50%的高成长;简单管理等等。这意味着在不对系统大动干戈的同时,却革命性地提高其性能,其挑战不言而喻。