- 作者简介:我是团团儿,是一名专注于云计算领域的专业创作者,感谢大家的关注
- 座右铭: 云端筑梦,数据为翼,探索无限可能,引领云计算新纪元
- 个人主页::团儿.-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。
测试:
在第一台创建库,分别在第二台主和第三台从查看
期待您的关注~