帮助中心/最新通知

质量为本、客户为根、勇于拼搏、务实创新

< 返回文章列表

【服务器相关】MySQL复制架构的搭建及配置过程

发表时间:2025-06-16 03:46:00 小编:主机乐-Yutio

一主多从复制架构

在实际应用场景中,MySQL复制90%以上都是一个Master复制到一个或者多个Slave的架构模式。

在主库读取请求压力非常大的场景下,可以通过配置一主多从复制架构实现读写分离,把大量的对实时性要求不是特别高的读请求通过负载均衡分部到多个从库上(对于实时性要求很高的读请求可以让从主库去读),降低主库的读取压力,如下图所示。

image-20220209184742760

缺点:

  • master不能停机,停机就不能接收写请求
  • slave过多会出现延迟

由于master需要进行常规维护停机了,那么必须要把一个slave提成master,选哪一个是一个问题?

某一个slave提成master了,就存在当前master和之前的master数据不一致的情况,并且之前master并没有保存当前master节点的binlog文件和pos位置。

多主复制架构

多主复制架构解决了一主多从复制架构中master的单点故障问题。

image-20220209184852022

可以配合一个第三方的工具,比如keepalived轻松做到IP的漂移,这样master停机维护也不会影响写操作。

级联复制架构

一主多从中如果slave过多,会导致主库的I/O压力和网络压力会随着从库的增加而增长,因为每个从库都会在主库上有一个独立的BINLOG Dump线程来发送事件,而级联复制架构解决了一主多从场景下的,主库额外的I/O和网络压力。

如下图所示。

image-20220209184936703

对比一主多从的架构,级联复制仅仅是从主库Master复制到少量的从库,其他从库再从这少量的从库中复制数据,这样就减轻了主库Master的压力。

当然也有缺点:MySQL的传统复制是异步的,级联复制场景下主库的数据是经历两次复制才到达其他从库中,期间的延迟要比一主多从复制场景下只经历一次复制的还大。

可以通过在二级slave上选择表引擎为BLACKHOLE来降低级联复制的延迟。顾名思义,BLACKHOLE引擎是一个“黑洞”引擎,写入BLACKHOLE表的数据并不会写会到磁盘上,BLACKHOLE表永远都是空表,INSERT、UPDATE、DELETE操作仅仅在BINLOG中记录事件。

下面演示下BLACKHOLE引擎:

image-20220209185030818

多主复制架构的搭建

主机规划:

  • master1:docker,端口3314
  • master2:docker,端口3315

master1的配置

配置文件my.cnf:

image-20220209185303569

这里借助keepalived来对上面的多主复制架构改造来实现MySQL的高可用。

keepalived的安装:


$ sudo apt-get install -y keepalived

keepalived.conf


$ cat /etc/keepalived/keepalived3314.conf
! Configuration File for keepalived
#简单的头部,这里主要可以做邮件通知报警等的设置,此处就暂不配置了;
global_defs {
#notificationd LVS_DEVEL
}
#预先定义一个脚本,方便后面调用,也可以定义多个,方便选择;
vrrp_script chk_haproxy {
script “/etc/keepalived/chkmysql.sh”#具体脚本路径
interval 2#脚本循环运行间隔
}
#VRRP虚拟路由冗余协议配置
vrrp_instance VI_1 { #VI_1 是自定义的名称;
state BACKUP#MASTER表示是一台主设备,BACKUP表示为备用设备【我们这里因为设置为开启不抢占,所以都设置为备用】
nopreempt#开启不抢占
interface eth0 #指定VIP需要绑定的物理网卡
virtual_router_id 11 #VRID虚拟路由标识,也叫做分组名称,该组内的设备需要相同
priority 130 #定义这台设备的优先级 1-254;开启了不抢占,所以此处优先级必须高于另一台

advert_int 1 #生存检测时的组播信息发送间隔,组内一致
authentication {#设置验证信息,组内一致
auth_type PASS #有PASS 和 AH 两种,常用 PASS
auth_pass asd#密码
}
virtual_ipaddress {
172.23.252.200#指定VIP地址,组内一致,可以设置多个IP
}
track_script {#使用在这个域中使用预先定义的脚本,上面定义的
chk_haproxy
}

#notify_backup “/etc/init.d/haproxy restart” #表示当切换到backup状态时,要执行的脚本
#notify_fault “/etc/init.d/haproxy stop” #故障时执行的脚本
}

/etc/keepalived/chkmysql.sh


$ cat /etc/keepalived/chkmysql.s.sh
#!/bin/bash

mysql -uroot -proot -P 3314 -e “show status;” > /dev/null 2>&1
if [ $? == 0 ];
then
echo “$host mysql login successfully”
exit 0
else
echo “$host login failed”
killall keepalived
exit 2
fi

到此这篇关于MySQL复制架构的文章就介绍到这了,更多相关MySQL复制架构内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!


联系我们
返回顶部