AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 17708
Accepted
Andy
Andy
Asked: 2009-06-03 04:49:48 +0800 CST2009-06-03 04:49:48 +0800 CST 2009-06-03 04:49:48 +0800 CST

由于 MySQL DRBD Heartbeat 故障转移脚本导致的数据丢失

  • 772

使用 DRBD 版本:8.2.6 (api:88/proto:86-88)

这是 /etc/ha.d/haresources 的内容

    db1 192.168.100.200/24/eth0 drbddisk::mysql 文件系统::/dev/drbd0::/drbd::ext3::defaults mysql

和 /etc/ha.d/ha.cf

    日志文件 /var/log/ha-log
    本地日志设施0
    保活 1
    死区时间 30
    警告时间 10
    初始化死机 120
    端口 694
    bcast eth0, eth4  
    auto_failback 关闭
    节点 db1
    节点 db2
    重生 hacluster /usr/lib64/heartbeat/ipfail
    apiauth ipfail gid=haclient uid=hacluster
    死神 5

在测试机器之间的故障转移时,我在 db2 上运行了以下命令:

    服务心跳停止
    服务 mysqld 停止
    drbdadm 关闭 mysql
    服务 drbd 停止

db1 上的 /proc/drbd 报告

     0: cs:Connected st:Primary/Unknown ds:UpToDate/DUnknown C r---

接下来发生了什么,之后:

  • 使服务在 db2 上重新联机
  • 使用 hb_primary 脚本将主数据库传输到 db2
  • 如上所述取下db1
  • 使服务在 db1 上重新联机
  • 使用 hb_primary 脚本将主节点转移回 db1

是 db1 重新挂载了 DRBD 磁盘,假设了正确的 IP 并启动了 MySQL。有大量的 MySQL 表损坏;这一切都可以修复(使用 InnoDB 恢复模式 6、mysqlcheck 和偶尔的备份),但它是如何发生的呢?

我推测:

  1. DRBD 在 MySQL 使用磁盘时断开了磁盘与文件系统的连接,因为干净的 MySQL 关闭不会导致数据损坏
  2. 心跳控制DRBD,停止心跳服务“拔掉”DRBD
  3. 在实际故障转移的情况下,这可能会再次发生(由于心跳 ping 超时)

我有一段时间无法再次访问此设置,并想重复测试。

配置设置是否正确?

损坏是我手动测试的结果吗?

有没有比停止心跳服务并让它运行 haresources 命令更好的方法来测试故障转移?

mysql drbd high-availability heartbeat data-loss
  • 3 3 个回答
  • 3193 Views

3 个回答

  • Voted
  1. Best Answer
    Karl Katzke
    2009-06-05T06:30:24+08:002009-06-05T06:30:24+08:00

    这可能没有太大帮助,但是最近在Pacemaker和Linux-HA邮件列表中已经对此进行了广泛的讨论。

    我对心跳不是很好,但是对于起搏器,我会设置一个约束,导致集群资源管理器在尝试切换之前用磁盘写锁刷新磁盘(或暂时关闭 mysql),然后释放切换完成后锁定。

    • 2
  2. Dewey
    2009-07-24T20:26:09+08:002009-07-24T20:26:09+08:00

    从我读过的所有内容以及我对心跳的有限经验来看,从一台服务器手动故障转移到另一台服务器所要做的就是发出

    service heartbeat stop
    

    命令。haresources 文件中的所有内容都将由 heartbeat 控制。例如,我正在设置一个需要运行以下服务的集群:

    snmpd
    mysql
    

    这是haresources配置

    localhost00 \
    drbddisk::home \
    Filesystem::/dev/drbd0::/opt/local::ext3::defaults \
    drbddisk::perf \
    Filesystem::/dev/drbd1::/opt/local/perf::ext3::noatime,data=writeback \
    IPaddr::1.1.1.1/24 \
    mysqld \
    snmpd 
    

    这是我得到的结果(如果它是一团糟,我很抱歉,我无法在正确的位置换行):

    [root@localhost00 ~]# service snmpd status
    snmpd (pid 18558) is running...
    [root@localhost00 ~]# service mysqld status
    mysqld (pid 18509) is running...
    [root@localhost00 ~]# service drbd status
    drbd driver loaded OK; device status:
    version: 8.2.6 (api:88/proto:86-88)
    GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-x8664-build, 2008-10-03 11:30:17
    m:res      cs         st                 ds                 p  mounted           fstype
    0:home  Connected  Primary/Secondary  UpToDate/UpToDate  C  /opt/local       ext3
    1:perf  Connected  Primary/Secondary  UpToDate/UpToDate  C  /opt/local/perf  ext3
    [root@localhost00 ~]# service heartbeat stop
    Stopping High-Availability services:
                                                               [  OK  ]
    [root@localhost00 ~]# service snmpd status
    snmpd is stopped
    [root@localhost00 ~]# service mysqld status
    mysqld is stopped
    [root@localhost00 ~]# service drbd status
    drbd driver loaded OK; device status:
    version: 8.2.6 (api:88/proto:86-88)
    GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-x8664-build, 2008-10-03 11:30:17
    m:res      cs         st                   ds                 p  mounted  fstype
    0:home  Connected  Secondary/Secondary  UpToDate/UpToDate  C
    1:perf  Connected  Secondary/Secondary  UpToDate/UpToDate  C
    [root@localhost00 ~]#
    [root@zenoss00 ~]# service heartbeat start
    Starting High-Availability services:
                                                               [  OK  ]
    [root@zenoss00 ~]# service snmpd status
    snmpd is stopped
    [root@zenoss00 ~]# service mysqld status
    mysqld is stopped
    [root@zenoss00 ~]# service drbd status
    drbd driver loaded OK; device status:
    version: 8.2.6 (api:88/proto:86-88)
    GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-x8664-bu
    m:res      cs         st                   ds                 p  mounted  fstype
    0:zenhome  Connected  Secondary/Secondary  UpToDate/UpToDate  C
    1:zenperf  Connected  Secondary/Secondary  UpToDate/UpToDate  C
    [root@zenoss00 ~]# service snmpd status
    snmpd (pid 23055) is running...
    [root@zenoss00 ~]# service mysqld status
    mysqld (pid 23006) is running...
    [root@zenoss00 ~]# service drbd status
    drbd driver loaded OK; device status:
    version: 8.2.6 (api:88/proto:86-88)
    GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-x8664-build, 2008-10-03 11:30:17
    m:res      cs         st                 ds                 p  mounted           fstype
    0:zenhome  Connected  Primary/Secondary  UpToDate/UpToDate  C  /opt/zenoss       ext3
    1:zenperf  Connected  Primary/Secondary  UpToDate/UpToDate  C  /opt/zenoss/perf  ext3
    [root@zenoss00 ~]#
    

    注意停止心跳停止了所有分配给心跳的服务(mysqld,snmpd);还要注意 drbd 仍在运行,并且 heartbeat 并没有停止它。DRBD 需要一直运行才能使故障转移工作。

    再次尝试故障转移,但不要运行 drbd 命令,我认为您将避免数据损坏。

    • 2
  3. 2009-06-03T10:15:44+08:002009-06-03T10:15:44+08:00

    测试心跳的方法是您将在一台机器上发出 service heartbeat stop 并故障转移到另一台机器并自动启动另一个节点上的所有服务,您也不想关闭 drbd 服务。

    另一种测试方法是在一台机器上进行硬重启。

    • 0

相关问题

  • 跨地理位置不同的服务器的 MySQL 复制

  • 从 MySQL 迁移到 SQL Server 的最佳方法或工具

  • 您如何跟踪和调试 mySQL 性能问题?

  • 在 Linux Xen VPS 上优化 Apache 和 MySQL

  • 如何选择 MySQL 数据库引擎

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve