与独立的mariaDB服务器相比,使用galera获得非常糟糕的性能

时间:2017-01-12 10:25:59

标签: mysql mariadb database-administration percona galera

我使用我创建的galera设置获得了令人无法接受的低性能。在我的设置中,有2个节点处于主动 - 主动状态,我正在使用HA代理负载平衡器以循环方式在两个节点上进行读/写。

使用以下配置的单个mariadb服务器,我很容易在我的应用程序上获得超过10000 TPS: 36个vpcu,60 GB RAM,SSD,10Gig专用管道

使用galera我很难得到3500 TPS,虽然我使用ha-proxy平衡的数据库负载的2个节点(36vcpu,60 GB RAM)。有关信息,ha-proxy作为独立节点托管在不同的服务器上。我已经删除了ha-proxy,但是性能没有任何改善。

有人可以在my.cnf中建议一些调整参数我应该考虑调整这个严重不佳的设置。

我正在使用下面的my.cnf文件:

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:2)

  

我很容易在我的应用程序上获得超过10000 TPS   具有以下配置的单mariadb服务器:36 vpcu,60 GB   RAM,SSD,10Gig专用管道

     

使用galera我很难获得3500 TPS,尽管我使用的是2   数据库负载的节点(36vcpu,60 GB RAM)由ha-proxy平衡。

基于Galera的集群不是为了扩展写入而设计的,因为我认为你打算这样做;事实上,正如Rick所提到的:为同一个表发送写入多个节点的最终会导致认证冲突,这些冲突将反映为应用程序的死锁,从而增加了巨大的开销。

  

我使用galera设置获得了令人无法接受的低性能i   创建。在我的设置中,有2个节点处于主动 - 主动,我正在做   使用HA代理以循环方式在两个节点上进行读/写   负载均衡器。

请将所有写入发送到单个节点,看看是否提高了性能;由于Galera使用的虚拟同步复制的性质,总会有一些开销,这实际上为您执行的每次写入增加了网络开销(虽然真正的基于时钟的并行复制将抵消这种影响相当多,但您仍然必然会看到吞吐量略低一些。)

当你完成一个原子工作单元时,也要确保你的事务保持简短和COMMIT,因为复制认证过程是单线程的,并且会在其他节点上停止写入(如果你看到你的编写器) node显示事务wsrep pre-commit阶段,这意味着其他节点正在为大型事务进行认证,或者该节点遇到某些类型的性能问题 - 磁盘,全磁盘,滥用大量读取等。

希望有所帮助,并告诉我们当你转移到单个节点时它会如何发展。

答案 1 :(得分:0)

关闭质量控制:

query_cache_size = 0  -- not 22 bytes
query_cache_type = OFF -- QC is incompatible with Galera

增加innodb_io_capacity

两个节点相隔多远(ping时间)?

建议你假装它是Master-Slave。也就是说,让HAProxy将所有流量发送到一个节点,而将另一个流量作为热备份。在这种模式下,某些东西可以跑得更快;我不知道你的应用程序。