MySQL双主配置,也称为主主复制(Master-Master Replication),允许两个数据库服务器同时作为主服务器运行,它们之间相互复制数据。这种配置可以提高数据库的可用性和容错能力。结合Keepalived,可以进一步实现高可用性。本文将详细介绍MySQL双主配置,并深入探讨如何使用Keepalived来实现高可用性。

1. MySQL双主配置概述

1.1 双主复制原理

在MySQL双主复制中,两个数据库服务器都可以接收写操作,并且会自动将更改复制到对方。这样,当一个数据库服务器出现故障时,另一个数据库服务器可以立即接管,确保数据的可用性。

1.2 配置要求

  • 两台MySQL服务器,配置为相同的版本和参数。
  • 两台服务器之间可以相互通信。
  • 每台服务器都有一个唯一的IP地址。

2. MySQL双主配置步骤

2.1 安装和配置MySQL

  1. 在两台服务器上安装MySQL。
  2. 配置MySQL的my.cnf文件,确保以下设置:
[mysqld]
server-id = 1
log-bin = /var/log/mysql/binlog
binlog-format = ROW
sync_binlog = 1

2.2 配置复制用户

  1. 在每台服务器上创建一个用于复制的用户:
CREATE USER 'replication_user'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%';
FLUSH PRIVILEGES;
  1. 将复制用户权限同步到另一台服务器:
-- 在第一台服务器上执行
mysql -h 192.168.1.2 -u replication_user -ppassword -e "GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%'"

2.3 配置主主复制

  1. 在第一台服务器上设置为主服务器:
STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='192.168.1.2', MASTER_USER='replication_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=4;
START SLAVE;
  1. 在第二台服务器上设置为主服务器:
STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='192.168.1.1', MASTER_USER='replication_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=4;
START SLAVE;

3. Keepalived实现高可用性

3.1 安装和配置Keepalived

  1. 在两台服务器上安装Keepalived。
# 安装命令根据操作系统不同而有所不同
  1. 配置Keepalived的vrrp配置文件(/etc/keepalived/keepalived.conf):
vrrp_script chk_mysql {
    script "/usr/local/bin/check_mysql.sh"
    interval 5
}

vrrp_instance VI_1 {
    state master
    interface eth0
    virtual_rtr 192.168.1.100
    virtual_ipaddress 192.168.1.101
    track_script {
        chk_mysql
    }
}

3.2 编写检查脚本

创建一个名为check_mysql.sh的脚本,用于检查MySQL服务是否运行:

#!/bin/bash
if [ $(pgrep -x mysql | wc -l) -eq 0 ]; then
    echo "MySQL service is not running"
    exit 2
else
    echo "MySQL service is running"
    exit 0
fi

确保脚本具有执行权限:

chmod +x /usr/local/bin/check_mysql.sh

3.3 启动Keepalived

在两台服务器上启动Keepalived服务:

systemctl start keepalived

4. 总结

通过以上步骤,您已经成功配置了MySQL双主配置并使用Keepalived实现了高可用性。当一台MySQL服务器出现故障时,另一台服务器将自动接管虚拟IP地址,确保数据库服务的连续性。