mysql cluster 架 构说明

mysql cluster 架 构说明_第1张图片

1.MySQL中间件:对MySQL Server的读写操作进行路由(即读写分离);分库分表(sharding)

  • (1).MySQL Router:MySQL官方提供的轻量级MySQL代理(路由),只提供读写分离功能,前身为SQL Proxy。
  • (2).ProxySQL:类似于MySQL Router,轻量级MySQL代理,提供读写分离功能,也支持一些sharding功能。有percona版和官方版两个版本。
  • (3).MaxScale:MariaDB的中间件,和MySQL Router、ProxySQL类似。
    • 这三者类似,都是轻量级数据库中间件。
  • (4).Amoeba、Cobar、MyCAT:提供很多功能,最主要的功能包括读写分离、sharding。
    • 这三者的渊源较深,都是开源的。Amoeba后继无人,于是Cobar出来,Cobar后继无人,加上2013年出现了一次较严重的问题,于是MyCAT站在Cobar的肩膀上出来了。

2.MySQL主从复制的高可用:至少要实现主从切换或故障时选举新master节点

  • (1).MMM:淘汰了,在一致性和高并发稳定性等方面有些问题。
  • (2).MHA:有些人还在用,但也有些问题,也是趋于淘汰的MySQL主从高可用方案。
  • (3).Galera:引领时代的主从复制高可用技术。
  • (4).MariaDB Galera Cluster:MariaDB对Galera的实现。
  • (5).PXC:Percona XtraDB Cluster,是Percona对Galera的自我实现,用的人很多。
  • (6).GR:Group Replication,MySQL官方提供的组复制技术(MySQL 5.7.17引入的技术),基于Paxos算法。
    • MariaDB Galera Cluster、PXC、GR是类似的,都各有优点。但GR是革命性的,基于原生复制技术,据传很多方面都优于PXC。
    • MariaDB Galera Cluster、PXC、GR为了安全性和性能考虑,做出了很多强制性的限制。例如基于GTID复制、只能InnoDB表,每表都必须有主键等。要使用它们提供主从复制的高可用,必须要了解它们的各项限制。

PXC(Percona XtraDB Cluster)特性和优缺点介绍

Percona XtraDB Cluster是MySQL高可用性和可扩展性的解决方案.
Percona XtraDB Cluster提供的特性有:
1.同步复制,事务要么在所有节点提交或不提交。
2.多主复制,可以在任意节点进行写操作。
3.在从服务器上并行应用事件,真正意义上的并行复制。
4.节点自动配置。
5.数据一致性,不再是异步复制。
Percona XtraDB Cluster完全兼容MySQL和Percona Server,表现在:
1.数据的兼容性
2.应用程序的兼容性:无需更改应用程序
 
1.集群是有节点组成的,推荐配置至少3个节点,但是也可以运行在2个节点上。
2.每个节点都是普通的mysql/percona服务器,可以将现有的数据库服务器组成集群,反之,也可以将集群拆分成单独的服务器。
3.每个节点都包含完整的数据副本。
优点如下:
1.当执行一个查询时,在本地节点上执行。因为所有数据都在本地,无需远程访问。
2.无需集中管理。可以在任何时间点失去任何节点,但是集群将照常工作。
3.良好的读负载扩展,任意节点都可以查询。
缺点如下:
1.加入新节点,开销大。需要复制完整的数据。
2.不能有效的解决写缩放问题,所有的写操作都将发生在所有节点上。
3.有多少个节点就有多少重复的数据。

Percona XtraDB Cluster与MySQL Replication区别在于:
分布式系统的CAP理论。
C---一致性,所有节点的数据一致。
A---可用性,一个或多个节点失效,不影响服务请求。
P---分区容忍性,节点间的连接失效,仍然可以处理请求。
任何一个分布式系统,需要满足这三个中的两个。
MySQL Replication: 可用性和分区容忍性
Percona XtraDB Cluster: 一致性和可用性
因此MySQL Replication并不保证数据的一致性,而Percona XtraDB Cluster提供数据一致性。
Percona XtraDB Cluster组件:
Percona XtraDB Cluster基于XtraDB的Percona Server以及包含写复制集补丁。使用Galera 2.x library,事务型应用下的通用的多主同步复制插件。
Galera 2.x新特性有:
1.IST(Incremental State Transfer)增量状态传输。对于WAN特别有用。
2.RSU(Rolling Schema Update)旋转更新架构。不会阻止对表进行操作。

MariaDB Galera Cluster集群优缺点

1.简述:

MariaDB Galera Cluster 是一套在mysql innodb存储引擎上面实现multi-master及数据实时同步的系统架构,业务层面无需做读写分离工作,数据库读写压力都能按照既定的规则分发到 各个节点上去。在数据方面完全兼容 MariaDB 和 MySQL。

2.特性:

(1).同步复制 Synchronous replication
(2).Active-active multi-master 拓扑逻辑
(3).可对集群中任一节点进行数据读写
(4).自动成员控制,故障节点自动从集群中移除
(5).自动节点加入
(6).真正并行的复制,基于行级
(7).直接客户端连接,原生的 MySQL 接口
(8).每个节点都包含完整的数据副本
(9).多台数据库中数据同步由 wsrep 接口实现

3.局限性:

(1).目前的复制仅仅支持InnoDB存储引擎,任何写入其他引擎的表,包括mysql.*表将不会复制,但是DDL语句会被复制的,因此创建用户将会被复制,但是insert into mysql.user…将不会被复制的.
(2).DELETE操作不支持没有主键的表,没有主键的表在不同的节点顺序将不同,如果执行SELECT…LIMIT… 将出现不同的结果集.
(3).在多主环境下LOCK/UNLOCK TABLES不支持,以及锁函数GET_LOCK(), RELEASE_LOCK()…
(4).查询日志不能保存在表中。如果开启查询日志,只能保存到文件中。
(5).允许最大的事务大小由wsrep_max_ws_rows和wsrep_max_ws_size定义。任何大型操作将被拒绝。如大型的LOAD DATA操作。
(6).由于集群是乐观的并发控制,事务commit可能在该阶段中止。如果有两个事务向在集群中不同的节点向同一行写入并提交,失败的节点将中止。对 于集群级别的中止,集群返回死锁错误代码(Error: 1213 SQLSTATE: 40001 (ER_LOCK_DEADLOCK)).
(7).XA事务不支持,由于在提交上可能回滚。
(8).整个集群的写入吞吐量是由最弱的节点限制,如果有一个节点变得缓慢,那么整个集群将是缓慢的。为了稳定的高性能要求,所有的节点应使用统一的硬件。
(9).集群节点建议最少3个。
(10).如果DDL语句有问题将破坏集群。

 

PXC主要参数说明及运维实践

  • wsrep_flow_control_paused
    这个变量标识当前节点落后于集群的程度,0.0-1.0,0.0为没有落后,1.0为flow control已经停止了。应该尽量保证这个变量值为0.0。 如果落后实在太厉害,则应该适当增加复制线程数wsrep_slave_threads,如果还没有改善,则应该从集群中删除最慢的节点。
  • wsrep_cert_deps_distance
    这个变量标识当前节点平均时间内并行执行的事务数,这个数据可以用来作为wsrep_slave_threads的参考,同时当并发量很高的时候,这个数值也会很大。srep_cert_deps_distance的值,与集群的稳定性息息相关。在当时的测试情况下,当该值超过1300,则集群崩溃的可能性非常大。
  • wsrep_flow_control_sent
    表示flow_control发出FC_PAUSE事件的次数,暂停的次数越多,表示接受到的请求频繁堵满slave队列,这种情况下不是队列长度不足,就是机器性能太差。(如果集群中多个机器都有 这个情况,则考虑调整slave队列长度的相关参数,如gcs.fc_limit等)
  • wsrep_local_recv_queue_avg
    这个参数表示本地节点平均的接收队列长度,如果这个参数不为0.0,则表示接收来的数据不能被及时应用(立即应用了则不会进入队列)。
  • wsrep_local_send_queue_avg
    这个参数表示本地节点发送数据的队列长度,如果这个参数不为0.0,则表示向外发送数据的速度比较慢,有堆积。
  • wsrep_slave_threads
    建议每个core启动4个复制线程,这个参数很大程度上受到I/O能力的影响,官方甚至在ThinkPad R51一个4200转硬盘、单核心的机器上设置32个线程,并且执行良好。 可以通过观察wsrep_cert_deps_distance这个状态变量来获得当前最佳的线程数,这个参数实际上表示单位时间平均多少个writesets能被执行掉。
  • wsrep_provider_options:gcs.fc_limi、gcs.fc_factor
    此变量用于复制流量控制。当从队列超过此限制时复制暂停或被取消。
  • wsrep_flow_control_paused_ns
    由于业务压力导致集群停止服务总共的时间(纳秒)
  • wsrep_flow_control_paused
    自从由于流量控制而暂停的最后状态查询以来的时间。
  • wsrep_flow_control_sent
    由于业务压力导致由本节点发送流量控制而暂停的次数
  • wsrep_flow_control_recv
    本节点接收到由于业务压力导致流量控制而暂停的次数

你可能感兴趣的:(mysql)