文章目录
单节点数据库服务问题
单个数据库服务器的缺点
-
数据库服务器存在单点问题;
-
数据库服务器资源无法满足增长的读写请求;
-
高峰时数据库连接数经常超过上限。
如何解决单点问题
-
增加额外的数据库服务器,组建数据库集群;
-
同一集群中的数据库服务器需要具有相同的数据;
-
集群中的任一服务器宕机后,其它服务器可以取代宕机服务器。
mysql集群方案
主从架构
mysql主从架构部署比较简单,常见架构根据主从节点个数不同分成 一主多从,多主一从,双主节点等。
一主多从的主从复制数据库集群架构师最基本也是最常用的一种架构部署,能够满足很多业务需求。本篇博文主要针对该架构进行实操。
优点:
- 数据存在多个镜像和数据冗余,可以防止单一主机的数据丢失,提高数据的安全性。
- 如果使用mysql proxy,在业务上可以实现读写分离。即可以把一些读操作在从服务器上执行,减小主服务器的负担。
- 在从服务器上做数据备份,这样不影响主服务器的正常运行。
- 从服务器可以使用不用的存储引擎,从库上的数据表建立不同的索引,适用不同的业务场景。
缺点
基于mysql主从数据同步方式(异步复制和Mysql5.7新增的半同步复制)会出现数据不一致的问题
主从+Keepalived
高可用架构(扩展)
上述主从架构,master宕机无法进行故障转移。再此基础上可能需要使用引入三方组件来保证服务的高可用。
比如:lVS负载、HaProxy、keepalive等组件。基于上述组件加持的高可用架构有如下解决方案
- LVS+Keepalived+MySQL(有脑裂问题?但似乎很多人推荐这个)
- DRBD+Heartbeat+MySQL(有一台机器空余?Heartbeat切换时间较长?有脑裂问题?)
- MySQL Proxy(不够成熟与稳定?使用了Lua?是不是用了他做分表则可以不用更改客户端逻辑?)
- **MySQL Cluster **(社区版不支持INNODB引擎?商用案例不足?)
- MySQL + MHA(Haproxy)(如果配上异步复制,似乎是不错的选择)
- MySQL + MMM(MMM即Multi-Master Replication Manager for MySQL) (mysql多主复制管理器,基于perl实现,关于mysql主主复制 配置的监控、故障转移和管理的一套可伸缩的脚本套件)
上述高可用架构先埋个坑,有时间再去学习。
总结
对于上述两大类集群架构都涉及到了集群中的多节点数据同步问题,涉及到同步问题需要了解mysql数据复制的类型和数据同步原理。
复制方式的分类
Mysql中支持两种复制方式:基于行的语句的复制(逻辑复制)和基于行的复制。
基于语句的复制
在Mysql5.0之前的版本中只支持基于语句的复制,主库会记录那些造成数据更改的SQL语句,当备库读取并重放这些事件时把主库上执行过的SQL再执行一遍。
优点
- 简单,理论上只需要记录和执行这些SQL语句即可。
- 另一个好处是记录在bin log 文件里的事件比较紧凑不会使用太多的带宽该方式占用存储空间少。
缺点
- 可能存在无法正确复制SQL的现