深入探索 MySQL 双主复制:实现高可用性与数据同步

  •  作者简介:我是团团儿,是一名专注于云计算领域的专业创作者,感谢大家的关注
  •  座右铭:   云端筑梦,数据为翼,探索无限可能,引领云计算新纪元
  •  个人主页::团儿.-CSDN博客

前言:

在当今数据驱动的世界中,数据库的高可用性和数据一致性是企业级应用不可或缺的关键要素。MySQL,作为一款开源的关系型数据库管理系统,凭借其灵活性和可扩展性,在各类应用场景中占据了重要地位。而在MySQL的高可用解决方案中,双主复制无疑是一个备受关注的选项。

双主复制允许在两个MySQL服务器之间建立双向的数据同步,每个服务器都可以作为主服务器(Master)提供读写服务,同时作为从服务器(Slave)接收来自另一方的数据更新。这种配置不仅提高了数据库的可用性,还能够在单个服务器故障时实现无缝的故障转移,确保业务连续性。

然而,双主复制并非没有挑战。它要求管理员具备深厚的MySQL知识,以正确配置和管理这种复杂的复制环境。此外,数据冲突、复制延迟和循环复制等问题也是实现和维护双主复制时需要特别关注的方面。

本文旨在深入探讨MySQL双主复制的原理、配置步骤、最佳实践以及潜在问题的解决方案。无论你是初学者还是经验丰富的数据库管理员,都将在本文中找到有价值的信息和实用的建议。让我们一同踏上这段探索之旅,共同揭开MySQL双主复制的神秘面纱。


正文:

1.双主复制:实现和MHA相同的效果

    使用keepalive实现双主热备,防止单点故障的主从结构。
    两台mysql互做主从,各自安装keepalive实现热备,其他从服务器和热备的虚拟IP建立主从连接。

2.开启两台mysql,互相建立主从

前提:

db01: 192.168.8.9
db02: 192.168.8.10
db03: 192.168.8.11

(1)修改配置文件

主库db01:
cat > /etc/my.cnf <<EOF
[mysqld]
basedir=/usr/local/mysql/
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
server_id=1
port=3306
secure-file-priv=/tmp
autocommit=1
log_bin=mysql-bin
binlog_format=row
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
[mysql]
prompt=db01>
EOF
slave1(db02):
cat > /etc/my.cnf <<EOF
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
server_id=2
port=3306
secure-file-priv=/tmp
autocommit=1
log_bin=mysql-bin
binlog_format=row
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
[mysql]
prompt=db02>
EOF
slave2(db03):
cat > /etc/my.cnf <<EOF
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
server_id=3
port=3306
secure-file-priv=/tmp
autocommit=1
log_bin=mysql-bin
binlog_format=row
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
[mysql]
prompt=db03>
EOF


(2) 启动数据库

systemctl restart mysqld

在第一台mysql创建复制用户
grant replication slave on *.* to repl@'192.168.8.%' identified by '123';
在第二台mysql建立和第一台的主从关系
change master to
master_host='192.168.8.9',
master_user='repl',
master_port=3306,
master_password='123' ,
MASTER_AUTO_POSITION=1;
start slave;
在第一台mysql再建立和第二台的主从关系
change master to
master_host='192.168.8.10',
master_user='repl',
master_port=3306,
master_password='123' ,
MASTER_AUTO_POSITION=1;
start slave;
mysql1、mysql2:
show slave status \G    

        ===>查看主从状态

8.9:

8.10:

3.两台服务器安装keepalived

yum -y install keepalived

4.配置mysql1的keepalived

vim /etc/keepalived/keepalived.conf

修改为:

global_defs {
   router_id mysql1
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.8.254
    }
}
virtual_server 192.168.8.254 3306 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP

    real_server 192.168.8.9 3306 {
        weight 1
        TCP_CHECK {
                connect_port 3306
                connect_timeout 3
                retry 3
                delay_before_retry 3
}
}
}

保存退出

启动:

systemctl start keepalived


5.配置mysql2的keepalived

vim /etc/keepalived/keepalived.conf

修改为:

global_defs {
   router_id mysql2
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.8.254
    }
}
virtual_server 192.168.8.254 3306 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP

    real_server 192.168.8.10 3306 {
        weight 1
        TCP_CHECK {
                connect_port 3306
                connect_timeout 3
                retry 3
                delay_before_retry 3
}
}
}

保存退出

启动:

systemctl start keepalived

6.两台服务器查看虚拟IP

ip a show dev ens33

8.9:

8.10:

 

7.开启第三台mysql,与虚拟IP建立主从

CHANGE MASTER TO    
  MASTER_HOST='192.168.8.254',    
  MASTER_USER='repl',    
  MASTER_PASSWORD='123',    
  MASTER_PORT=3306,    
  MASTER_AUTO_POSITION=1;
START SLAVE;

show slave status \G

 注:其他主机ping 192.168.8.254可能会不通,第三个从服务器也无法建立主从;
    keepalived切换几遍,再尝试ping。

测试:

在第一台创建库,分别在第二台主和第三台从查看


期待您的关注~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值