zoukankan      html  css  js  c++  java
  • mysql基础之mysql主从架构半同步复制

    一、概念

    1、异步复制(Asynchronous replication)
      MySQL默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已经接收并处理,这样就会有一个问题,主如果crash掉了,此时主上已经提交的事务可能并没有传到从上,如果此时,强行将从提升为主,可能导致新主上的数据不完整。
    2、全同步复制(Fully synchronous replication)
      指当主库执行完一个事务,所有的从库都执行了该事务才返回给客户端。因为需要等待所有从库执行完该事务才能返回,所以全同步复制的性能必然会收到严重的影响。
    3、半同步复制(Semisynchronous replication)
      介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay log中才返回给客户端。相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟,这个延迟最少是一个TCP/IP往返的时间。所以,半同步复制最好在低延时的网络中使用。

    4、对比

      异步:效率高,安全性低,有延迟
      同步:效率低,安全性高,无延迟
      主:可读可写,(dump thread)
      从:可读不可写 (sql thread, i/o thread)

    二、半同步复制演示

      半同步:N多个从节点中,只要任意一个从节点给主节点返回信息告知自己已经将数据存储成功,那么主节点会立刻给客户端反向执行结果信息。

      (使用插件)

    1、配置主节点(192.168.11.7)

    (1)安装主模块

    mysql [(none)]> install plugin rpl_semi_sync_master soname "semisync_master.so";
    Query OK, 0 rows affected (0.03 sec)

    (2)查看主端有关semi的变量

    mysql [(none)]> show global variables like '%semi%';
    +------------------------------------+--------------+
    | Variable_name                      | Value        |
    +------------------------------------+--------------+
    | rpl_semi_sync_master_enabled       | OFF          |
    | rpl_semi_sync_master_timeout       | 10000        |
    | rpl_semi_sync_master_trace_level   | 32           |
    | rpl_semi_sync_master_wait_no_slave | ON           |
    | rpl_semi_sync_master_wait_point    | AFTER_COMMIT |
    +------------------------------------+--------------+
    5 rows in set (0.01 sec)

    (3)启动rpl_semi_sync_master_enabled

    mysql [(none)]> set global rpl_semi_sync_master_enabled=1;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql [(none)]> show global variables like '%semi%';
    +------------------------------------+--------------+
    | Variable_name                      | Value        |
    +------------------------------------+--------------+
    | rpl_semi_sync_master_enabled       | ON           |
    | rpl_semi_sync_master_timeout       | 10000        |
    | rpl_semi_sync_master_trace_level   | 32           |
    | rpl_semi_sync_master_wait_no_slave | ON           |
    | rpl_semi_sync_master_wait_point    | AFTER_COMMIT |
    +------------------------------------+--------------+
    5 rows in set (0.00 sec)

    2、配置从节点(192.168.11.8)

    (1)安装从模块

    mysql [(none)]> install plugin rpl_semi_sync_slave soname "semisync_slave.so";
    Query OK, 0 rows affected (0.00 sec)

    (2)启动rpl_semi_sync_slave_enabled

    mysql [(none)]> set global rpl_semi_sync_slave_enabled=1;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql [(none)]> show variables like '%semi%';
    +---------------------------------+-------+
    | Variable_name                   | Value |
    +---------------------------------+-------+
    | rpl_semi_sync_slave_enabled     | ON    |
    | rpl_semi_sync_slave_trace_level | 32    |
    +---------------------------------+-------+
    2 rows in set (0.00 sec)

    (3)重启从端slave

    mysql [(none)]> stop slave;
    Query OK, 0 rows affected (0.01 sec)
    
    mysql [(none)]> start slave;
    Query OK, 0 rows affected (0.01 sec)

    (4)查看IO/SQL启动状态

    mysql [(none)]> show slave statusG;
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 192.168.11.7
                      Master_User: slave01
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000002
              Read_Master_Log_Pos: 473
                   Relay_Log_File: ren8-relay-bin.000004
                    Relay_Log_Pos: 555
            Relay_Master_Log_File: mysql-bin.000002
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
                  Replicate_Do_DB: 
              Replicate_Ignore_DB: 
               Replicate_Do_Table: 
           Replicate_Ignore_Table: 
          Replicate_Wild_Do_Table: 
      Replicate_Wild_Ignore_Table: 
                       Last_Errno: 0
                       Last_Error: 
                     Skip_Counter: 0
              Exec_Master_Log_Pos: 473
                  Relay_Log_Space: 1379
                  Until_Condition: None
                   Until_Log_File: 
                    Until_Log_Pos: 0
               Master_SSL_Allowed: No
               Master_SSL_CA_File: 
               Master_SSL_CA_Path: 
                  Master_SSL_Cert: 
                Master_SSL_Cipher: 
                   Master_SSL_Key: 
            Seconds_Behind_Master: 0
    Master_SSL_Verify_Server_Cert: No
                    Last_IO_Errno: 0
                    Last_IO_Error: 
                   Last_SQL_Errno: 0
                   Last_SQL_Error: 
      Replicate_Ignore_Server_Ids: 
                 Master_Server_Id: 1
                   Master_SSL_Crl: 
               Master_SSL_Crlpath: 
                       Using_Gtid: No
                      Gtid_IO_Pos: 
          Replicate_Do_Domain_Ids: 
      Replicate_Ignore_Domain_Ids: 
                    Parallel_Mode: conservative
                        SQL_Delay: 0
              SQL_Remaining_Delay: NULL
          Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
    1 row in set (0.00 sec)
    
    ERROR: No query specified

    3、测试

  • 相关阅读:
    如何查看linux系统是32位还是64位
    netstat 的10个基本用法
    linux入门教程(十) 文档的压缩与打包
    linux入门教程(九) 文本编辑工具vim
    linux入门教程(八) Linux磁盘管理
    linux入门教程(七) linux系统用户以及用户组管理
    CentOS5下配置JDK1.6+TOMCAT6
    【Nodejs】外研社一年级起各年级英语音频下载(缺456年级上)
    【Nodejs】外研社一年级起三年级下MP3下载爬虫1.00
    【Python】torrentParser1.03
  • 原文地址:https://www.cnblogs.com/renyz/p/11486646.html
Copyright © 2011-2022 走看看