mysql - 设计 XtraDB 集群

标签 mysql percona galera mysql-cluster percona-xtradb-cluster

我们有一个应用程序,它包含所有连接到同一个 Percona 数据库实例的微服务。目前它只是一个 16 核/32 GB 内存的实例,没有复制。我们的一个问题是,有时我们的一个微服务会对数据库造成如此高的负载(甚至只是读取),这使得所有微服务都无法使用。

我们正在考虑创建一个由三个节点组成的 Percona 集群,并为每个微服务选择节点。主要“写入”的服务将连接到一个实例,其余服务将连接到另外两个实例。这样,如果某些微服务导致高读取负载,它不应该完全压垮我们的基础架构。

我的问题:

  1. 这是个好主意吗?难道我们不应该让 ProxySQL 处理拆分流量吗? ProxySQL 可能意味着没有隔离。
  2. 我们是应该拥有更多的 CPU 更少的实例,还是更少的实例拥有更多的 CPU?拥有更多实例意味着在高负载情况下运行微服务的隔离度更高。
  3. 拥有配备不同 CPU 的节点是个好主意吗?例如,与“阅读实例”相比,让“写作实例”拥有更多的 CPU。
  4. 如果我们将微服务定向到“他们的 Percona 实例”,当他们的实例完全死掉时,我们还能拥有某种 HA 吗?

注意:我们可能会在 GCE 中使用 Percona XtraDB 单击部署:https://console.cloud.google.com/marketplace/details/click-to-deploy-images/percona?project=goout-cloud&folder&organizationId=74390800864

最佳答案

  1. 是的,这是个好主意。将 ProxySQL 与 PXC 一起使用也是一个好主意。通过使用 ProxySQL,您可以:A) 通过将两个节点放入同一主机组来实现“编写器”HA,一个具有超高权重 (10000000),另一个具有低权重 (10)。如果高权重节点下线,ProxySQL 将无缝开始向其他节点发送流量。 B) 将所有节点放入具有相同权重的单独“读取器”主机组,从而负载平衡写入流量。 C) 如果需要,创建一个只有 1 个节点的第三个主机组,并创建一个查询规则以模式匹配模式、用户或“高负载”查询的查询模式,并直接执行到该特定节点。 ProxySQL 还可以让您缓存一些重要的查询。

  2. 就我个人而言,我会选择较少的具有较高 CPU 的实例,除非您知道您的网络非常可靠。在 PXC 中,所有节点必须同步确认所有交易。您拥有的节点越多,这些操作的延迟时间就越长。您可以提交的最快时间是两个最慢节点之间的时间。请确保您的节点数始终为奇数,除非您使用 pc.weight 设置进行了高级设置(但要做到这一点非常棘手)。

  3. 一般来说,对于 MySQL,所有节点都应该是相同的配置。如果你的主人比奴隶厉害,一般来说,奴隶的音量是跟不上的。使用 PXC,这意味着您将更频繁地体验流量控制事件,这可能会转化为应用程序停顿。如果 node2 不能像 node1 一样快速写入,node2 会发出流量控制消息(求救),要求其他节点在它 catch 时放慢速度。

  4. 是的,使用 #1 中所述的 ProxySQL。

旁注,查询优化是“加快速度”的第一方法。不要总是用硬件来解决问题。花时间检查您的慢速查询日志并尝试改进查询是值得的。有时,单个索引可能会造成昼夜差异。

免责声明:我是 Percona 的高级讲师,已经举办过多次全天 PXC 和 ProxySQL 强化教程类(class)。

关于mysql - 设计 XtraDB 集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51486658/

相关文章:

mysql - 新的 MySQL 服务器比旧的慢

mysql - 我可以直接在 Galera 集群中的成员之一上运行 Xtrabackup 吗?

mysql - Galera MySQL 上的其他节点无法添加

jquery 客户端没有得到 Node js 服务器响应

java - 如何从mysql数据库创建和访问项目行的数组列表(在java中)?

mysql - 如何在 Spring Boot 应用程序中通过 ssh 隧道连接到远程 mysql

mysql - 从 java docker 容器连接到 percona docker

Mysql 5.6(Percona): How to Improve Query Performance of UPDATE and INSERT?

php - galera 集群的节点数必须是奇数吗?

mysql - 查找 tag_id 5 和 21 参加的所有可能的 event_id