代码之家  ›  专栏  ›  技术社区  ›  Vojtěch

XtraDB集群的设计

  •  0
  • Vojtěch  · 技术社区  · 6 年前

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

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

    我的问题:

    1. 这是个好主意吗?我们不应该让ProxySQL来处理流量分割问题吗ProxySQL可能意味着没有隔离。
    2. 我们应该用更少的CPU来实现更多的实例,还是用更少的CPU来实现更多的实例拥有更多的实例将意味着在高负载情况下运行微服务时需要更多的隔离。
    3. 有不同CPU的节点是个好主意吗例如,与“读取实例”相比,让“写入实例”拥有更多的CPU。
    4. 如果我们将微服务指向“他们的Percona实例”,那么当他们的实例完全失效时,我们还能拥有某种HA吗?

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

    2 回复  |  直到 6 年前
        1
  •  3
  •   utdrmac    6 年前
    1. 是的,这是个好主意在PXC中使用ProxySQL也是一个好主意。通过使用ProxySQL,您可以:A)通过将两个节点放入同一主机组来实现“writer”HA,一个节点具有超高权重(10000000),另一个节点位于低权重(10)如果高权重节点脱机,ProxySQL将无缝地开始向另一个节点发送流量。B)将所有节点放入一个具有相同权重的单独“reader”主机组中,从而实现写流量的负载平衡C)如果需要的话,创建一个只有1个节点的第三个主机组,并创建一个查询规则,以便在模式、用户或查询模式上匹配您的“高负载”查询,并直接执行到该特定节点ProxySQL还可以让您缓存一些重负荷查询。

    2. 就我个人而言,除非你知道你的网络是坚如磐石的,否则我会选择更少的实例和更高的CPU在PXC中,所有节点必须同步ACK所有事务节点越多,这些操作所需的延迟就越长提交的最快速度是两个最慢节点之间的时间请确保您总是有奇数个节点,除非您使用pc.weight设置进行了高级设置(但这是非常棘手的)。

    3. 对于MySQL,所有的节点都应该是相同的配置如果你的主人比奴隶更强大,一般来说,奴隶将无法跟上数量使用PXC,这意味着您将更频繁地体验流控制事件,这些事件可以转换为应用程序暂停。如果node2不能像fast node1那样写,node2会发出流控制消息(呼救),请求其他节点在它赶上时放慢速度。

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

    另外,查询优化是“加快速度”的一种方法,不要总是把硬件放在问题上。值得花时间检查慢的查询日志并尝试改进查询有时,一个单一的指数可以使夜晚/白天有所不同。

    免责声明:我是Percona的高级讲师,已经提供了大量全天的PXC和ProxySQL密集型教程。

        2
  •  0
  •   Rick James diyism    6 年前

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

    添加 队列 只增加复杂性 减慢了处理速度 当动作很快的时候因此“不要排队,就这样做吧。”进一步注意,队列将被传递复制到其他节点,从而使排队/出列可能比简单地处理请求慢!

    连接- 做某事 -断开连接需要时间。很多时候并不是真的在“某物”里,而是在它的周围我发现,如果只有不到10个连接处于活动状态,事情就会顺利进行。但如果超过10家公司成功启动,那么InnoDB就会开始陷入困境。

    曾经在一个 拥挤的商店 ? 假设所有过道都能容纳200人和推车但如果你试图拥有210名购物者,每个人都会放慢脚步,只是想争取一个职位吞吐量下降,可能到了人们想放弃购物车休假的程度。有没有见过前面排着队的商店他们不允许超过200人同时购物者,解决了这个问题!

    所以,你的问题的解决办法可能是 MySQL之外 . 如果您的网页位于MySQL前面,请对其进行限制,以限制其使用的“线程”数量例如,Apache有这样的服务,外加一个“backlog”,用于在connecttoapache级别排队MySQL有 max_connections backlog 这可能同样有效,但默认为 最大连接数 (151)太高。151名学生挤在便利店的汽水机旁可能是一个更好的比喻。

    更多 节点/更多CPU可能 或者不可以 作为答案的一部分;这取决于“某物”取出了什么锁。

    监视器 Threads_running ;如果增长到几十个以上,那么我怀疑我的评论适用如果监视器程序无法连接到 GLOBAL STATUS ,那么我知道它适用。