数据库集群系列(六):MySQL数据库多主一从、多源复制从节点的实现

2024年 7月 12日 46.5k 0

一、基本概念

    MySQL 5.7前只能实现一主一从、一主多从或者多主多从的复制,如果想实现多主一从的复制,只好使用MariaDB,但是MariaDB又与官方的MySQL版本不兼容的,在MySQL 5.7版本可以实现多主一从的复制了
    在 MySQL 集群中,有多种架构方式,包括一主一从、一主多从、多主多从、多主一从,以及其他一些变种。每种架构方式都有其特点和适用场景。

  1. 一主一从(Master-Slave):

  • 主服务器将写操作记录到二进制日志(binlog)。

  • 从服务器连接到主服务器,通过复制进程将主服务器的 binlog 应用到从服务器上。

  • 读写比例不平衡,读操作较多的场景。

  • 提高读性能,通过从服务器分担读负载。

  • 数据备份,从服务器可以用于数据备份。

  • 一个主服务器处理写操作,一个或多个从服务器用于处理读操作。

  • 适用于读操作比写操作多的场景。

  • 主从复制是异步的,主服务器的数据会被异步地同步到从服务器。

  • 一主多从(Master-MultiSlave):

    • 与一主一从相似,主服务器将写操作记录到 binlog,多个从服务器连接到主服务器进行复制。

    • 读操作非常频繁,写操作较少的场景。

    • 分布式读取,通过多个从服务器分担读负载。

    • 数据备份,多个从服务器可以用于数据备份。

    • 一个主服务器处理写操作,多个从服务器用于处理读操作。

    • 适用于高读取、低写入的场景。

    • 主从复制是异步的,主服务器的数据会被异步地同步到多个从服务器。

  • 多主多从(Master-Master,Circular Replication):

    • 每个主服务器都记录自己的 binlog,并通过异步复制将 binlog 同步到其他主服务器。

    • 需要高可用性,任何一个主服务器故障时可以切换到其他主服务器。

    • 读写负载均衡,可以在多个主服务器之间分担读写负载。

    • 多个主服务器,每个主服务器都可以处理读和写操作。

    • 数据可以在多个主服务器之间双向同步。

    • 适用于高可用性和负载均衡的需求。

  • 多主一从(Master-Fanout):

    特点:

    • 多个主服务器并行记录写操作到各自的 binlog,从服务器连接到其中一个主服务器进行复制。

    • 写入频繁,需要水平扩展写性能。

    • 读操作较少,可以通过单个从服务器满足读请求。

    • 数据备份,从服务器用于备份数据。

    • 多个主服务器处理写操作,一个从服务器用于处理读操作。

    • 适用于写操作非常频繁,但读操作相对较少的场景。

    • 读写分离,多个主服务器并行处理写操作,一个从服务器负责读操作。

    主要用于简单部署和测试。但在生产环境中,这种方式可能会导致数据不一致和冲突。仅用于测试和开发环境。不建议在生产环境中使用。

  • 其他方式:

    分片(Sharding):

    • 提供基于 Paxos 算法的多主同步复制。

    • 可以实现高可用性和负载均衡。

    Galera Cluster:

    • 基于同步复制的集群方案,提供多主同步复制。

    • 所有节点之间都是对等的,任何一个节点都可以处理写操作。

    MySQL Group Replication:

    • 将数据按照某个规则划分成多个片段,每个片段存储在独立的数据库节点上。

    • 适用于大规模数据集,可以水平扩展。

        每种架构方式都有其优点和适用场景,选择合适的架构取决于应用程序的需求,例如读写比例、数据量、可用性要求等。

    二、具体实现

    1、将主节点的数据同步到从节点

    可以用navicat手动将表从任一master主机同步过来

    2、配置my.cnf

    server-id=133
    gtid_mode=ON
    enforce-gtid-consistency=ON
    master_info_repository=table
    relay_log_info_repository=table

    3、配置多源复制

    # 复制master1
    mysql> change master to
    master_host='192.168.51.131',
    master_port=3306,
    master_user='root',
    master_password='123456',
    master_auto_position=1
    FOR CHANNEL 'm-131';

    # 复制master2
    mysql> change master to
    master_host='192.168.51.132',
    master_port=3306,
    master_user='root',
    master_password='123456',
    master_auto_position=1
    FOR CHANNEL 'm-132';

    和普通复制不同的是需要增加 FOR CHANNEL ‘xxx’ 语句指定不同的频道复制。由于是多源复制必须指定参数 master_info_repository=table

    4、配置跳过的GTID集合

    #master节点 :
    mysql> flush logs;
    mysql> show global variables like 'gtid_executed' \G
    #slave节点:
    mysql> reset master;
    Query OK, 0 rows affected (0.00 sec)
    mysql> set global gtid_purged='2b095e9d-5d7a-11ed-9a6a-000c296534b2:1-13,e1186686-5e58-11ed-855c-000c29920730:1-4';
    Query OK, 0 rows affected (0.00 sec)
    #启动节点
    mysql> start slave for channel 'm-131';
    #查看某一频道的复制状态
    mysql> show slave status for channel 'm-131' \G
    #启动节点
    mysql> start slave for channel 'm-132';
    mysql> show slave status for channel 'm-132' \G

    配置完成,数据成功同步过来:
    数据库集群系列(六):MySQL数据库多主一从、多源复制从节点的实现-1

    数据库集群系列(六):MySQL数据库多主一从、多源复制从节点的实现-2

      版权声明:本文内容来自CSDN:不吃小龙虾哦,遵循CC 4.0 BY-SA版权协议上原文接及本声明。
      本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
      原文链接:https://blog.csdn.net/shuo_house/article/details/127727769
      如有涉及到侵权,请联系,将立即予以删除处理。
      在此特别鸣谢原作者的创作。
      此篇文章的所有版权归原作者所有,与本公众号无关,商业转载建议请联系原作者,非商业转载请注明出处。

      相关文章

      Oracle如何使用授予和撤销权限的语法和示例
      Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
      下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
      社区版oceanbase安装
      Oracle 导出CSV工具-sqluldr2
      ETL数据集成丨快速将MySQL数据迁移至Doris数据库

      发布评论