redis的集群:主从复制、CAP、PAXOS、cluster分片集群01

 

单机、单点、单实例缺点:

1.单点故障 2.容量有限  3. 压力

 

强一致性

主从复制、读写分离会带来数据一致性问题

1.通过强一致性来解决,即主redis 进行阻塞,直到从redis写成功。

弱一致性

强一致性带来阻塞问题,可能会等待很久

1.通过异步方式解决强一致性问题,但是会丢失一部分数据

最终数据一致性

弱一致性会带来数据丢失问题

1.通过类似kafka 可靠集群来保证最终数据一致性

 Redis使用默认的异步复制,其特点是低延迟和高性能

在使用 Redis 复制功能时的设置中,强烈建议在 master 和在 slave 中启用持久化

任何时候数据安全性都是很重要的,所以如果 master 使用复制功能的同时未配置持久化,那么自动重启进程这项应该被禁用

 

多实例redis

复制redis文件夹,修改redis.windows.conf 文件,修改6379端口,注释掉 bind 127.0.0.1(也可以不注释)

打开cmd,定位到当前实例目录,输入redis-server redis.windows.conf

打开redis-cli  ,开始进行主从设置。

打开cmd ,输入  redis-cli -h 127.0.0.1 -p 6380   或者  redis-cli  -p 6380

6379  主,6380、6381为从

在6380、6381 redis-cli输入  slaveof  localhost 6379 (老版本,新版本  REPLICAOF  localhost  6379)

主可以写,但从只能读

 

数据同步

停掉6380,然后向主服务器中添加key,再启动6380,启动的时候使用从主服务器进行复制

redis-server redis.windows.conf --replicaof localhost 6379  或 redis-server redis.windows.conf --slaveof localhost 6379

 

停止追随  replicaof no one  或 slaveof no one

即当主库挂掉后,手动切换一台从库为主库,同步其余从库重新追随。

 

slave-serve-stale-data yes  从库数据同步过程中是否支持查询,yes 支持一边同步一边查询,no 只有跟主redis同步完才支持查询

slave-read-only yes  从库是否只读

repl-diskless-sync no  是否使用磁盘方式传输数据,yes为使用网络

repl-backlog-size 1mb  积压数据大小。redis主库会维护一个队列,当从库挂掉一段时间再恢复的时候,如果修改的数据大小大于设置的值,就使用rdb进行恢复。否则使用维护的队列中的数据。

 

Redis 的 Sentinel(哨兵)

 

新建配置文件,

port 6385
sentinel monitor mymaster 127.0.0.1 6379 2

启动哨兵  redis-server redis.windows-sentinel.conf --sentinel

会显示出所有的 slave 从库

 

哨兵原理,消息的发布订阅

 

主从复制,故障转移数据一致性问题

当主库挂掉时,其它从库又没有写的能力,那是怎么保持数据一致性的呢

min-slaves-to-write <slave 数量>    Redis slave 每秒钟都会 ping master,确认已处理的复制流的数量

min-slaves-max-lag <秒数>    Redis master 会记得上一次从每个 slave 都收到 ping 的时间。用户可以配置一个最小的 slave 数量,使得它滞后 <= 最大秒数

如果条件不满足,master 将会回复一个 error 并且写入将不被接受。这时候哨兵会重新选出master 库,进行写入以及主从同步,最大程度保证数据丢失的比较少

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章