主从复制架构介绍和主从复制配置案例

embedded/2024/12/27 11:07:53/

每一个数据库的业务都对应着一个前端的业务,

主从复制架构的必要性?

 第一点是两个服务器如果有一台服务器出现故障,那么另一台服务器可以正常工作,以保障前端业务可以被正常访问,第二点是两个服务器可以共同去处理数据,提升处理数据的读写操作。

无论是要避免单点故障还是说要提升数据库的数据读写效率。

基本的要求是要保证所有数据库服务器上的数据要是一致的,要是相同的。这样就算挂掉任何一个服务器都不会影响我数据的正常读写操作。

那么如何实现多台数据库服务器之间的数据同步和数据一致。

专业上的名词就是主从复制.

一.主从复制

如上图所示,所谓的主从复制就是主数据库服务器上的数据可以复制给从数据库服务器一份,以此来减少单点故障导致业务停止,以及提升数据的读写效率【缓解单台数据库服务器的数据负载】。

主从复制的工作原理

如上图所示,主服务器的所有写操作,都会被记录到主服务器本地的二进制日志文件中,随后主服务器上会产生一个线程,这个线程负责将主服务器二进制日志文件中的内容,发送到从服务器,随后从服务器会产生一个IO线程,这个线程的工作有两个,第一个工作内容是读取,主服务器发送过来的二进制日志文件的写操作内容,第二个工作是将主服务器发送过来的二进制日志文件内容写到从服务器本地的二进制日志文件中,而从服务器的SQL线程的主要工作有两个,第一个主要工作是将从服务器的二进制日志文件中的写操作内容,读取出来,第二个工作是执行在本地机器,以此保证数据的一致性。

从服务器上的这个日志文件是中继日志,

如何检测主从复制架构配置成功,这主要看从服务器上是否存在两个线程,一个线程是IO线程,一个线程是SQL线程。

主从复制架构的核心关注点就是要确保两个服务器之间的数据同步。

主从复制中一直会有的是时间延迟的问题。

二进制日志文件是用来记录自己机器上发生的写操作的,而从服务器上的中继日志文件是用来记录主服务器上发生的写操作的。

设计主从复制架构的一些准备工作。

1.主服务器上需要开启二进制日志文件用来记录自身的写操作。

2.每一台服务器上都需要有自己的server_ID用来标明自身的身份。

3.从服务器上的IO线程可以到主服务器上去读取二进制日志文件中的写操作内容,那么主服务器上就需要有一个允许从服务器连接主服务器的远程用户。

主从复制架构的作用

1.避免单点故障导致前端业务停止。

2.方便做数据的冷备份,不会影响数据的正常读写【可以把从服务器工作停掉,然后去备份从服务器上的数据。】

3.主从复制架构可以帮助我们缓解单台服务器的工作负载,这种缓解单台服务器的工作负载的方式叫做读写分离。【即在主从复制的结构之上我们可以去配置读写分离。】

对于数据库而言除了写入数据的操作,其他的操作都是读操作。

如上图所示,此时主服务器只负责写操作,从服务器只负责读操作,读写分离一定是在主从复制的架构上实现的。

并且这个主从复制架构构建好之后,只能是主服务器执行写操作,从服务器执行读操作,只能是主服务器往从服务器上同步数据,不可能是从服务器往主服务器上同步数据,【所以在主从复制环境中只能是主服务器执行写操作,从服务器执行读操作。】

读写复制如何在主从架构环境中实现?

读写分离的实现:

1.代码,开发【所有的写操作都是主服务器执行,所有的读操作都是从服务器执行。】

用户名 密码 IP

如果由于我服务性质的变化,我服务器的IP发生了变化,那么代码中相对应的服务器的IP地址也要发生变化。

2.数据库中间件软件

接受前端业务发起的数据库连接。数据库中间件软件能够帮助我们分析前端业务所执行的操作是读操作还是写操作,如果是写操作就由中间件转到主服务器上执行,如果是读操作就由中间件转到从服务器上执行,并且这个数据库中间件软件还能够隐藏我后端数据库软件的信息。不好的地方是如果数据库中间件挂了,数据库服务也就挂了,

数据库中间件软件mysql-proxy,atlas软件由360公司做的二次开发,myCAT软件

读写分离的实现方式:

a.开发代码

b.数据库中间件软件

常见主从复制架构

一主一从

一主多从

双主复制

二.主从复制架构的基本配置

环境描述:

192.168.183.10 Master服务器

192.168.183.11 Slave服务器

场景演示:

一般不会在一个服务一上线的时候,就去配置多台数据库服务器,一般会在这个业务上线一段时间,以后,这个业务起来以后,才会去考虑配置主从复制架构

所以此时有一台服务器已经有了大量的数据,你现在买了一台新的数据库服务器作为从数据库服务器,那么现在要做的工作就是把主数据库服务器做一个完全备份,然后把这个完全备份在从数据库服务器上去执行一遍,此时这个从服务器上就有了主服务器上大致的数据,

此时我们再次去考虑如何减少主服务器将数据复制到从服务器的时间延迟的问题?

所以此时有一台服务器已经有了大量的数据,你现在买了一台新的数据库服务器作为从数据库服务器,那么现在要做的工作就是把主数据库服务器做一个完全备份,然后把这个完全备份在从数据库服务器上去执行一遍,此时这个从服务器上就有了主服务器上大致的数据,

1.关闭防火墙和seLinux,时间同步,设置主服务器的主机名,设置从服务器的主机名。

2.安装mariadb-server数据库,导入jiaowu数据库。

如上图所示,此时主服务器和从服务器提供数据库服务的软件都安装成功。

如上图所示,这是在主服务器上设置数据库软件的启动和开机自启。

如上图所示,刚刚安装的数据库软件是没有密码的,这个-p的选项可以不用写。此时可以将这个数据库文件导入到数据库中。

3.在master服务器上启用server_id,二进制日志文件

如上图所示,启动这个server_id=10,并且设置二进制日志文件名称为master,因为没有指定专门存放二进制日志文件的目录,所以这个二进制日志文件默认是存放在数据库的数据目录下。

随后使用systemctl  restart mariadb来重启数据库服务。

4.在master服务器创建允许从服务器连接的远程用户。

如上图所示,这是在主服务器上创建了一个允许192.168.183.11从服务器远程连接的用户,【创建用户还有授权的操作同时完成。】

5.完全备份master服务器数据,在slave服务器上进行恢复。

如上图所示,这是将master数据库数据,进行完全备份以减少数据库之间进行数据备份时产生的时间延迟,并且使用rsync这个工具,将差异的文件内容,传输到slave服务器上,准备在slave服务器上进行数据恢复。

如上图所示,用mysql -uroot < sql文件,将sql文件中的数据导入到数据库中。

6.在slave服务器上配置server_id

如上图所示,这是在slave服务器的/etc/my.cnf文件中去配置这个slave服务器的server_id=11

如上图所示,随后把服务重启使得配置文件中的内容生效。

7.在slave服务器上连接master服务器

slave服务器连接master服务器的IP地址,连接master服务器的用户名,连接master服务器,用户的密码,连接master服务器的端口,连接master服务器的二进制日志文件名称,【将来这个master主服务器的二进制日志的存放路径无所谓,只需要在slave服务器远程连接master服务器的时候,添加上master服务器的二进制日志文件名称就可以了。】

随后的MASTER_LOG_POS=4,和之前的MASTER_LOG_FILE='master2-bin.001',这两行配置的意思是指示slave服务器从master服务器的哪个二进制日志文件的哪个事件的位置开始复制数据。

如上图所示,可以从完全备份文件的最后部分来看,master数据库服务器所使用的二进制日志文件,以及最后一个事件的结束位置。

如上图所示,这是在slave服务器上做的,此时slave服务器就可以连接master服务器了。

8.启动复制线程

如上图所示,这是在slave服务器上去启动IO和slave线程,

9.在slave服务器上查看复制线程状态

如上图所示,这是在slave服务器上查看复制线程的状态。

如上图所示,此时slave服务器上的IO线程和SQL线程都启动了,这就代表,这个slave服务器和master服务器之间的主从复制架构配置成功了。

如上图所示,这行配置是从服务器上生成的中继日志的名称。

如上图所示,从服务器的中继日志默认是存放在数据目录中。

随后在中继日志中记录事件的最后一个位置是526

如上图所示,这就表示master服务器和slave服务器的数据同步。

上面一行数据表示的是从服务器读取主服务器的最后一个事件的位置,下面一行表示的是从服务器复制数据到哪个事件的位置了。当这两个数字的位置是一致的时候,表示master服务器和slave服务器的数据同步。

如上图所示,这是数值表示的就是从服务器与主服务器之间的时间延迟。

主从复制就叫做AB复制。


http://www.ppmy.cn/embedded/149159.html

相关文章

智能眼镜_AI眼镜基于紫光展锐W517方案定制开发

AI眼镜的国产方案搭载紫光展锐的W517穿戴芯片&#xff0c;该芯片采用12纳米制程技术&#xff0c;采用了1A752.0GHz和3A551.8GHz的大小核架构&#xff0c;配合无级变速系统调度与先进的3D SiP高集成技术&#xff0c;使得整体电路板尺寸较前一代产品缩小了40%。其高阶EPOP封装设计…

【java面向对象编程】第九弹----抽象类、接口、内部类

笔上得来终觉浅,绝知此事要躬行 &#x1f525; 个人主页&#xff1a;星云爱编程 &#x1f525; 所属专栏&#xff1a;javase &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 一、抽象类 1.1基本介绍 &…

flink-1.16 table sql 消费 kafka 数据,指定时间戳位置消费数据报错:Invalid negative offset 问题解决

1 背景 1.使用 flink-1.16 的 table sql 消费 kafka数据&#xff0c;并使用 sql 计算指标&#xff0c;然后写入 doris&#xff1b; 2.指标计算时&#xff0c;需要统计当日数据条数&#xff0c;考虑到作业异常退出被重新拉起时&#xff0c;需要从零点开始消费&#xff0c;所以…

虚幻引擎结构之UWorld

Uworld -> Ulevel ->Actors -> AActor 在虚幻引擎中&#xff0c;UWorld 类扮演着至关重要的角色&#xff0c;它就像是游戏世界的总指挥。作为游戏世界的核心容器&#xff0c;UWorld 包含了构成游戏体验的众多元素&#xff0c;从游戏实体到关卡设计&#xff0c;再到物…

ffmpeg源码分析(九)解协议

本文将聚焦于FFmpeg协议处理模块&#xff0c;以avformat_open_input函数为核心&#xff0c;详细剖析其在最新FFmpeg源码中的实现。 音视频处理流程简介 avformat_open_input概述 avformat_open_input是FFmpeg用于打开输入多媒体数据的关键函数。它通过统一的接口处理多种协议…

详细介绍Sd-WebUI提示词的语法规则

AI绘画中最大的门槛就是提示词&#xff0c;对英语水平、文学水平、想象力、灵感等要求较高。不能每次一输入正向提示词&#xff08;positive prompt&#xff09;&#xff0c;就只会写a girl, big eyes, red hair。虽然sd-webui软件可以直接翻译&#xff0c;输入一个子母后会立刻…

重发布技术

重发布 在路由协议的边界设备上&#xff0c;将某一种路由协议的路由信息引入到另一种路由协议中&#xff0c;这个操作被称为路由引入或者路由重分发。----技术本质为重发布。 条件 必须存在ASBR设备&#xff08;路由边界设备&#xff09;---同时连接两种协议或两个进程&#…

Linux 下的 GPT 和 MBR 分区表详解

在Linux系统中&#xff0c;分区表是描述存储设备上分区布局和属性的一种结构化数据。常见的分区表格式有MBR&#xff08;Master Boot Record&#xff09;和GPT&#xff08;GUID Partition Table&#xff09;。以下是这两种分区表的详解&#xff1a; MBR&#xff08;Master Boot…