MySQL 双主双从配置
以下是使用两台机器(10.0.0.250和10.0.0.251)配置MySQL双主复制,并使用myslave用户(密码123456)的详细步骤:
1. 修改MySQL配置文件
在10.0.0.250和10.0.0.251上修改my.cnf(或my.ini):
[mysqld] # 现有配置保持不变... user = mysql basedir=/usr/local/mysql datadir=/usr/local/mysql/data port = 3306 character-set-server=utf8 pid-file = /usr/local/mysql/mysqld.pid socket=/usr/local/mysql/mysql.sock bind-address = 0.0.0.0 skip-name-resolve max_connections=2048 default-storage-engine=INNODB max_allowed_packet=16M sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES # 以下是新增的复制关键参数(双主必需): server-id = 1 # 10.0.0.251 改为 server-id = 2(必须唯一) log-bin = mysql-bin # 启用二进制日志 binlog-format = ROW # 推荐使用ROW格式 binlog-row-image = FULL # 记录完整的行数据 log-slave-updates = ON # 从库也记录binlog(双主必需) auto-increment-increment = 2 # 自增步长(双主设为2) auto-increment-offset = 1 # 10.0.0.251 改为 offset = 2 replicate-same-server-id = 0 # 禁止复制自己的事件 slave-skip-errors = 1062 # 跳过主键冲突错误 sync_binlog = 1 # 每次事务提交都同步binlog(数据安全) binlog_group_commit_sync_delay = 100 # 组提交优化 binlog_group_commit_sync_no_delay_count = 10

2. 重启MySQL服务
在两台服务器上执行:
systemctl restart mysqld # 或 service mysql restart
3. 创建复制用户
在两台服务器上分别执行以下SQL命令:
CREATE USER 'myslave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'%'; FLUSH PRIVILEGES;

4. 获取主库二进制日志位置
在两台服务器上分别执行:
SHOW MASTER STATUS;
记录下File和Position的值

5. 配置主从关系
在10.0.0.250/10.0.0.251上执行:
CHANGE MASTER TO
MASTER_HOST='10.0.0.251',
MASTER_USER='myslave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='[251的File值]',
MASTER_LOG_POS=[251的Position值];
然后启动
START SLAVE;
6. 验证复制状态
在两台服务器上执行:
SHOW SLAVE STATUS\G
检查以下关键字段:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes


7.2. 安装Keepalived
yum install -y keepalived
二、主备节点配置
1. 主节点配置(10.0.0.250)
创建配置文件 /etc/keepalived/keepalived.conf:
! Configuration File for keepalived
global_defs {
router_id MYSQL_HA_250 # 唯一标识
}vrrp_script chk_mysql {
script "/usr/local/bin/chk_mysql.sh" # 健康检查脚本
interval 2 # 每2秒检查一次
weight 2 # 优先级加减分值
}vrrp_instance VI_1 {
state MASTER # 初始状态
interface eth0 # 网卡名称(ifconfig查看)
virtual_router_id 51 # 虚拟路由ID(集群内唯一)
priority 101 # 优先级(主高于备)
advert_int 1 # 检查间隔(秒)
authentication {
auth_type PASS
auth_pass 1111 # 密码(集群内一致)
}
virtual_ipaddress {
10.0.0.100/24 # 虚拟IP
}
track_script {
chk_mysql # 关联健康检查
}
notify_master "/usr/local/bin/notify_master.sh"
notify_backup "/usr/local/bin/notify_backup.sh"
notify_fault "/usr/local/bin/notify_fault.sh"
}
2. 备节点配置(10.0.0.251)
! Configuration File for keepalived
global_defs {
router_id MYSQL_HA_251
}
vrrp_script chk_mysql {
script "/usr/local/bin/chk_mysql.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
state BACKUP # 初始为备
interface eth0
virtual_router_id 51 # 必须与主节点相同
priority 100 # 低于主节点
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.100/24
}
track_script {
chk_mysql
}
notify_master "/usr/local/bin/notify_master.sh"
notify_backup "/usr/local/bin/notify_backup.sh"
notify_fault "/usr/local/bin/notify_fault.sh"
}
3. 启动服务(两台服务器)
systemctl start keepalived
systemctl enable keepalived
2. 验证VIP分配
在主节点执行:
ip addr show eth0
应该能看到类似输出:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
inet 10.0.0.250/24 brd 10.0.0.255 scope global eth0
inet 10.0.0.100/24 scope global secondary eth0
3. 故障转移测试
# 在主节点停止MySQL
systemctl stop mysqld# 观察VIP是否漂移到备节点(约3-5秒)
tail -f /var/log/messages# 备节点检查VIP
ip addr show eth0
MySQL双主双从与Keepalived配置

1万+

被折叠的 条评论
为什么被折叠?



