这是我第一次使用 mysql-proxy,我遇到了奇怪的行为,我想知道社区之前是否解决过它。
我有 mysql-proxy (0.8.2) 在连接到 2 个 mysql 服务器的 amazon linux(在 ec2 中)上运行。我的 java 客户端可以连接到代理并且负载平衡工作正常。
我的问题是:我有一个连接(通过代理)到服务器 A 的客户端。在我测试故障转移之前它工作得很好。当我关闭服务器 A 并且客户端尝试执行简单的插入命令(在已建立的连接上)时,我期望代理将请求重定向到服务器 B。但是我收到此异常:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
: Communications link failure.
本例中的客户端是使用mysql-connector-java-5.1.17-bin.jar的Java程序
关于如何解决这个问题的任何想法,或者我在这里遗漏了什么?
最佳答案
这是关于这个问题的更新,以防其他人遇到同样的问题。
似乎mysql-proxy在客户端连接到它时检查后端服务器上的状态。它不对数据库执行任何保活\心跳。我曾尝试使用 lua 脚本强制执行此类行为,但惨遭失败。
一个潜在的替代方案可能是使用 HAProxy 并包括 xinted mysqlchecks。我没有亲自尝试过。我们可能最终会构建一个代理连接客户端,它将包装 java.sql.Connection 并将适本地与 mysql-proxy 交互。
如果您找到实现上述目标的其他方法,请告诉我。
关于java - Mysql-Proxy 不进行故障转移(?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7391680/