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

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

redis强一致性弱一致性 redis集群强一致性_Redis

redis强一致性弱一致性 redis集群强一致性_redis_02

强一致性

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

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

弱一致性

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

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

最终数据一致性

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

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

redis强一致性弱一致性 redis集群强一致性_redis_03

 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)

主可以写,但从只能读

redis强一致性弱一致性 redis集群强一致性_Redis_04

redis强一致性弱一致性 redis集群强一致性_redis强一致性弱一致性_05

 

数据同步

停掉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(哨兵)

自动选举master 机制

新建配置文件,

port 6385
sentinel monitor mymaster 127.0.0.1 6379 2

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

会显示出所有的 slave 从库

redis强一致性弱一致性 redis集群强一致性_redis_06

 

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

redis强一致性弱一致性 redis集群强一致性_redis_07

 

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

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

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

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

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