【问题标题】:Is using ProxySQL a requirement to direct queries in Galera Cluster or MySQL Master-Slave?使用 ProxySQL 是否需要在 Galera Cluster 或 MySQL Master-Slave 中直接查询?
【发布时间】:2022-11-12 22:30:39
【问题描述】:

我仍然没有太多使用这些工具(Galera Cluster 和 MySQL Master-Slave Cluster)的经验,我正在 Jelastic/Virtuozzo 的 Wordpress 环境中测试一些场景。

我的平台每分钟有大量查询,既来自随机发生的请求,也来自通过 Cron 的操作,在我的例子中,它不使用本机 wp-cron 计划,而是每 5 分钟使用 linux cron 计划。

我经常使用访问数据库的应用程序,例如 Woocommerce、Wocoomerce Subscriptions、Learndash、Automator 等。

测试场景 1- MySQL Master-Slave with ProxySQL:很满意,但我害怕只保留一个节点作为主节点,以防万一发生故障。

测试场景 2- 带有 ProxySQL 的 MySQL Master-Master:它工作了一段时间,但随后在某些表中开始出现不同步查询的问题,主要是选项表 (wp_options)。错误“ha_err_key_not_found”在日志中变得很常见。

测试场景 3- 没有 ProxySQL 的 MariaDB Galera 集群:这是 Jelastic Marketplace 上 Wordpress 集群中的默认配置。这是令人满意的,但有时它会产生 [警告] Aborted connection 6388 to db:..(写入通信数据包时出错)。这是一个麻烦,因为它总是发生在一些 Woocommerce 任务请求中,安排在 Action Sheduler 中,导致这些任务失败。

测试场景 4- Maria DB Galera Cluster with ProxySQL:同样令人满意,Action Sheduler 中的任务错误较少,但并不完全。

关于 Action Sheduler 中的此类错误,在最后两个场景中,它们始终相同:“300 秒后的操作超时”,尽管服务器超时大于此时间(600)。这导致人们相信任务被简单地杀死了。这些仅在通过异步请求触发操作时发生。

所有这些插图只是为了报告我的经验,但我意识到,尽管存在一些缺陷,但对我来说使用 Galera Cluster 是最好的选择。但我的疑问出现了:

1) 在 Wordpress 环境中使用 ProxySQL 是否更好?

2)如果我不在Galera集群上使用ProxySQL,我知道复制会正常工作,但是如果我将Wordpress直接连接到主节点,查询会在其他Galera节点之间平衡吗?还是查询总是在Master节点上执行,不管是写还是读?

3) 如果问题 2 的答案是查询不会平衡,那么将应用服务器层的每个节点连接到不同的 Galera 节点是否正确?

4)在不使用ProxySQL的情况下使用MySQL Master-Salave,是否还会在从节点上进行SELECT查询?还是只有主节点实际响应?

提前感谢您提供可能的答案,如果不清楚或问题有点太天真,我深表歉意。

【问题讨论】:

  • 不可能在任何事情上都达到 100%。你有一个关于这个领域可能出错的好博客的开端。

标签: php mysql wordpress galera jelastic


【解决方案1】:

据我所知,在生产中使用 Galera Cluster 几年。以下是我对您的问题的看法:

  1. 在 Wordpress 环境中使用 ProxySQL 是否更好?

    是的,最好将 ProxySQL 用于您的 Wordpress 部署。假设我们有 node1、node2 和 node3。例如,通过使用 ProxySQL,我们可以将 node1 固定为写入节点。然后我们可以将 node2 和 node3 固定为读取节点。因此,每个写入操作都会被重定向到 node1。但是每个读取节点,都会被重定向到 node2 或 node3

    1. 如果我不在 Galera Cluster 上使用 ProxySQL,我知道复制会正常工作,但是如果我将 Wordpress 直接连接到主节点,是否会在其他 Galera 节点之间平衡查询?或者查询是否总是在主节点上执行,无论它们是写入还是读取?

    不,您只能指向 Galera 集群的单个节点。如果您的节点关闭,那就更糟糕了,但您的 Wordpress 无法动态指向另一个节点。

    通过使用 ProxySQL,您只需指出 ProxySQL 的 IP 地址。

    1. 如果问题2的答案是查询不会平衡,那么将app server层的每个节点连接到不同的Galera节点是否正确?

    如果不使用负载平衡器软件,您可能不得不尝试另一个技巧。例如通过使用 HAProxy 或 Nginx 负载平衡。

    1. 在不使用ProxySQL的情况下使用MySQL Master-Slave,SELECT查询还会在slave节点上执行吗?还是只有主节点实际响应?

    这取决于您的配置。假设你有 node1、node2 和 node3。 node1 是主节点。 Node2 和 node3 是 node1 的从属设备。您可以定义写入操作可以重定向到 node1。对于读取操作,可以将负载平衡到 node2 或 node3。

    您可以访问的有关 ProxySQL 的示例教程:https://proxysql.com/blog/effortlessly-scaling-out-galera-cluster-with-proxysql/

    希望你喜欢那篇文章。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-07
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-06
    • 2017-01-09
    相关资源
    最近更新 更多