数据库通关整理4-主从复制结构分析(进阶问题:主从复制、读写分离、主从选择、多级复制)
java通关整理汇总-Java基础、计算机网络、数据库、设计模式、框架、算法模板、笔试
1. slave从服务器是否可以进行写操作?
- 假设slave可以主动的进行写操作,slave又无法通知master,这样就导致了master和slave数据不一致了。因此slave不应该进行写操作,至少是slave上涉及到复制的数据库不可以写。实际上,这里已经揭示了读写分离的概念。
2. 主从复制中,多个从服务器都不能写,他们的作用?
- 数据备份,当主服务器挂掉的时候,可以用从服务器的数据,从服务器提升为主服务器。
- 负载均衡,读操作一般会多于余写操作,多个从服务器分担主服务器的查询功能,就可以减轻负担。
3. web应用怎么判断具体连接哪一个服务器?主?从?哪一个从?
- 找一个组件,application program只需要与它打交道,用它来完成MYSQL的代理,实现SQL语句的路由。
- mysql proxy并不负责,怎么从众多的slaves挑一个?可以交给另一个组件(比如haproxy)来完成。这就是所谓的MYSQL的读写分离。
原始处理:
在应用程序中设置,insert/delete/update这些更新数据库的操作,用connection(for master)进行操作,select用connection(for slaves)进行操作。
从服务器怎么选择:
简单的轮询算法。就是假设所有的从数据库的承载能力都是一样的或者相当的,把服务器进行一系列的排序,然后根据序号顺序分配一个从服务器。
问题:一旦某一个服务器挂掉,那么应用程序就也要修改了
4. 如果主服务器挂了怎么办?
哨兵模式
5. 多级复制的概念?
在MYSQL master内部,维护N个线程,每一个线程负责将二进制日志文件发往对应的slave。master既要负责写操作,还的维护N个线程,负担会很重。可以这样,slave-1是master的从,slave-1又是slave-2,slave-3,…的主,同时slave-1不再负责select。 slave-1将master的复制线程的负担,转移到自己的身上。
6. 第一次查询由一个从服务器响应,第二次相同的查询在另外一个服务器响应,这个时候就不能利用缓存查询,节省效率了。
可以利用共享式缓存
7. 随着应用的日益增长,读操作很多,我们可以扩展slave,但是如果master满足不了写操作了,怎么办呢?
scale up ?更好的服务器? 没有最好的,只有更好的,太贵了。。。
scale out ? 主从复制架构已经满足不了。
可以分库【垂直拆分】,分表【水平拆分】。
8. Scale Up和Scale-out
Scale Up(纵向扩展) 主要是利用现有的存储系统,通过不断增加存储容量来满足数据增长的需求。但是这种方式只增加了容量,而带宽和计算能力并没有相应的增加。所以,整个存储系统很快就会达到性能瓶颈,需要继续扩展。
Scale-out横向扩展架构的升级通常是以节点为单位,每个节点往往将包含容量、处理能力和I / O带宽。一个节点被添加到存储系统,系统中的三种资源将同时升级。