使用 MySQL NDB 集群实现负载均衡和 HA

Posted

技术标签:

【中文标题】使用 MySQL NDB 集群实现负载均衡和 HA【英文标题】:Achive both Load balancing and HA with MySQL NDB cluster 【发布时间】:2018-01-08 14:06:48 【问题描述】:

如何使用 mysql NDB 集群数据库配置应用程序,以便完全满足高可用性和负载平衡。 据我所知,我们可以通过适当地配置数据库连接 url 来分别拥有这两个功能。

高可用性 [1]

jdbc:mysql://[primary host][:port],[secondary host 1][:port][,[secondary host 2][:port]]...[/[数据库]]» [?propertyName1=propertyValue1[&propertyName2=propertyValue2]...]

用于负载平衡 [2]

jdbc:mysql:loadbalance://[host1][:port],[host2][:port][,[host3][:port]]...[/[数据库]] » [?propertyName1=propertyValue1[&propertyName2=propertyValue2]...]

如果可能的话,查询是如何使用 mysql ndb cluster 实现这两个功能。

[1] - https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-config-failover.html

[2] - https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-usagenotes-j2ee-concepts-managing-load-balanced-connections.html

【问题讨论】:

【参考方案1】:

对于 MySQL NDB Cluster,高可用性位于数据节点中。 因此,您可以使用负载平衡设置并仍然获得高可用性。

借助高可用性,您一次只能使用一台 MySQL 服务器, 这也适用于 MySQL NDB Cluster,但在 NDB 中你可以 负载平衡中的任意数量的 MySQL 服务器,它们将看到彼此 立即更新。因此负载平衡设置是 NDB 的首选设置。

【讨论】:

使用 NDB 集群,我们从应用程序中指向 mysql 节点。我们不指向数据节点。因此,如果我们将应用程序配置为指向 Mysql 节点的负载平衡,我们不能说实现了高可用性。如果 mysql 节点关闭,则没有 HA。由于 Mysql 节点已关闭,应用程序将无法工作。因为数据节点是独立的,我们的应用程序不直接与它们连接。所以恕我直言,我们不能认为 HA 是通过连接到 NDB 集群的设置来实现的,即使 HA 是在 mysql 集群中实现的。 WDYT ? 不确定我是否理解您的推理,如果 MySQL 服务器关闭,它将不会参与负载平衡,在这种情况下,始终会选择存活的 MySQL 服务器。因此,在这种情况下,您可以使用 NDB 获得 HA 和负载平衡。 我对您的陈述提出异议,“对于 MySQL NDB Cluster,高可用性存在于数据节点中。”我说的是设置中如果只有一个MySql服务器节点,多个数据节点,就没有HA。我们不能说 HA 是通过拥有多个数据节点来实现的。 HA 实际上是通过拥有多个 MySQL 节点来实现的。 这是完全正确的,您没有使用单个 MySQL 服务器获得 HA。但是关于使用带有负载平衡的 JDBC 或 MySQL 服务器列表的原始问题都需要至少 2 个 MySQL 服务器才能使用。因此,如果您有 2 个 MySQL 服务器并使用 JDBC 的负载平衡配置,您将获得 HA,因为 JDBC 将在有两个活动 MySQL 服务器时使用循环,当只有一个 MySQL 服务器启动时将使用单个幸存的 MySQL 服务器跨度>

以上是关于使用 MySQL NDB 集群实现负载均衡和 HA的主要内容,如果未能解决你的问题,请参考以下文章

mysql集群实例

nginx负载均衡nginx的高可用集群利用keepalive实现双vip

Linux 高可用(HA)集群之keepalived详解

Nginx反向代理负载均衡

lvs-dr实现mysql负载均衡集群

快速搭建kubernetes高可用集群(3master+3worker+负载均衡)