搭建 MySQL 一主一从架构并使用 VIP 和半同步复制:
- 安装 MySQL 主库和从库。
- 设置主库的 my.cnf 文件:
[mysqld]
server_id=1 # 主库需要设置不同的 ID,并确保唯一
log-bin=mysql-bin # 开启二进制日志
binlog-format=ROW # 使用 ROW 方式记录二进制日志
log-slave-updates=1 # 记录从库更新操作
- 设置从库的 my.cnf 文件:
[mysqld]
server_id=2 # 从库需要设置不同的 ID,并确保唯一
relay-log=mysql-relay-bin # 设置中继日志文件名
read-only=1 # 设置只读模式
log-slave-updates=1 # 记录从库更新操作
- 启动主库和从库,并在主库中创建一个测试数据库和表,并向表中插入一些数据,以便在后面进行测试:
CREATE DATABASE testdb;
USE testdb;
CREATE TABLE testtable (id INT);
INSERT INTO testtable VALUES (1), (2), (3), (4), (5);
- 在主库中创建用于从库复制的用户,并为其授权:
CREATE USER 'replication'@'%' IDENTIFIED BY 'your_password';
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%';
- 在主库中查看二进制日志文件名及位置:
SHOW MASTER STATUS;
- 在从库中配置主库信息,并启动半同步复制:
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;
- 在主库上测试半同步复制是否生效:
INSERT INTO testdb.testtable VALUES (6);
- 在从库上检查是否已成功复制数据:
SELECT * FROM testdb.testtable;
- 设置 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
}
}
- 启动
keepalived
并验证 VIP 是否已经被正确分配到主库或从库上。
这样,就可以使用 VIP 和半同步方式搭建一个 MySQL 一主一从架构了。