View Post
【数据库】mysql数据库MGR特性
一、MGR需要解决的问题
-
支持多节点同时写入,业务无需关注数据冲突
-
自动选主,无需第三方高可用组件
-
数据零丢失
二、MGR概念介绍
MGR提供了single-primary和multi-primary两种模式。single-primary模式下,组内只有一个节点负责写入,读可以从任意一个节点读取,组内数据保持最终一致;而multi-primary模式即为多写方案,即写操作会下发到组内所有节点,组内所有节点同时可读可写,该模式也是能够保证组内数据最终一致性。
注意,一个GR的所有节点必须配置使用同一种模式,不可混用。比如说A、B、C三个节点组成一个GR组,那么要么都运行在single-primary模式下,要么都运行在multi-primary模式下。
三、MGR使用限制
1、仅支持innodb存储引擎
MGR集群中,只支持innodb存储引擎,能够创建非innodb引擎的表,但是无法写入数据,向非innodb表写数据直接报错。
2、表必须有主键,或者非Null的唯一键
MGR集群中,只支持innodb引擎的表,并且该表必须有显式的主键,或者非Null的唯一键,否则即使能够创建表,也无法向表中写入数据。
3、网络限制
MGR 组通信引擎目前仅支持IPv4网络,并且对节点间的网络性能要求较高,低延迟、高带宽的网络是部署MGR集群的基础。
4、MGR忽略表锁和命名锁,在MGR中lock tables、unlock tables、get_lock、release_lock等这些表锁和命名锁将被忽略。
5、MGR多主模式中,默认不支持 SERIALIZABLE 隔离级别。
6、多主模式下,对同一个对象进行并发的有冲突的ddl和dml操作导致这种冲突在部分成员节点中无法检测到,最终可能导致数据不一致。
7、多主模式下,不支持级联约束的外键,可能造成有冲突的操作无法检测。
8、不支持超大事务。
9、多主模式下可能导致死锁,比如select ...for update在不同节点执行,由于多节点锁无法共享,很容易导致死锁。
10、不支持复制过滤,如果有节点设置了复制过滤,将影响节点间决议的达成。
11、MGR最多支持9个节点,大于9个节点,将拒绝新节点的加入。