一、概念

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)安装主模块

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

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

MariaDB [(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

MariaDB [(none)]> set global rpl_semi_sync_master_enabled=1;
Query OK, 0 rows affected (0.00 sec)MariaDB [(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)安装从模块

MariaDB [(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

MariaDB [(none)]> set global rpl_semi_sync_slave_enabled=1;
Query OK, 0 rows affected (0.00 sec)MariaDB [(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

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

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

MariaDB [(none)]> show slave status\G;
*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.11.7Master_User: slave01Master_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000002Read_Master_Log_Pos: 473Relay_Log_File: ren8-relay-bin.000004Relay_Log_Pos: 555Relay_Master_Log_File: mysql-bin.000002Slave_IO_Running: YesSlave_SQL_Running: YesReplicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0Last_Error: Skip_Counter: 0Exec_Master_Log_Pos: 473Relay_Log_Space: 1379Until_Condition: NoneUntil_Log_File: Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_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: NoLast_IO_Errno: 0Last_IO_Error: Last_SQL_Errno: 0Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1Master_SSL_Crl: Master_SSL_Crlpath: Using_Gtid: NoGtid_IO_Pos: Replicate_Do_Domain_Ids: Replicate_Ignore_Domain_Ids: Parallel_Mode: conservativeSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_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、测试

转载于:https://www.cnblogs.com/renyz/p/11486646.html

mysql基础之mariadb集群主从架构半同步复制相关推荐

  1. mysql主从复制、基于GTID的主从、半同步

    使用的mysql版本5.7.17 一.主从复制 原理: 主从复制一共有三个进程,从库生成两个线程,一个I/O线程,一个SQL线程: i/o线程去请求主库的binlog,并将得到的binlog日志写到r ...

  2. keepalived mysql双主架构图_MySQL数据库架构和同步复制流程

    在分布式系统里面,往往制约整个系统发展的瓶颈点就是数据库,所以数据库的架构和高可用以及数据库的切分都是我们值得花大力气去学习的. 首先我们来说说数据库的架构. 1.mysql主从架构,如图: 这种架构 ...

  3. mysql半同步和无损复制_mysql主从之半同步复制和lossless无损复制

    一 MySQL 的三种复制方式 1.1 简介 asynchronous 异步复制 fully synchronous 全同步复制 Semisynchronous 半同步复制 从MySQL5.5 开始, ...

  4. MariaDB 10.3 主主半同步复制

    MariaDB主主半同步,也就是两个主从同步都开启半同步复制. 一. MariaDB01主 MariaDB02从  开启半同步复制 1. MariaDB01 主 SET GLOBAL rpl_semi ...

  5. mysql hma 分布式_mysql基础之mariadb集群双主(主主)架构

    一.概念 在企业中,数据库高可用一直是企业的重中之重,中小企业很多都是使用mysql主从方案,一主多从,读写分离等,但是单主存在单点故障,从库切换成主库需要作改动.因此,如果是双主或者多主,就会增加m ...

  6. MySQL 半同步复制+MMM架构

    介绍 上篇文章介绍了MMM架构的实现方法,但是上篇文章的MMM方案的复制是异步复制,异步复制的主要问题在于当主从存在延时时如果主机出现了故障导致了主从切换时这时将会存在数据丢失:mysql为了解决异步 ...

  7. mysql主主复制半同步_mysql主从复制中的半同步复制

    实验mysql借助google提供的插件,完成半同步复制模型: 物理机依然是win7系统,虚拟机为centos7: 主节点:192.168.255.2 从节点:192.168.255.3 先配置为主从 ...

  8. mysql半同步模式_MySQL 半同步复制模式的实现

    半同步复制原理图 #半同步启动需要主从两端都需要加载安装各自对应的semi模块,从库端支持半同步功能的数量至少一台:主库端当一个事务成功提交后,并不及时反馈给前端用户,该线程会被临时block,等待由 ...

  9. mysql 半同步 原理_MySQL半同步复制原理与配置详解

    一 .异步.同步和半同步复制概念 异步复制(Asynchronous replication),MySQL默认的复制是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已 ...

  10. Day267.预约系统的性能瓶颈、营销活动无缝切换秒杀活动、预约系统数据迁移方案、高流量下预约系统搭建熔断机制、预约系统redis集群主从哨兵架构 -Redis的高并发预约抢购系统

    一.预约系统的性能瓶颈 1.预约系统应对热门爆品时的缺陷 用户进行预约会涉及到两个维度的数据变更一个是用户信息,一个是SKU信息,如图↓所示: 正常来说这么搞一点问题没有,即便涉及到写数据库,但是每个 ...

最新文章

  1. [命令技巧]chmod Set-User-ID Set-Group-ID
  2. leetcode C++ 48. 旋转图像 给定一个 n × n 的二维矩阵表示一个图像。 将图像顺时针旋转 90 度。
  3. 由哥倫比亞預防醫學中心想到的
  4. 3493. 最大的和
  5. 编程语言分类 -- 强类型与弱类型、动态类型与静态类型
  6. 台前与幕后的 5G 战争
  7. 边框border(HTML、CSS)
  8. mysql root拿shell_mysql的几种获取shell和提权的方式
  9. SylixOS 任务调度源代码分析
  10. gradle配置阿里Maven仓库
  11. 【教程】如何批量制作线刷包和卡刷包
  12. 关于JFrame添加背景图片,setbounds的小知识
  13. 摔手机问题--第九届蓝桥杯
  14. python中随机生成数字方法
  15. stroj uplink
  16. 用音响里的零件做迷你小机器人_用这些磁性“积木”,搭个迷你机器人|这个设计了不起...
  17. 苹果开放降级_苹果降级对手机有什么坏处
  18. Android Jni 调用
  19. 一个用interproscan做基因注释的简易教程
  20. Kubernetes之健康检查与服务依赖处理

热门文章

  1. C++字符串格式化 sprintf详解
  2. iOS开发UIAlertController之UIAlertAction加图片(UIAlertController按钮加图片)
  3. Disk Drill Enterprise for Mac(数据恢复软件)
  4. MacBook电池健康程度的检查
  5. 【转载】在MySQL登录时出现Access denied for user 'root'@'localhost' (using password: YES) 拒绝访问,并可修改MySQL密码...
  6. Cache【硬盘缓存工具类(包含内存缓存LruCache和磁盘缓存DiskLruCache)】
  7. 电商App如何让用户直接打开商品详情页
  8. 1.2 不停机升级困难
  9. 正则表达式替换字符串
  10. PCoIP卡由火炮升级为喀秋莎