zoukankan      html  css  js  c++  java
  • mariadb/mysql 主从架构

    mariadb/mysql 主从架构(主从复制、双主复制、半同步复制)

    • mysql主从复制原理
    • 项目一 主从复制
    • 项目二 主主复制
    • 项目三 半同步复制

    MySQL主从复制原理介绍

    MySQL的主从复制是一个异步的复制过程(虽然一般情况下感觉是实时的),数据将从一个Mysql数据库(我们称之为Master)复制到另一个Mysql数据库(我们称之为Slave),在Master与Slave之间实现整个主从复制的过程是由三个线程参与完成的。其中有两个线程(SQL线程和IO线程)在Slave端,另一个线程(I/O线程)在Master端。

    要实现MySQL的主从复制,首先必须打开Master端的binlog记录功能,否则就无法实现。因为整个复制过程实际上就是Slave从aster端获取binlog日志,然后再在Slave上以相同顺序执行获取的binlog日志中的记录的各种SQL操作

    mariadb/mysql 主从架构(主从复制、双主复制、半同步复制)

    1)在Slave 服务器上执行sart slave命令开启主从复制开关,开始进行主从复制。

    2)此时,Slave服务器的IO线程会通过在master上已经授权的复制用户权限请求连接master服务器,并请求从执行binlog日志文件的指定位置(日志文件名和位置就是在配置主从复制服务时执行change
    master命令指定的)之后开始发送binlog日志内容

    3)Master服务器接收到来自Slave服务器的IO线程的请求后,其上负责复制的IO线程会根据Slave服务器的IO线程请求的信息分批读取指定binlog日志文件指定位置之后的binlog日志信息,然后返回给Slave端的IO线程。返回的信息中除了binlog日志内容外,还有在Master服务器端记录的IO线程。返回的信息中除了binlog中的下一个指定更新位置。

    4)当Slave服务器的IO线程获取到Master服务器上IO线程发送的日志内容、日志文件及位置点后,会将binlog日志内容依次写到Slave端自身的Relay Log(即中继日志)文件(Mysql-relay-bin.xxx)的最末端,并将新的binlog文件名和位置记录到master-info文件中,以便下一次读取master端新binlog日志时能告诉Master服务器从新binlog日志的指定文件及位置开始读取新的binlog日志内容

    5)Slave服务器端的SQL线程会实时检测本地Relay Log 中IO线程新增的日志内容,然后及时把Relay LOG 文件中的内容解析成sql语句,并在自身Slave服务器上按解析SQL语句的位置顺序执行应用这样sql语句,并在relay-log.info中记录当前应用中继日志的文件名和位置点

    项目一 主从复制

    主从复制要点概况
    1. 保证各服务器节点时间同步,可参考[时间同步设置方案](http://www.longma.tk/? p=629 "时间同步设置方案")
    2. 确保server_id不一样 ,主节点开启二进制日志,从节点开启中继日志从节点授权一个账号来完成复制
    3. 主从复制的开始位置:
    • 从服务器从0开始复制?: 如果跑了好几年我们不建议从0恢复,建议使用备份+从指定的二进制日志位置向后复制
    • 主从服务器mysqld程序版本不一致? 建议一致,从的版本号高于主的版本号,一般高版本兼容低版本

    环境介绍

    node1:172.18.43.8 ,Centos7, MariaDB-5.5.44
    node2:172.18.43.88 ,Centos7, MariaDB-5.5.44

    主服务器node1配置
    从服务器node2配置
    测试主从复制是否成功
    复制时应该注意的问题

    项目二 主主复制

    主主复制要点概况(实验步骤已经包含)
    环境介绍

    node1:172.18.43.8 ,Centos7, MariaDB-5.5.44
    node2:172.18.43.88 ,Centos7, MariaDB-5.5.44

    1. 保证各服务器节点时间同步,可参考[时间同步设置方案](http://www.longma.tk/? p=629 "时间同步设置方案")
    2. 初始化环境 node1和 node2 #为保证不受其它实验干扰,建议恢复至初始状态,新装的mariadb即可,不要有其它实验项目干扰

    主服务器node1配置:
    从服务器node2配置:
    测试双主复制是否成功

    项目三 半同步复制

    早前的MySQL复制只能是基于异步来实现,从MySQL-5.5开始,支持半自动复制。在以前的异步(asynchronous)复制中,主库在执行完一些事务后,是不会管备库的进度的。如果备库处于落后,而更不幸的是主库此时又出现Crash(例如宕机),这时备库中的数据就是不完整的。简而言之,在主库发生故障的时候,我们无法使用备库来继续提供数据一致的服务了。Semisynchronous Replication(半同步复制)则一定程度上保证提交的事务已经传给了至少一个备库。Semi synchronous中,仅仅保证事务的已经传递到备库上,但是并不确保已经在备库上执行完成了。

    此外,还有一种情况会导致主备数据不一致。在某个session中,主库上提交一个事务后,会等待事务传递给至少一个备库,如果在这个等待过程中主库Crash,那么也可能备库和主库不一致,这是很致命的。如果主备网络故障或者备库挂了,主库在事务提交后等待10秒
    (rpl_semi_sync_master_timeout的默认值)后,就会继续。这时,主库就会变回原来的异步状态。MySQL在加载并开启Semi-sync插件后,每一个事务需等待备库接收日志后才返回给客户端。如果做的是小事务,两台主机的延迟又较小,则Semi-sync可以实现在性能很小损失的情况下的零数据丢失。

    半同步复制要点概况(实验步骤已经包含)
    环境介绍

    node1:172.18.43.8 ,Centos7, MariaDB-5.5.44
    node2:172.18.43.88 ,Centos7, MariaDB-5.5.44

    1. 保证各服务器节点时间同步,可参考[时间同步设置方案](http://www.longma.tk/? p=629 "时间同步设置方案")
    2. 初始化环境 node1和 node2 #为保证不受其它实验干扰,建议恢复至初始状态,新装的mariadb即可,不要有其它实验项目干扰

    主服务器node1配置:
    从服务器node2配置:

    主服务器从服务器配置完成以后验证一下主从复制:

    半同步配置:

    主节点Node1配置

    从节点Node2配置:

    测试半同步复制是否成功
  • 相关阅读:
    CHIL-SQL-DELETE 语句
    Eclipse 创建新的workspace
    Eclipse 创建新的workspace
    Eclipse 创建新的workspace
    Eclipse 创建新的workspace
    遇见未来 | 对话王璞:谈分布式系统在企业落地的挑战
    onclick事件
    Form插件
    jquery 插件
    深入解析:Row Movement 的原理和性能影响与关联
  • 原文地址:https://www.cnblogs.com/chblogs/p/7113764.html
Copyright © 2011-2022 走看看