分布式与高可用
765 字3 分钟interview-questions
分布式与高可用
MySQL Cluster 是什么?
MySQL Cluster 是基于 NDB 存储引擎的一套分布式集群方案,它和常见的 MySQL 集群的那种主库写数据 —— binlog —— 从库异步/半同步复制,读写分离的方案不太一样,那种其实就是一份主库加上多个备份
而 MySQL Cluster 使用的是 NDB 存储引擎,它将节点分为数据节点、SQL 节点和管理节点三种,数据被按照分片分布在多个数据节点上,每个数据节点都会有多个副本,会自动分片、自动副本同步,通过 SQL 节点对外提供标准的 MySQL 查询,收到请求后再去数据节点上拿数据,背后是共享无架构的同步复制
数据通常是内存为主 + 磁盘持久化,新增数据节点时会重新平衡数据,任意一个节点挂了,只要副本还在,集群就还能继续工作,它也支持分布式的事务,适合低延迟的实时场景,以及一些对高可用和高并发写要求极高的业务,但它的运维复杂度会比主从复制 + InnoDB 那套高不少
如果现在有一个有十亿数据量的大表需要分表,该怎么做?分表之后怎么切业务?
如果数据量变成原来的十倍,该怎么办?
MySQL 和 redis 的缓存一致性该如何保证?**
主从同步的机制是什么样的?是哪些操作会同步哪些操作不会同步?
MySQL 的主从复制模型主要有三种:
同步复制,主库提交事务的线程要等待所有从库的复制成功响应之后才会返回响应给客户端,这种模式下性能和可用性都会比较差
异步复制(默认模型),主库提交事务的线程并不会等待 binlog 同步到各个从库,而是直接返回响应给客户端,这种模式下性能和可用性都比较好,但会存在数据丢失的风险,例如主库宕机的情况下
半同步复制,介于同步和异步之间,主库提交事务的线程只需要等待至少一个从库的复制成功响应之后才会返回响应给客户端,这种模式下性能和可用性都比较好,同时也降低了数据丢失的风险,兼顾了异步和同步的优点