mysql 复制 主 主

mysql 复制 主 主
  1. mysql 建议做主从集群还是主主集群?
  2. 我是否需要第三方工具来为虚拟 IP 建立主-主 mysql 集群?(我想使用心跳,但我不确定是否真的需要)。
  3. 如果有人有的话,我需要一些关于如何进行 master-master 的文档。

谢谢,埃拉德。

答案1

如果可能的话,你应该避免主主设置。通常更好的方法是有一个主服务器和多个从服务器,如果主服务器发生故障,则将一个从服务器提升为新主服务器。如果写入负载很高,则无法执行此操作。那么多主服务器可能有意义。或者你可以研究分片。

答案2

我很乐意推荐主/主模式,而不是主/从模式,原因如下

  • 您已将两台数据库服务器配置为主服务器,并具有最新的二进制日志
  • 手动故障转移到被动主服务器仅需“ip addr add”即可。
  • 您可以将 IP 配置为一个活动主服务器(使用乌卡普
  • 您可以将数据库写入隔离到一台机器(无论哪台主机具有 DBVIP)
  • 被动主服务器(没有 DBVIP)可用于读取、mysqldump、XtraBackups、tar/gzips
  • 将从服务器重新配置为新的主服务器,并将旧主服务器重新配置为新的从服务器,这既不快捷,也不简单,也不太无缝,尤其是当您必须快速备份数据库服务器时。

使用 Master/Master 只有两个缺点

  • 如果被动主服务器落后 0 秒以上,则无法执行任何故障转移。过早故障转移会为应用程序提供过期数秒的数据,并且重复密钥的可能性可能会出现,因为尝试在数据间隙中写入新数据。对于低写入环境,您可以忍受这种情况,因为复制可以在故障转移之前快速赶上。
  • 两个主服务器的缓存(MyISAM 密钥缓存和 InnoDB 缓冲池)并不相同。故障转移到被动主服务器可能会导致初始服务器负载激增,读取和写入以获取具有正确数据的数据库缓存。您可以使用以下方法克服这个问题mk-从属-预取,即将更名为 pt-slave-prefetch (Percona Toolkit)

似乎处于灰色地带的是同时在两个主服务器上执行数据库写入。尽管选项auto_increment_increment自动增量偏移量是为了缓解两个不同服务器上同一张表的 auto_increment 值而发明的,真正安全的使用 Master/Master 允许在两个服务器上进行数据库写入,分为两种情况:

  1. 所有使用 PRIMARY KEY 的表都不能基于自动递增
  2. 在不同的主服务器上写入互斥数据库。换句话说,如果您将数据库写入限制在一个主服务器上的 schema1 上,并且从不在另一个主服务器上对 schema1 执行数据库写入。

更新时间:2012-10-04 11:42 EDT

Percona XtraDB 集群(PXC)已成为一款出色的同步多主数据库。这对于多租户数据库来说非常有用。

你必须记住以下有关 PXC 的信息

  • InnoDB 的内存要求和磁盘配置
  • 请记住,MyISAM 上的 DDL/DML 不会在 Galera Write Set Replicator Libraries 中复制。由于 GRANT 命令与存储引擎无关,因此 mysql 模式中的 MyISAM 表可以毫无问题地处理。不会复制针对 mysql.user 的任何 DML。
  • 最弱的节点会使整个集群变慢,尤其是在提交时。因此,请确保所有节点都具有相同的硬件/软件/操作系统/虚拟机/RAM/网络设置。
  • 您可以对所有节点执行适度的负载平衡写入。集群中的节点越多,提交速度就越慢。
  • PXC 与 MySQL Cluster 不同之处在于所有节点都包含相同的数据

就故障转移而言,任何节点都可以成为主节点。您可以将读取分散到整个集群中。对于多租户数据库,您可以分散写入(插入、更新、删除),而无需担心死锁。当对同一数据库的写入分散到整个集群时,仍然可能出现死锁。在编写应用程序代码时应尽职尽责,以避免死锁。

答案3

一个关键的考虑因素是您需要将更新反映到整个集群中的程度是否接近实时。

如果是我的话,我会倾向于具有服务器亲和性的主/主复制 - 这样就可以保证用户立即看到他们的更新(部分中断期间除外)。

我是否需要第三方工具来为虚拟 IP 创建主-主 mysql 集群?

如果主服务器出现故障,您需要一些智慧来处理主/从复制中从服务器的提升 - 可以使用谷歌,那里有很多例子。

与上一个一样,为了提供负载平衡和服务器亲和性,我建议运行mysql代理(例如根据会话 ID 或客户端 IP 分配工作负载)。根据您运行的 Web 服务器数量,您可能会在每个服务器上运行一个 mysqlproxy 实例。mysqlproxy 网页上显然没有记录实现服务器亲和性 - 但您只需要学习一些 lua!

这里有一个简短的如何设置复制的指南这里

相关内容