MySQL实现高可用:双主互备机制(mysql双主互备)
MySQL实现高可用:双主互备机制
MySQL 高可用主要是为了应对宕机和意外情况等,确保数据安全可用、永久保存的要求。双主互备机制能够有效的满足MySQL的高可用需求。
双主互备机制,在双机结构中,两台机器同时上运行MySQL服务,服务器上分别是主MySQL和备份MySQL,从而实现双机之间数据同步,构建一种可用性高、高可用的MySQL集群。
一台MySQL作为主机,一台作为备份机。主备双机配置不同,一般选择一台高性能服务器作为主机,一台较低性能的服务器作为备份机,这样既能满足MySQL的使用,又能节约设备成本。
双主互备机制实现MySQL高可用,采用MySQL服务器自带复制技术,可以实现主备实时数据同步,实现热备份。复制原理如下:
– 传输数据
主节点会将变更的事件信息传输给备份节点,包括受影响到的行,以及要进行操作的SQL语句;
– 执行sql
备份节点接收到主节点的事件后,会根据主节点的语句执行相应的操作;
– 比较结果
最终主节点比较备份节点的执行结果,对于执行结果不一致的,将再次传输新的操作,知道出现相同的结果;
最后,用户再连接到双机架,如果原来的主服务器失效,备份MySQL服务器可以立即满足请求,支持高效任务运行,达到双机热备一致副本数据,实现MySQL高可用。
双主互备机制用代码如下:
// 指定主服务器
masterHost := “192.168.0.100”
// 主服务器从备份数据拉取
pullDataFromBackup := func(host string, data []byte) {
// 从备用服务器拉取数据
//…
}
// 主服务器推送数据
pushDataToBackup := func(host string, data []byte) {
// 向备用服务器推送数据
//…
}
// 备份服务器拉取主服务器数据
pullDataFromMaster := func(masterHost string, data []byte) {
// 从主服务器拉取数据
//…
}
// 定时任务(每隔1分钟同步一次)
go func() {
timer := time.NewTimer(time.Minute)
for {
data := []byte{}
// 同步数据
pushDataToBackup(masterHost, data)
pullDataFromBackup(masterHost, data)
pullDataFromMaster(masterHost, data)
timer.Reset(time.Minute)
}
}()
双主互备机制,保障MySQL数据的及时同步,获得高可用性。双主备Hot Standby的可用性,容错性,可满足MySQL现有业务对可靠性的要求。