我想在我的应用程序中将查询负载均衡到2个mysql服务器上。
最好的方法是什么,以便每个查询都发送到不同的数据库服务器?
我考虑使用全局计数器,在每次连接时递增计数器,对我的db服务器取模,以获取应该连接的主机。然而,上述过程需要是原子性的,以便没有两个请求看到相同的计数器。
我该如何处理?使用信号量锁,mysql的get_lock()?
伪代码
counter = 0
hosts = array('192.168.1.1:3306', '192.168.1.2:3306')
//the below code needs to be atomic
GET A GLOBAL LOCK
counter = counter+1
RELEASE THE LOCK
host = hosts[counter % len(hosts)]
谢谢
flock
)来控制计数器(锁定它,读取和增加计数器,写入增加的数字,释放锁)。但要注意这可能很危险,因为它是应用程序的瓶颈......而且为什么这么重要呢?如果两个连续进程访问同一数据库服务器,谁在乎呢?只要平均情况分为50-50,这真的很重要吗? - ircmaxell