首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql主母机

mysql主母机
EN

Server Fault用户
提问于 2011-10-22 15:34:19
回答 2查看 265关注 0票数 1

我有n台服务器,我计划使用主主配置来设置n台主服务器。什么样的建筑将是最好的?另外,我需要处理自动增量表的事情.

如果我的服务器是A,B,C和D。把B的主人指为A、C和B的主人、D的主人为C、A的主人为D是安全的吗?会不会导致任何数据一致的问题。还有其他更好的方法吗?

EN

回答 2

Server Fault用户

发布于 2011-10-23 07:49:39

您所描述的拓扑称为“循环复制”。您基本上是在设置一个环,其中每个节点充当下一个节点的主节点。高性能MySQL的作者建议不要使用这种拓扑,原因如下:

  • 这取决于每个节点是否可用,因此增加了您的失败概率。
  • 如果从环中删除一个节点,则源自该节点的复制事件将进入无限循环,因为唯一过滤掉它们的节点不再可用。
票数 5
EN

Server Fault用户

发布于 2011-10-24 15:40:59

这种拓扑可以是您的敌人,也可以是您的朋友,这取决于您在哪里执行主读和写。成功使用循环复制的关键是以下循环复制接触规则:

  • 将数据库上的DML限制在同一数据库服务器上
  • 将数据库上的选择查询限制在同一数据库服务器上
  • 使用auto_increment值创建数据分界

点的案例

我雇主的网络托管公司拥有一家汽车经销商CRM公司,该公司在美国各地拥有859家经销商(+夏威夷)。

它们有3个DB服务器,每个服务器具有以下内容

  • 192 GB内存(16 GB RAM磁盘,162 GB InnoDB缓冲池)
  • 双HexaCore (没错,12个CPU)
  • 1.7TB数据量(776经销商数据)

所有DB服务器都使用循环复制。

客户端每个经销商都有一个数据库,因此在MySQL实例中有一个多租户DB布局。

客户端的开发人员通过在这15台Web服务器中分配一定数量的代理来读取和写入数据来分离写入。每个web服务器都专门用于从三台DB服务器中的一台进行读写。这是大约283个经销商写到一个数据库。客户端选择既不使用复制-do-db也不使用复制-忽略-db,因为这将使DBs成为一个庞大的包含或排除列表。

每个DB服务器,用于/etc/my.cnf的自动_增量_增量自动_增量_偏移的折叠设置

Server1

代码语言:javascript
复制
[mysqld]
auto_increment_increment=10
auto_increment_offset=1

Server2

代码语言:javascript
复制
[mysqld]
auto_increment_increment=10
auto_increment_offset=4

Server3

代码语言:javascript
复制
[mysqld]
auto_increment_increment=10
auto_increment_offset=7

auto_increment_increment和auto_increment_offset设置为保护每个DB服务器的MySQL实例中所有代理DB之间的auto_increment值的完整性。

只要我的客户遵循循环复制约定规则,客户端就可以使用以下范例:

任何经销商DLR

  • 一个用于写入DLRDB的DBServer W
  • 两个DBServers (R1,R2)提供DLRDB的热备份。
  • 其中一个热备份可以用于mysqldump备份,而不会干扰其他DLRDBs。

自2011年3月以来,客户端一直使用这种拓扑结构,甚至没有对数据完整性提出任何抱怨。

端点在

点的情况

我的雇主的网络托管公司也提供相同的DB拓扑/基础设施数十个较小的客户多年来没有投诉。只要严格遵守循环复制约定规则,就可以完全信任循环复制。

试试看!!

警告

MySQL 5.5为将主程序更改为“忽略”提供了新的命令扩展。根据有关这方面的MySQL文档:

IGNORE_SERVER_IDS被添加到MySQL集群NDB6.1.29、MySQL集群NDB6.3.31、MySQL集群NDB7.0.11和MySQL集群NDB7.1.0中(参见Bug #47037)。此选项采用以逗号分隔的0或多个服务器ID列表。将忽略来自相应服务器的事件,但日志旋转和删除事件除外,这些事件仍然记录在中继日志中。在循环复制中,原始服务器通常充当自己事件的终止符,因此它们不会被应用不止一次。因此,当删除循环中的一个服务器时,此选项在循环复制中非常有用。假设您有一个具有4个服务器的循环复制设置,服务器ID为1、2、3和4,而服务器3失败。当开始从服务器2复制到服务器4时,可以在“更改母版”中包含IGNORE_SERVER_IDS = ( 3 ),以便您在服务器4上发出语句,告诉它使用服务器2而不是服务器3。这样做会导致服务器忽略,而不会传播任何源自不再使用的服务器的语句。如果在没有任何IGNORE_SERVER_IDS选项的情况下发出“更改主语句”,则保留任何现有列表;“重置从服务器”也不影响服务器ID列表。要清除被忽略的服务器列表,必须使用空列表选项:将主服务器更改为IGNORE_SERVER_IDS = ();如果IGNORE_SERVER_IDS包含服务器自己的ID,并且服务器启动时启用了-复制-相同的服务器-id选项,则会出现错误结果。从MySQL 5.1.47开始,调用变更母版将导致将MASTER_HOST、MASTER_PORT、MASTER_LOG_FILE和MASTER_LOG_POS的前几个值写入错误日志,以及执行之前有关从服务器状态的其他信息。

这个命令扩展很好地将DB服务器从循环复制拓扑中移除,而不需要在无限循环中执行SQL命令。

票数 2
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/323924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档