【集群-01】基础和哨兵

分布式是一个概念,集群是他的体现,主从复制是集群的基础

分布式有个理论叫 CAP ,说的是一致性,可用性,分区容忍性,这个分区指的是:网络分区

意思是:集群可以想象出多台服务器,一个做老大,提供可写可读服务,几个小老弟,提供可读服务,这叫主从,还有主备,很少用,意思是从服务器备用,不对外提供可读服务,说会主从,主服务器如果和从服务器断联了,就叫做网络分区,因为这时候,主从复制没法进行了,当然了其他没有网络分区的从服务器照常

cap:一句话描述就是,一致性和可用性两难全

但是可以保证最终一致性,就是最终主从服务器数据一致,那他怎么实现的呢?两个方法,增量同步和快照同步

同步方式

增量同步:在本地有个缓冲区叫做 buffer,redis 会把数据放在 buffer 中,然后从服务器去 buffer 中拿,但是 buffer 不可能是无限大的,而且还是环形的一个结构,这个 buffer 大小可以用参数控制是多大
增量同步会有问题,例如,当主服务器写命令放进 buffer 存的时候,比如有 6 个数据,但是 buffer 大小是5,那么存第六个之后,第一个的位置原来存的就被覆盖了,那么就出现了数据丢失,无法保证数据一致性

快照同步:为了解决增量同步的数据丢失问题,快照同步就是,主服务器 bgsave 一下,把主服务器所有的命令都放入 rdb 文件,放入磁盘,接着从服务器去磁盘拿到这个文件,再做一次全量同步,这就不会导致数据丢失了
但是也有一个问题,因为这个用的磁盘,尤其不是SSD 固态硬盘时候,会非常慢,这可能导致这段时间,buffer 又被覆盖,那么又触发这个机制,导致循环快照同步,这当然不好了
解决办法就是设置合适大小的 buffer 避免被覆盖

延迟

刚刚一直说的是异步复制,这会有一个问题,延迟比较大,异步肯定没有同步快

3.0 版本以后为了减小延迟,保证强一致性,出现了一个选择,就是 wait 指令,有两个参数,一个是控制 N 从库数量,一个控制等待时间,就是从库等待多久,主库同步数据到从库,如果设置时间为 0 ,那就是立刻同步

Sentinel,哨兵,高可用

哨兵集群,也可以叫做 zookeeper 集群,是为了保证服务高可用,比如半夜三点,大家睡着了,这时候,主服务器挂掉了,那么怎么办?比如就有人睡不着,晚上看淘宝,看电视剧,服务器挂了,买不了东西是吧,办法就是用哨兵,他的意思是:客户端访问主服务器写或者修改时候,先去 Sentinel 集群中发现主服务器地址,接着去访问,如果主服务器挂掉了,哨兵会检测到并且切换主服务器为某个从服务器,具体是哪个,用的是轮询的方式,简单说是随机

而哨兵做成集群也是为了避免只有一个哨兵,挂了的话,还能有别的哨兵替代,继续工作

Sentinel 有两个参数控制,保证主从延迟过大,一个是控制正常的从服务器的数量,怎么判断正常呢?就是第二个参数,服务器在几秒内没收到从服务器的反馈,
要木网络断开,要木一直不给反馈,代表从服务器有问题

如果之前的主库网络连接恢复了,那他也降级为从服务器了,通过快照和增量同步保证数据一致性

你可能感兴趣的:(服务器,数据库)