MST

星途 面试题库

面试题:MySQL 中如何利用虚拟 IP 地址实现数据库的高可用性

假设你负责维护一个 MySQL 数据库集群,要求使用虚拟 IP 地址来实现高可用性。请阐述在 Linux 环境下,通过哪些工具和步骤可以配置虚拟 IP 地址,并使其与 MySQL 数据库服务相结合,确保在主数据库出现故障时,从数据库能够迅速接管虚拟 IP 继续提供服务。
22.3万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

1. 工具选择

  • Keepalived:是一个基于VRRP协议(虚拟路由冗余协议)的高可用解决方案,常用于配置虚拟IP并实现服务的高可用切换,适用于MySQL集群这类需要高可用的服务。

2. 配置步骤

安装Keepalived

  • 在CentOS系统上,可使用以下命令安装:
sudo yum install keepalived -y
  • 在Ubuntu系统上,使用以下命令:
sudo apt-get install keepalived -y

配置Keepalived

  • 主节点配置:编辑Keepalived配置文件,通常位于/etc/keepalived/keepalived.conf
vrrp_script check_mysql {
    script "/etc/keepalived/check_mysql.sh"
    interval 2
    weight -20
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0  # 根据实际网络接口修改
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.100  # 虚拟IP地址,根据实际网络段修改
    }
    track_script {
        check_mysql
    }
}
  • 从节点配置:同样编辑/etc/keepalived/keepalived.conf,与主节点配置相比,主要区别在于state设置为BACKUPpriority设置低于主节点。
vrrp_script check_mysql {
    script "/etc/keepalived/check_mysql.sh"
    interval 2
    weight -20
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0  # 根据实际网络接口修改
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.100  # 虚拟IP地址,需与主节点一致
    }
    track_script {
        check_mysql
    }
}

编写MySQL健康检查脚本

  • 在主从节点上创建并编辑/etc/keepalived/check_mysql.sh脚本。
#!/bin/bash
mysqladmin -uroot -p{password} ping &> /dev/null
if [ $? -eq 0 ]; then
    exit 0
else
    exit 1
fi
  • 修改脚本权限,使其可执行:
sudo chmod +x /etc/keepalived/check_mysql.sh

启动并设置开机自启

  • 在主从节点上启动Keepalived服务:
sudo systemctl start keepalived
  • 设置开机自启:
sudo systemctl enable keepalived

3. MySQL 配置

主从复制配置

  • 主节点:编辑MySQL配置文件(通常是/etc/my.cnf),添加或修改以下配置:
server-id=1
log-bin=mysql-bin

重启MySQL服务使配置生效:

sudo systemctl restart mysqld

获取主节点状态,记录FilePosition的值:

SHOW MASTER STATUS;
  • 从节点:编辑MySQL配置文件,添加或修改以下配置:
server-id=2

重启MySQL服务后,配置主从复制:

CHANGE MASTER TO
MASTER_HOST='主节点真实IP',
MASTER_USER='复制用户',
MASTER_PASSWORD='复制用户密码',
MASTER_LOG_FILE='主节点File值',
MASTER_LOG_POS=主节点Position值;

启动从节点复制:

START SLAVE;

检查从节点状态确保复制正常:

SHOW SLAVE STATUS \G;

确保Slave_IO_RunningSlave_SQL_Running都为Yes

这样,通过Keepalived配置虚拟IP并结合MySQL主从复制,就可以在主数据库出现故障时,从数据库迅速接管虚拟IP继续提供服务。