MySql主从拓展2

Posted sisul

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySql主从拓展2相关的知识,希望对你有一定的参考价值。

mysql架构由小变大的演变过程

第一阶段

网站访问量日pv量级在1w以下。单台机器跑web和db,不需要做架构层调优。此时,数据往往都是每日冷备份的,但有时候如果考虑数据安全性,会搭建一个mysql主从

 

第二阶段

网站访问量日pv达到几万。此时单台机器已经有点负载,需要我们把web和db分开,需要搭建memcached服务作为缓存。也就是说,在这个阶段,我们还可以使用单台机器跑mysql去承担整个网站的数据存储和查询。如果做mysql主从,目的也是为了数据安全性。

 

第三阶段

网站访问量日pv达到几十万。单台机器虽然也可以支撑,但是需要的机器配置要比之前的机器好很多。如果经费允许,可以购买配置很高的机器来跑mysql服务,但是并不是说,配置翻倍,性能也翻倍,到了一定阶段配置增加已经不能带来性能的增加。所以,此阶段,我们会想到做mysql服务的集群,也就是说我们可以拿多台机器跑mysql。但,mysql的集群和web集群是不一样的,我们需要考虑数据的一致性,所以不能简单套用做web集群的方式(lvs,nginx代理)。可以做的架构是,mysql主从,一主多从。为了保证架构的健壮和数据完整,主只能是一个,从可以是多个。
还有一个问题,我们需要想到,就是在前端web层,我们的程序里面指定了mysql机器的ip,那么当mysql机器有多台时,程序里面如何去配置?discuz,其实有一个功能,支持mysql读写分离。即,我们可以拿多台机器跑mysql,其中一台写,其他多台是读,我们只需要把读和写的ip分别配置到程序中,程序自动会去区分机器。当然,如果不使用discuz自带的配置,我们还可以引用一个软件叫做 mysql-proxy, 使用他来实现读写分离。它支持一主多从的模式。

 

第四阶段

网站访问量日pv到几百万。之前的一主多从模式已经遇到瓶颈,因为当网站访问量变大,读数据库的量也会越来越大,我们需要多加一些从进来,但是从的数量增加到数十台时,由于主需要把bin-log全部分发到所有从上,那么这个过程本身就是一件很繁琐的事情,再加上频繁读取,势必会造成从上同步过来的数据有很大延迟。所以,我们可以做一个优化,把mysql原来的一主多从变为一主一从,然后从作为其他从的主,而前面的主只负责网站业务的写入,而后面的从不负责网站任何业务,只负责给其他从同步bin-log。这样还可以继续多叠加几个从库。

 

第五阶段
网站访问量日pv到1千万的时候,我们发现,网站的写入量非常大,我们之前架构中只有一个主,这里的主已经成为瓶颈了。所以,需要再近一步做出调整。比如,我们可以把业务分模块,把用户相关的单独分离出来,把权限、积分等也可以分离出来单独跑一个库,然后再做主从,也就是所谓的分库。当然也可以换一个纬度,把访问量或者写入量大的表单独分离出来,跑在一台服务器上,也可以把一个表分成多个小表。这一步操作,涉及到一些程序上的改动,所以需要事先和开发同事做好沟通和设计。总之,这一步要做的就是分库分表。

 

使用mysql-proxy快速实现mysql集群 读写分离

目前常见的mysql读写分离有两种:

1、基于程序代码内部实现:在代码中对select操作分发到从库;其他操作主库执行;这类方法也是目前生产环境应用最广泛。优点是是性能较好,因为在程序代码中实现,不需要增加额外的设备作为硬件开支。缺点是需要开发人员来实现,运维人员无从下手。

2.基于中间代理层实现:代理一般是位于客户端和服务器之间,代理服务器接到客户端请求后通过判断然后转发到后端数据库。

 

 

 

mycat实现MySQL读写分离mycat是什么

Mycat是一个开源的分布式数据库系统,但是由于真正的数据库需要存储引擎,而Mycat并没有存储引擎,所以并不是完全意义的分布式数据库系统。Mycat是数据库中间件,就是介于数据库与应用之间,进行数据处理与交互的中间服务。对数据进行分片处理之后,从原有的一个库,被切分为多个分片数据库,所有的分片数据库集群构成了整个完整的数据库存储。

Mycat的几个典型的应用场景:

单纯的读写分离,此时配置最为简单,支持读写分离,主从切换;

分表分库,对于超过1000万的表进行分片,最大支持1000亿的单表分片;

多租户应用,每个应用一个库,但应用程序只连接Mycat,从而不改造程序本身,实现多租户化;

表系统,借助于Mycat的分表能力,处理大规模报表的统计;

代替Hbase,分析大数据;

作为海量数据实时查询的一种简单有效方案,比如 100亿条频繁查询的记录需要在3秒内查询出来结果,除了基于主键的查询,还可能存在范围查询或其他属性查询,此时Mycat可能是最简单有效的选择;

单纯的MyCAT读写分离,配置最为简单,支持读写分离,主从切换分表分库,对于超过1000万的表进行分片,最大支持1000亿的单表分片;

多租户应用,每个应用一个库,但应用程序只连接Mycat,从而不改造程序本身,实现多租户化;

报表系统,借助于Mycat的分表能力,处理大规模报表的统计替代Hbase,分析大数据,作为海量数据实时查询的一种简单有效方案,比如100亿条频繁查询的记录需要在3秒内查询出来结果,除了基于主键的查询,还可能存在范围查询或其他属性查询,此时Mycat可能是最简单有效的选择。

以上是关于MySql主从拓展2的主要内容,如果未能解决你的问题,请参考以下文章

prometheus 构建MySQL主从监控

MySql主从拓展2

docker部署django项目mysql主从搭建django实现读写分离

基于MySQL实现数据库的半同步主从复制

MySql主从复制

MySQL主从复制