搭建 MySQL 一主一从架构并使用 VIP 和半同步复制:

  1. 安装 MySQL 主库和从库。
  2. 设置主库的 my.cnf 文件:
[mysqld]
server_id=1 # 主库需要设置不同的 ID,并确保唯一
log-bin=mysql-bin # 开启二进制日志
binlog-format=ROW # 使用 ROW 方式记录二进制日志
log-slave-updates=1 # 记录从库更新操作
  1. 设置从库的 my.cnf 文件:
[mysqld]
server_id=2 # 从库需要设置不同的 ID,并确保唯一
relay-log=mysql-relay-bin # 设置中继日志文件名
read-only=1 # 设置只读模式
log-slave-updates=1 # 记录从库更新操作
  1. 启动主库和从库,并在主库中创建一个测试数据库和表,并向表中插入一些数据,以便在后面进行测试:
CREATE DATABASE testdb;
USE testdb;
CREATE TABLE testtable (id INT);
INSERT INTO testtable VALUES (1), (2), (3), (4), (5);
  1. 在主库中创建用于从库复制的用户,并为其授权:
CREATE USER 'replication'@'%' IDENTIFIED BY 'your_password';
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%';
  1. 在主库中查看二进制日志文件名及位置:
SHOW MASTER STATUS;
  1. 在从库中配置主库信息,并启动半同步复制:
CHANGE MASTER TO 
  MASTER_HOST='primary_host',
  MASTER_USER='replication',
  MASTER_PASSWORD='your_password',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='mysql-bin.000001', # 此处需根据上一步显示的结果来配置
  MASTER_LOG_POS=154; # 此处需根据上一步显示的结果来配置

INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
SET GLOBAL rpl_semi_sync_master_enabled = 1;
  1. 在主库上测试半同步复制是否生效:
INSERT INTO testdb.testtable VALUES (6);
  1. 在从库上检查是否已成功复制数据:
SELECT * FROM testdb.testtable;
  1. 设置 VIP 地址,并在主库和从库上启动并启用
# 主库配置
vrrp_script chk_mysql {
   script "/usr/local/mysql/bin/mysqlchk.sh"
   interval 2
}

vrrp_instance VI_1 {
     interface eth0
     
     state MASTER
     virtual_router_id 51
     priority 101
     
     virtual_ipaddress {
         192.168.1.100
     }
     
     track_script {
         chk_mysql
     }
}

# 从库配置
vrrp_script chk_mysql {
   script "/usr/local/mysql/bin/mysqlchk.sh"
   interval 2
}

vrrp_instance VI_1 {
     interface eth0
     
     state BACKUP
     virtual_router_id 51
     priority 100
     
     virtual_ipaddress {
         192.168.1.100
     }
     
     track_script {
         chk_mysql
     }
}
  1. 启动 keepalived 并验证 VIP 是否已经被正确分配到主库或从库上。

这样,就可以使用 VIP 和半同步方式搭建一个 MySQL 一主一从架构了。