首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XtraDB集群的设计

XtraDB集群的设计
EN

Stack Overflow用户
提问于 2018-07-23 20:17:51
回答 2查看 285关注 0票数 1

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

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

我的问题:

  1. 这是个好主意吗?难道我们不应该让ProxySQL来处理分割交通的问题吗?ProxySQL意味着没有孤立。
  2. 我们应该拥有更多的实例和更少的CPU,或者更少的实例和更多的CPU?拥有更多的实例将意味着在负载较高的情况下运行微服务时将更加隔离。
  3. 有不同CPU的节点是个好主意吗?例如,让“写实例”与“读取实例”相比拥有更多的CPU。
  4. 如果我们将微型服务直接指向“他们的Percona实例”,当他们的实例完全消失时,我们还能有某种医管局吗?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-28 22:47:09

  1. 是的,这是个好主意。在PXC中使用ProxySQL也是一个好主意。通过使用ProxySQL,您可以: A)通过将两个节点放入同一个主机组来实现“写器”HA,一个节点具有超高的权重(10000000),另一个节点位于低的主机组(10)中。如果高权重节点脱机,ProxySQL将无缝地开始向另一个节点发送通信量.将所有节点放入一个独立的具有相同权重的“读取器”主机组中,从而实现负载平衡写入通信量。C)如果需要,创建一个只包含1个节点的第三个主机组,并在模式、用户或查询模式上为您的“高负载”查询创建一个查询规则到模式匹配,并直接执行到该特定节点。ProxySQL还将允许您缓存其中一些非常重要的查询。
  2. 就我个人而言,除非你知道你的网络是坚如磐石的,否则我会选择更少的CPU实例。在PXC中,所有节点必须同步地ACK所有事务。节点越多,这些操作所需的等待时间就越长。最快的提交时间是两个最慢的节点之间的时间。请确保总是有一个奇数的节点,除非您使用pc.weight设置进行了高级处理(但这是非常困难的)。
  3. 对于一般的MySQL,所有节点都应该是相同的配置。如果你的主人比奴隶更强大,一般来说,奴隶将无法跟上音量。使用PXC,这意味着您将更频繁地体验流控制事件,这些事件可以转换为应用程序停止。如果node2无法以最快的速度编写node1,则node2发送流控制消息(呼救),要求其他节点在追赶时减速。
  4. 是的,如#1所述,使用ProxySQL。

附带注意,查询优化是“加快速度”的第一种方式。不要总是用硬件来解决问题。检查缓慢的查询日志并尝试改进查询是值得的。有时,一个单一的指数可以使夜间/白天的变化。

免责声明:我是Percona的高级讲师,并提供了许多全天的PXC和ProxySQL强化教程课程。

票数 3
EN

Stack Overflow用户

发布于 2018-08-17 01:06:11

看来你的尖峰是问题所在。而且你需要尽可能快地处理洪水,因为用户希望得到那些热票。

添加队列只会增加复杂性,并在动作快时减慢处理速度。所以“不要排队,只管去做。”进一步注意,队列将被传递到其他节点,从而使得enqueue/dequeue可能比简单地处理请求慢一些!

连接--做某事--断开连接需要时间。很多时候并不是真正涉及到“某物”,而是围绕在它周围的开销。我发现,如果只有不到10个连接处于活动状态,事情就会顺利进行。但如果有10多家公司成功起步,那么InnoDB就会开始自食其力。

去过拥挤的商店吗?比方说,所有过道上都有200人和大车的空间。但是,如果你想拥有210名购物者,那么每个人都会放慢脚步,只是想找个位置。吞吐量下降,也许到了人们想要放弃他们的手推车休假的地步。你看过前面排队的商店吗?他们解决了这个问题,不允许200多人同时购物!

因此,您的问题的解决方案可能是以外的MySQL。如果您有一个面向MySQL的网页,请将其节流以限制它使用的“线程”的数量。例如,Apache有这样的功能,加上在连接到Apache级别排队的“待办事项”。MySQL的max_connectionsbacklog可能以同样的方式工作,但是max_connections (151)的默认值太高了。在便利店里聚集在汽水机周围的151名学生可能是一个更好的比喻。

更多的节点/更多的CPU可能是答案的一部分,也可能不是答案的一部分;这取决于“某某物”取出了哪些锁。

Monitor Threads_running;如果它增长到几十个,那么我想我的评论也适用。如果监视器程序无法连接到检查该GLOBAL STATUS,那么我知道它适用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51486658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档