为什么每个人都告诉我,主客体对话总是以悲剧收场,应该尽量避免?
答案1
因为没有两个人使用完全相同的术语,没有两个人设置完全相同的服务器,没有人以相同的方式自动执行故障转移,并且很少有人掌握 mysql 以真正帮助环境而不是仅仅增加复杂性的方式完成它。
结局会让人泪流满面,但如果你做得对,你的眼泪,而不是你的雇主或客户的眼泪。毕竟,这不就是系统管理员的职责吗?
以下是一些您可以阅读的最佳内容:
http://www.mysqlperformanceblog.com/2009/10/09/finding-your-mysql-high-availability-solution-the-definitions/
http://www.mysqlperformanceblog.com/2009/10/16/finding-your-mysql-high-availability-solution-–-the-questions/
http://www.mysqlperformanceblog.com/2009/11/13/finding-your-mysql-high-availability-solution-–-replication/
答案2
看看《高性能 MySQL(第二版)》和 Maatkit 工具的作者对这个主题的看法:http://www.xaprb.com/blog/2008/08/06/how-to-scale-writes-with-master-master-replication-in-mysql/
干杯
答案3
不可避免的是,在更新之间,两者都会以矛盾的方式进行更新,一切都会变得混乱……或者至少你会得到不可预测的行为。
想象一下两个人以不同的方式更新同一条记录的情况。哪一个是正确的?在 Master<->Master 环境中,没有正确性。两个记录同样正确。因此它将按顺序进行并应用它们,从而导致数据不一致。
如果您使用的是 mysql,您也往往会遇到行级锁定问题...这些行通常不会复制。而且您必须进行一些丑陋的破解才能解决重复自动编号字段的问题(服务器 1 自动增加奇数 1、3、5,服务器 2 自动增加偶数 2、4、6)。
它就是不漂亮。
答案4
部分问题在于,几乎没有理由采用主-主环境。正确的做法是使用缓存层并批量写入数据库。