原始问题:
我有多个服务器都需要充当主服务器,好像一个服务器失败,下一个服务器启动并接管.我只是想知道最好的复制方式是什么.所有服务器都位于不同的数据中心.
问题
>使用’supermaster’将每台服务器设置为主 – 主机是否可以?
>我会遇到什么样的冲突?
>有没有更好的方法来做到这一点?
更新的问题:
我们在世界各地的服务器位于不同的数据中心,每个服务器都需要访问数据库,通常是在本地主机上.
每个服务器都需要能够更新数据库,每个服务器几乎都是每个其他服务器的镜像.这些都通过一个可以与之通信的服务器(超级主管)保持同步.
所有服务器只与supermaster通信,他们不知道任何其他服务器.超级主人它自己是其他服务器的镜像,只是增加了同步它们的服务.
有时候超级主管出于各种原因离线;当发生这种情况时,其他服务器正常进行,包括读取和写入数据.当超级主管重新启动时,它会启动同步过程并排除并解决其他服务器之间的冲突,当完成此操作后,所有服务器都拥有数据镜像并且都“同步”.
因此,在对这个问题进行更多思考之后,我的问题是;
>有没有办法让每台服务器上的单个数据库相同
全面,没有一点我可以更新
数据拓扑中的数据库?
>对于我的情况,是否有更好的选择来全面复制mysql?
任何帮助深表感谢.
解决方法:
您需要组合四(4)个选项
选项1:星形拓扑中的MySQL
为了不重新发明*,请阅读我过去关于这个主题的帖子
> Mysql Master-Master Replication Topologies on >2 machines
> https://*.com/questions/5273043/mysql-in-star-topology/5781504#5781504
> https://serverfault.com/questions/264374/mysql-in-star-topology/264444#264444
选项2:使用DRBD
> supermaster应该是DRBD对并使用DBVIP
> Star Topology的分发主机应该从DRBD主副本复制
>所有奴隶都应该从Star Topology的分发大师那里复制
> See my past post on using DRBD in Circular Replication between two datacenters(DRBD无法在地理距离内同步,但可以为每个数据中心提供磁盘级故障转移功能)
选项3:使用半同步复制
任何网络延迟都会影响二进制日志的收集,并且通过网络传输条目可能会成为瓶颈.使用MySQL 5.5’s Semisynchronous Replication可以允许您调整MySQL心跳特征,以便最大限度地减少由于任何重大网络延迟而失去其位置的复制.
选项4:循环复制
如果您有多个主服务器,则必须进行循环复制.有许多产品用于提供循环复制,例如mysql-mmm(在评论中提到),这在单个数据中心的范围内是很好的.这只是你的谜题的一部分,因为四(4)件事物必须在圆形复制之外进行调整:
>网络延迟
> Geogrpahic距离
>每个DataCenter的磁盘级冗余(由DRBD处理)
> DRBD的DBVIP骨干自动故障转移(通过ucarp)
警告
这可能不是您的完整答案,但这些选项可以提供您可以在不同场景中尝试的想法.例如,在星型拓扑中,您可以执行以下操作:
场景#1
>让一个数据中心的数据库服务器成为持有InnoDB数据的SuperMaster
>将分发主服务器放在同一数据中心(仅限二进制日志)
>让所有奴隶从分发大师复制
场景#2
>让一个数据中心的数据库服务器为SuperMaster,不保存数据,这意味着超级主服务器是分发主服务器(仅限二进制日志)
>让所有奴隶从分发大师复制
情景#3
>在循环复制中的每个数据中心中设置分发主服务器
>在每个数据中心内,使用InnoDB作为唯一的存储引擎的MySQL实例(本地SuperMaster)
>从每个本地SuperMaster中,挂起两个或多个读取从站.每个读取从站应使用MyISAM作为主存储引擎.每个MyISAM表应该有ROW_FORMAT = FIXED以提高读取速度20-30%
就可能性而言,这取决于你的想象力和部门预算.
MySQL和DRBD的链接
> http://dev.mysql.com/doc/mysql-ha-scalability/en/ha-drbd.html
> http://downloads.mysql.com/docs/mysql-ha-drbd-en.a4.pdf
磁盘级冗余的DRBD和DBVIP自动故障转移的ucarp
> http://www.drbd.org
> http://www.ucarp.org