2

我一直在对我们的数据库进行一些 HA 测试,在我模拟服务器死亡的过程中,我发现了一个问题。

我的测试使用 Django 并执行此操作:

  1. 连接到数据库
  2. 进行查询
  3. 拔出服务器的网线
  4. 做另一个查询

此时,一切都无限期地挂在 mysql_ping 函数中。就我的应用程序而言,它已连接到数据库(因为之前的查询),只是服务器需要很长时间才能响应......

有谁知道处理这种情况的任何方法?connect_timeout 不起作用,因为我已经连接。read_timeout 似乎有点过于生硬(无论如何我什至无法使用 Django)。

设置默认套接字超时也不起作用(并且过于生硬,因为这会影响所有套接字操作而不仅仅是 MySQL)。

我正在认真考虑在线程中进行查询并使用 Thread.join(timeout) 来执行超时。

理论上,如果我能做到这个超时,那么重新连接逻辑应该会启动,并且我们的数据库自动故障转移应该可以完美运行(在受影响的进程上 kill -9 目前可以解决问题,但有点手动!)。

4

1 回答 1

0

我认为这与在您的前端网络服务器上设置 read_timeout 更加一致。可能存在无限期阻止您的 django 应用程序的任何原因。虽然您发现了一种特定情况,但可能还有更多情况(代码错误、缓存困难等)。

于 2012-04-17T14:05:50.117 回答