我们有一个主动/被动拓扑,其中有两个具有共享原始存储的 x86 复合体,其中在给定时刻只有一个节点可以访问共享存储(也称为主动节点)。如果主动节点发生故障转移,被动节点将启动接管并成为可访问共享存储的主动节点。每个节点都有自己的引导设备存储和文件系统。但是,共享存储上不能安装文件系统。

我们有兴趣在两个节点上安装 MySQL,其数据驻留在共享存储中,并且只有活动节点正在运行服务器。

MySQL 和 InnoDB 能够在原始设备上运行, ,还有如何运行的指南 MySQL 集群与我们的拓扑类似. 。但是,在第二个示例中,它们确实在共享存储上安装了文件系统。文件系统问题引发了一个主要问题:

ib_logfile* 仍然需要文件系统。所以原始的 MySQL 功能并不完全是原始的。如果我错了,请纠正我。是否有解决方法可以将这些文件存储在原始存储中?我们可以保存重做日志(ib_logfile0, ib_logfile1)在节点的引导设备中,并始终在服务器启动之前删除这些文件(因此,在多次故障转移的情况下,我们不会有旧的日志文件)。然而,如果事务中途失败,这可能会导致未提交的事务被部分提交,从而与事务的整体理念相矛盾。

是否还有其他文件/功能可能会影响此拓扑中 mysql 的行为?

有帮助吗?

解决方案

值得注意的是,InnoDB 的预写日志(WAL)即 ib_logfile* 并不是唯一需要文件系统的东西。你有:

  1. mysql 模式中的系统表可能使用 MyISAM 存储引擎(每个表使用 .frm、.MYD、.MYI)(现在大多数在 5.7 中使用 InnoDB)
  2. 每个 InnoDB 表的 .frm 文件,即使使用共享系统表空间(所需的表元数据)
  3. MySQL日志文件(错误日志、一般日志、二进制日志)
  4. SSL 工件
  5. auto.cnf(其中生成并自动存储MySQL实例UUID)
  6. 每个模式的 db.opt 文件(在 /<datadir>/<schema>/)
  7. .par 文件,如果您创建分区表(在 5.7 中消失)
  8. .trn 和 .trg 文件(如果您创建触发器)
  9. InnoDB 临时表空间(5.6+)
  10. 持久缓冲池页面映射(ib_buffer_pool,5.6+)

上述所有内容通常都在 数据目录, ,所以只要你有 datadir=/some/valid/fs/path ——这也被复制了(例如DRBD)或共享(例如两个节点之间的 NFS、GFS、OCFS)——那就没问题了。

值得注意的是,.frm、.par、.trn、.trg 和 .opt 文件将随 新数据字典.

请继续关注未来几个月的一些重大公告!:)

我不清楚你为什么使用 RAW 设备?我相信你有你的理由。:)

祝你好运!

其他提示

原始存储技术仅适用于 ibdata1 innodb_file_per_table 禁用。

我已经提到过几次设置这个

注意InnoDB架构(图片来自Percona CTO Vadim Tkachenko)

InnoDB Plumbing

innodb_file_per_table 禁用后,所有 InnoDB 表的数据和索引将与双写缓冲区、插入缓冲区、数据字典、回滚段和撤消空间一起存放在原始存储中。

关于重做日志,您应该考虑使用一个小的 DRBD 块设备来保存 /var/lib/mysql, , 和 ib_logfile0ib_logfile1 在那个文件夹中。因此,故障转移将如下进行

  • 中断两台服务器之间的 DRBD
  • 将新服务器的 DRBD 状态设置为 Primary/Unknown
  • 挂载 DRBD /var/lib/mysql
  • 使用 ibdata1 的信息挂载原始设备
  • service mysql start
  • 同步 DRBD 设备
  • 设置 起搏器/乌卡普 为下一次故障转移做准备的服务

我更喜欢使用 DRBD/ucarp 进行故障转移设置。 请参阅我关于它们的旧帖子

更新 2015-10-14 11:30 美国东部时间

正如我已经提到的,重做日志必须位于挂载的 DRBD 块设备中 /var/lib/mysql. 。关于其他重要文件,例如

  • 二进制日志
  • 中继日志
  • 错误日志
  • 慢日志
  • 普通日志

所有这些文件必须位于 /var/lib/mysql 以及。这样,故障转移将携带 MySQL 相关的所有内容(减去其自己磁盘中的原始数据)。

警告 :此设置不适用于 MyISAM 表。如果发生硬故障转移,则在崩溃/故障转移之前所有打开的 MyISAM 表将被标记为损坏,并且需要运行 REPAIR TABLE 对所有影响 MyISAM 表。

如果您的所有表都是 InnoDB,请忽略此警告。如果将剩余的 MyISAM 表转换为 InnoDB,则可以忽略此警告。(不要转换任何 MyISAM 表 mysql 架构到 InnoDB)。

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top