MySQL代理HA,节点故障后无需重新连接

MySQL代理HA,节点故障后无需重新连接,mysql,database-replication,mysql-proxy,Mysql,Database Replication,Mysql Proxy,我使用MySQL和Galera wsrep来获得同步复制,该部分已经启动并运行 我需要设置一种代理来处理客户端连接。因为集群中的任何节点都可能发生故障,所以客户端不会直接连接节点,而只能通过代理连接节点 目前我使用Galera负载平衡器,它可以工作,但有一个例外: 如果一个节点出现故障,则通过代理连接到该节点的所有客户端都会出现连接错误,需要重新连接 我无法控制连接到代理的服务器应用程序,其中一些无法自动重新连接,需要手动重新启动。因此,问题是如何强制代理自动将已连接的应用程序重定向到新的数据节

我使用MySQL和Galera wsrep来获得同步复制,该部分已经启动并运行

我需要设置一种代理来处理客户端连接。因为集群中的任何节点都可能发生故障,所以客户端不会直接连接节点,而只能通过代理连接节点

目前我使用Galera负载平衡器,它可以工作,但有一个例外: 如果一个节点出现故障,则通过代理连接到该节点的所有客户端都会出现连接错误,需要重新连接


我无法控制连接到代理的服务器应用程序,其中一些无法自动重新连接,需要手动重新启动。因此,问题是如何强制代理自动将已连接的应用程序重定向到新的数据节点,而无需重新连接?

实际上有两个问题:

  • glbd将大多数(不是全部)新连接发送到故障节点,因为默认情况下,它使用“连接最少”的平衡策略,如果节点接受TCP连接,则将是它,因为连接将是短期的,并且从glbd的角度来看,它的加载最少。因此,只有当节点崩溃时,它才起作用。使用循环平衡策略,以确保最终应用程序将连接到工作服务器,或者使用glb-1.0.0beta,它可以使用mysql客户端轮询服务器状态,并做出更智能的决策
  • 通常,在不重新连接和重新验证的情况下迁移客户端连接几乎是不可能的,因为即使代理代表应用程序与服务器重新连接和重新验证(这意味着代理可以像mysqld那样对客户机进行身份验证,或者它可以监视并重播与服务器的客户机身份验证握手(可能性更小))——即使在所有这些之后,几乎不可能重新创建应用程序在崩溃的服务器上拥有的相同会话上下文(因此它不会注意到重新连接)