我正在尝试将 mysql 集群用于我们客户的项目中。
我设置的配置如下:
**Hardware S.O. equipment**
Server1 - S.O. Windows 2008 R2 64bit
Server2 - S.O. Windows 2008 R2 64bit
Client1 - S.O. Windows 7 64bit
Client2 - S.O. Windows 7 64bit
UserClient2 - S.O. Windows 7 64bit
UserClient3 - S.O. Windows 7 64bit
UserClient4 - S.O. Windows 7 64bit
UserClient5 - S.O. Windows 7 64bit
UserClientXX - S.O. Windows 7 64bit (where XX is less than 15)
My SQL 集群配置 Server1 - 作为集群数据节点 1 Server2 - 作为集群数据节点 2 Server1 - 作为 mysql 节点 1 (现在起为 MYSQL-D1) Server2 - 作为 mysql 节点 2 (现在起为 MYSQL-D2) Client1 - 作为 mysql 集群管理节点 1 Client2 - 作为 mysql 集群管理节点 2
客户端应用程序配置 以下客户端(从现在开始为 CLIENTAPP):Client1、Client2、UserClient2、..、UserClientXX 有一个与 mysql 集群数据库交互的 Microsoft .Net 应用程序。
过了一会儿,My sql 集群配置似乎工作正常,并且任何 CLIENTAPP 都能够连接到 MYSQL-D1 或 MYSQL-D2(这可以通过更改 .NET 客户端应用程序的连接字符串并指向 MYSQL-D1 的 IP 或 MYSQL-D2 的 IP 来实现)。
在理想情况下,CLIENTAPP 能够自动连接到正确的服务器(MYSQL-D1 或 MYSQL-D2),具体情况如下: - 如果 MYSQL-D1 已关闭,CLIENTAPP 则连接到 MYSQL-D2 - 如果 MYSQL-D2 已关闭,CLIENTAPP 则连接到 MYSQL-D1
.NET 客户端应用程序如何与 mysql 集群交互?
针对我的情况,我发现的最佳解决方案如下:1.使用 mysql 代理,但这处于 alpha 阶段,我无法在生产环境中使用它 2.在每个 CLIENTAPP 上安装集群数据节点 3.使用支持多台服务器的连接字符串(我不知道 mysql .NET 连接器是否支持它)4.重写我的应用程序以与 MYSQL-DX 节点进行交互(我想避免这种情况)
有正确的解决方案吗?哪一个是最好的?
谢谢
答案1
您的配置看起来更像是多主服务器而不是集群:在集群中,数据节点和客户端(通常是 mysql 服务器)连接到管理节点,管理节点负责处理节点的到达和离开。
然后,您只需连接到任何 mysql 服务器并发出 sql 语句……这些语句由 NDBCLUSTER 中的表的数据节点处理。但这样一来,您就无法利用 NDBApi 的功能。只能利用它的负载平衡功能。
也许你应该看看多主mysql复制,灾难恢复数据库或者percona xtradb 集群。
不幸的是,它似乎没有为 mysql c# 提供太多的负载平衡选项,但也许您可以围绕 Mysql 连接对象编写一个包装器。
在节点方面,Java 和 C++ 有非常强大的驱动程序,允许直接连接到数据节点,绕过 SQL 进行常见的 CRUD 操作,并带来巨大的性能提升。我想是时候让社区创建一个 .Net NDBCluster 驱动程序了