腾讯云国际站代理商:怎样实现数据库主从热备切换?

简介:TG@luotuoemo

本文由腾讯云代理商【聚搜云】撰写

1. 主从复制基础配置

(1)主库配置

  1. 编辑主库的my.cnf配置文件,开启二进制日志并设置唯一的server-id

    ini复制

    [mysqld]
    server-id = 1
    log-bin = mysql-bin
    binlog_format = mixed
    expire_logs_days = 5
    
  2. 重启MySQL服务以应用配置:

    bash复制

    systemctl restart mysql
    
  3. 创建用于复制的用户并授权:

    sql复制

    GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%' IDENTIFIED BY 'password';
    FLUSH PRIVILEGES;
    
  4. 查看主库状态,记录FilePosition值:

    sql复制

    SHOW MASTER STATUS;
    

(2)从库配置

  1. 编辑从库的my.cnf配置文件,设置唯一的server-id

    ini复制

    [mysqld]
    server-id = 2
    
  2. 重启MySQL服务并停止从库复制:

    sql复制

    STOP SLAVE;
    
  3. 使用CHANGE MASTER TO命令配置从库连接到主库:

    sql复制

    CHANGE MASTER TO
    MASTER_HOST='主库IP',
    MASTER_USER='replication_user',
    MASTER_PASSWORD='password',
    MASTER_LOG_FILE='记录的File值',
    MASTER_LOG_POS=记录的Position值;
    
  4. 启动从库复制并检查状态:

    sql复制

    START SLAVE;
    SHOW SLAVE STATUS\G;
    

    确保Slave_IO_RunningSlave_SQL_Running均为Yes

2. 手动切换

在主库故障时,手动切换到从库:

  1. 停止从库的复制:

    sql复制

    STOP SLAVE;
    
  2. 将从库设置为只读模式(可选):

    sql复制

    SET GLOBAL read_only = OFF;
    
  3. 更新应用程序的数据库连接配置,指向新的主库(从库)。

3. 自动切换工具

(1)使用Keepalived实现高可用

Keepalived通过虚拟IP(VIP)实现主从切换,确保客户端连接的连续性。

  1. 在主从库上安装Keepalived:

    bash复制

    yum install keepalived -y
    
  2. 配置主库的keepalived.conf

    ini复制

    vrrp_instance VI_1 {
        state MASTER
        interface eth0
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass chtopnet
        }
        virtual_ipaddress {
            192.168.93.132
        }
    }
    
  3. 配置从库的keepalived.conf

    ini复制

    vrrp_instance VI_1 {
        state BACKUP
        interface eth0
        virtual_router_id 51
        priority 99
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass chtopnet
        }
        virtual_ipaddress {
            192.168.93.132
        }
    }
    
  4. 启动Keepalived服务:

    bash复制

    systemctl enable keepalived
    systemctl start keepalived
    

(2)使用MHA(Master High Availability)

MHA是一个流行的MySQL高可用性解决方案,支持自动故障切换。

  1. 安装MHA Manager和Node:

    bash复制

    yum install mha4mysql-manager mha4mysql-node -y
    
  2. 配置MHA Manager:

    ini复制

    [server_default]
    user=replication_user
    password=password
    master_ip_failover_script=/path/to/master_ip_failover
    [server1]
    hostname=master_ip
    [server2]
    hostname=slave_ip
    
  3. 配置故障切换脚本(如master_ip_failover),用于处理VIP切换。

  4. 启动MHA Manager:

    bash复制

    mha_manager --conf=/path/to/mha.cnf
    

4. 半同步复制

半同步复制可以减少主从延迟,提高数据一致性。

  1. 在主从库上加载半同步插件:

    sql复制

    INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
    INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
    
  2. 启用半同步复制:

    sql复制

    SET GLOBAL rpl_semi_sync_master_enabled = 1;
    SET GLOBAL rpl_semi_sync_slave_enabled = 1;