Laravel 5 当与MariaDB Galera群集(读/写用户)一起使用时,PHPUnit测试会随机失败

Laravel 5 当与MariaDB Galera群集(读/写用户)一起使用时,PHPUnit测试会随机失败,laravel-5,mariadb,lumen,galera,lumen-5.2,Laravel 5,Mariadb,Lumen,Galera,Lumen 5.2,我有一个针对MariaDB Galera集群的Laravel Lumen 5.2项目。运行应用程序时,它似乎工作正常。但是当我运行PHPUnit测试时,它们会随机失败 问题是,我先填充数据库,然后尝试获取数据ID,用外键填充其他表。但是当尝试在之后立即获取数据时,数据为空 Laravel数据库连接用于读用户和写用户。在插入或读取时,Laravel会自动使用正确的。我想这就是问题所在。当我只使用WRITE用户时,测试工作正常 SET SESSION wsrep_sync_wait = 1; 在此

我有一个针对MariaDB Galera集群的Laravel Lumen 5.2项目。运行应用程序时,它似乎工作正常。但是当我运行PHPUnit测试时,它们会随机失败

问题是,我先填充数据库,然后尝试获取数据ID,用外键填充其他表。但是当尝试在之后立即获取数据时,数据为空

Laravel数据库连接用于读用户和写用户。在插入或读取时,Laravel会自动使用正确的。我想这就是问题所在。当我只使用WRITE用户时,测试工作正常

SET SESSION wsrep_sync_wait = 1;
在此之前,SELECT将确保写入已跟上

虽然Galera是同步的,但并不完全同步。写入操作保证发送到所有其他节点,并且它们将在那里工作。但是,在关键读取的情况下,SELECT可能会以过快的速度到达收件人节点而看不到写入。上述设置解决了该问题

现在,让我们真正了解您应该如何实现一个盖着Galera的web站点

在实际情况下,例如在事务中,对同一节点执行所有命令。这是没有处罚的。但是,请在提交后检查错误。 如果不实用,例如从新的HTTP连接启动新网页,请使用该设置。 虽然选择等待复制过程中可能会有轻微延迟,但延迟通常非常接近于零。我认为你的测试实际上是压力测试,它会欺骗性地说等待时间很长。也就是说,基准通常是为了找出最差的,而不是典型的

写入和失败的选择之间有多少延迟?也许只有1毫秒。“用户”发布“博客”,然后进入下一页并发现它丢失的速度有多快?可能超过100毫秒

你的压力测试发现了对这套设备的需要,而不是Galera“坏了”


.

是否向所有节点写入数据并从所有节点读取数据?还是你在“模拟”主从?无论哪种方式都可以,但是你需要理解细微的差别。是的,有两种类型的用户是明智的,但是每个用户背后都有什么负载平衡/路由/等等?谢谢!现在,我将wsrep_sync_wait设置为1,就像您在运行测试时所说的那样,它可以正常工作。