Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Galera Mariadb多主机复制_Mysql_Mariadb - Fatal编程技术网

Mysql Galera Mariadb多主机复制

Mysql Galera Mariadb多主机复制,mysql,mariadb,Mysql,Mariadb,我正在尝试在3个不同的位置设置一个由3台服务器组成的集群;美国达拉斯、英国伦敦、印度孟买。在每个位置我都设置了一个Web服务器和db服务器。在db服务器上,我配置了Galera Mariadb多主机集群,以便在所有三台服务器之间复制db。我的每个Web服务器都通过本地IP连接到其区域数据库服务器。我希望我的Dallas Web服务器将从Dallas db服务器获取db记录;来自伦敦db服务器的伦敦Web服务器和来自孟买db服务器的孟买Web服务器 一切都很好,但我发现mysql查询在获取记录时需

我正在尝试在3个不同的位置设置一个由3台服务器组成的集群;美国达拉斯、英国伦敦、印度孟买。在每个位置我都设置了一个Web服务器和db服务器。在db服务器上,我配置了Galera Mariadb多主机集群,以便在所有三台服务器之间复制db。我的每个Web服务器都通过本地IP连接到其区域数据库服务器。我希望我的Dallas Web服务器将从Dallas db服务器获取db记录;来自伦敦db服务器的伦敦Web服务器和来自孟买db服务器的孟买Web服务器

一切都很好,但我发现mysql查询在获取记录时需要花费超过100秒的时间。我曾经尝试过使用单个实例,并在5秒内获取数据


我做错了什么?

可以将Galera配置为单主机。听起来不像是你做的,但建议仔细检查

鉴于所有节点都是可写的,下面是每个事务上发生的情况的简化视图

  • 执行所有工作以存储/更新所连接主机上的数据。(大概是本地机器。)
  • 在提交时,对其他节点进行一次往返(可能约200毫秒),让它们有机会说“等等!那会导致冲突”
  • 通常步骤2会返回“没问题”。此时,
    COMMIT
    将成功返回给客户端
  • (注意:如果您没有使用
    BEGIN…COMMIT
    ,而是使用
    auto_COMMIT=ON
    ,那么在每个DML语句的末尾都有一个隐式的
    COMMIT
    。)

    对于本地读取,默认操作应返回“立即”

    但是,也许你关心的是“批判性阅读”问题。(cf
    wsrep\u sync\u wait
    )在这种情况下,您需要确保写入已传播到服务器。这可能会导致读取延迟200ms,因为它会等待“gcache”被捕获


    如果您可以假设只从同一个服务器上读取它们的代码,请考虑设置<代码> WSReSySycCyWalth= 0 。如果有人跨数据中心先写后读,他可能会遇到“关键读取”问题。(这是他写东西的地方,但在下次阅读时可能看不到。)

    感谢您的宝贵意见。我只使用SELECT语句从我的Web服务器到本地db服务器。某些SELECT查询会出现延迟,但并非所有查询都会出现延迟。但是当我关闭wsrep时,这种意外的延迟从未发生。我刚刚尝试在my.cnf中设置
    wsrep\u sync\u wait=0
    ,但没有成功。但这是默认值。@codelearner-所谓“关闭wsrep”是指禁用Galera?“不走运”是指它出现了语法错误?或者无法加速选择?是的,我关闭了Galera。它没有给出错误,但它得到超时,因为出于安全原因,我的请求超时限制在PHP中设置为100秒。如果我关闭了Galera,那么查询将及时完成。