架构技术之分布式数据存储(上)

一、MySQL复制,主从复制

MySQL的主从复制,就是将MySQL主数据库中的数据复制到从数据库中去,主要的目的是实现数据库读写分离-写操作访问主数据库,读操作访问从数据库。从而是数据库具有更强大的访问负载力,支撑更多的用户访问。

主从复制的原理是当应用程序客户端发送一条更新命令到数据库的时候,数据库会把这条更新命令同步记录到Binglog中,然后由另外一个线程从Binglog中读取这条日志,再通过远程通讯的方式将它复制到从服务器上面,从服务器获得这条更新日志日后,将其加入到自己的Relaylog中,然后由另外一个SQL执行线程从Relaylog中读取这条新的日志,并把它在本地的数据库中重新执行一遍,这样当客户端应用程序执行一个update命令的时候,这个命令就会在主数据库和从数据库上同步执行,从而实现了主数据库向从数据库的复制。让从数据库和主数据库保持数据一致性。

一主多从复制

MySQL的主从复制是一种数据同步机制,除了可以将一个主数据库中的数据同步复制到一个从数据库上,还可以将一个主数据库上的数据同步复制到多个从数据库上,也就是一主多从的复制,多个从数据库关联到主数据库后,将主数据库上的Binglog日志同步复制到多个从数据库上,通过执行日志,每个从数据库的数据都和主数据库上的数据保持一致。

一主多从的优点:分摊负载、专机专用、便于冷备、高可用

1)、分摊负载,将只读操作分布在多个从数据库上,从而将负载分摊到多台服务器上,一般来说,对数据库做主从复制的时候,通常是进行读写分离,数据库的写操作会连接到主数据库上进行,而数据的读操作连接到从服务器上进行,这样把读写两部分操作分别交给不同的服务器去处理,降低数据库的负载压力,而使用更多的从数据库向应用程序提供读服务,更好的减轻整个数据库的访问压力。

2)、专机专用,可以针对不同类型的查询,使用不同的从服务器,比如有一台服务器专门用来做应用程序的读操作,另一个服务器专门用来执行数据报表类的操作,还有的服务器专门执行数据备份。通过这样的方式,将不同的操作连接到不同的从数据库上,从而实现了专机专用,也提高了用户体验。

3)、便于冷备,通常很多公司会对数据做冷备,把历史上的数据全部备份下来,把它存储到另外一个地方,当发生意外灾难的时候,所有的数据都丢失,可以通过这些冷备的数据重新恢复整个网站。在备份的时候需要注意数据库如果正在进行写操作,冷备的数据就可能不完整,数据文件可能处于损坏状态,以前的时候是停机冷备,也就是停止数据库的写操作,将数据文件拷贝出去后,再重新打开数据访问。而现在使用一主多从的复制就可以实现零停机时间的备份,只需要关闭数据的复制进程,文件就处于关闭状态,然后进行数据文件拷贝,拷贝完成后再重新打开数据复制就可以了。

4)、高可用,如果一台服务器宕机了,只要不发请求给这台服务器就不会出现问题。当这台服务器恢复的时候,再重新发请求到这台服务器,所以,一主多从的情况下,某一台服务器宕机不可以用了,但是对整个系统的影响非常小。

二、数据分片

对于数据复制只能提高数据读并发操作的能力,并不能提高数据写操作并发的能力。如果我们数据库的写操作也有很大的并发数量,或者数据表特别大,单一的服务器甚至一张表无法存储了,怎么解决呢,那就需要数据分片。

1)、数据分片的主要目标是,将一张数据表切分成较小的片,不同片存储到不同服务器上面去,通过分片的方式使用多台服务器存储一张数据表,避免一台服务器记录存储处理整张数据表带来的存储及访问压力。

2)、数据分片的特点是,数据服务器之间相互独立,不共享任何信息,及时有部分服务器故障了,也不影响整个系统的可用性。另一个特点是通过分片键来定位分片,一个分片存储到哪个服务器上面去,到哪个服务器上面去查找,是通过分片键进行路由分区算法计算出来的。在SQL语句里面,只要包含了分片键,就可以访问特定的服务器,而不需要连接所有的服务器,跟其他的服务器进行通信。

3)、数据分片的原理是,将数据以某种方式进行切分,通常是用分片键的路由算法进行计算,使每天服务器都只存储一部分数据。

4)、数据分片的实现,现在有一个专门的分布式数据中间件,来做数据分片的工作Mycat。Mycat是一个专门的分布式数据库中间件,应用程序像连接数据库一样连接Mycat。而数据分片的操作完全交给Mycat去完成。例如,有3个分片数据库服务器-数据库服务器dn1、dn2、dn3,它们的分片规则是根据prov字段进行分片。那么我们执行一个查询操作“seletc * from orders where prov=wuhan”的时候,Mycat会根据分片规则将这条SQL操作路由到dn1这台服务器节点上。dn1执行数据数据查询操作返回结果后,Mycat再返回给应用程序。通过Mycat这样的分布式数据库中间件,无感知的使用分片数据库。同时Mycat还一定程度上支持分片数据库的联合join查询以及数据事务。

5)、分片数据库的伸缩扩容

下面来看下分片数据库如何进行扩容伸缩,对于一个新业务刚开始的时候数据量不是很多,两个数据库服务器就够了,但是随着数据的不断增长,可能需要增加第三个、第四个、第五个,甚至更多的服务器。在增加服务器的过程中,分片规则需要改变。通常的做法是数据分片使用逻辑数据库,也就是说一开始虽然两个服务器就可以完成数据分片存储,但是依然在逻辑上把它切分为多个逻辑数据库。例如,我们将数据库切分为32个逻辑数据库,但是开始的时候只有两个物理服务器,我们把32个数据库分别启动在两个物理服务器上。那么路由算法就还是按照32进行路由分区,数据分片也是32片。当需要扩容的时候,只需要把这些逻辑数据库迁移到其他的物理服务器上,就可以完成扩容。因为迁移后数据分片还是32片,数据分片的算法不需要改变。数据迁移也仅仅是将逻辑数据库迁移到新的服务器上面去,而这种迁移通过数据库的主从复制就可以完成。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NeilNiu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值