MySQL 双主双从配置+Keepalived

MySQL双主双从与Keepalived配置

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
 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值