redis集群的三种模式:
主从复制 奇数 三台 一主两从
哨兵模式 3 一主两从
cluster集群 六台
主从复制:和mysql的主从复制类似,主可以写,写入主的数据通过RDB方式把数据同步到从服务器,从不能更新到主,也是哨兵模式的基础。
缺点:没有办法实现故障自动化恢复,只有主能够写。
哨兵模式:故障自动化恢复,主从复制完成之后,从服务器变成只读模式
故障切换时,主故障,变成从服务器,主变成从之后,也会进入只读模式
缺点:从节点一旦故障,读会收到影响
集群:把没两台服务器作为主从模式,形成一个大的主从的集群,解决了写操作的负载均衡。较为完善的一个高可用方案
缺点:保证高可用,对数据的完整性要求不高。
一、主从模式
节点和从节点
数据的复制时单向的,由主复制到从
主从复制的流程:
关闭防火墙和安全机制
配置主服务
vim /etc/redis/6379.conf
跳转到70行,把监听地址改成0.0.0.0
bind 0.0.0.0
跳转到700行,开启AOF的功能
appendonly yes
主服务就配置好了
两个从服务一起配置文件,跳转70行和主服务一样都改成0.0.0.0
跳转到287行添加住的ip地址及端口
replicaof 192.168.124.60 6379
跳转到700行开启AOF功能,两个从服务也配置完毕。
一主两从都重启一下
/etc/init.d/redis_6379 restart
这时主从复制就完成了
二、哨兵模式:
切换方式:不是按照权重来进行切换 是以投票的方式:主宕机其他服务器投票,选举,Raft算法,选一个离当前时间点更新最快的从变成主
进入源码包里面的配置文件
vim sentinel.conf
主从同时配置
跳转到15行,把监听地址注释掉
跳转17行
protected-mode no
关闭保护模式
跳转27行后台运行把no改成yes
daemonize yes
跳转37行,把哨兵监听的日志文件设置一下
logfile "/var/log/sentinel.log"
跳转66行,把数据库的保存文件设置一下
dir "/var/lib/redis/6379"
跳转到85行
sentinel monitor mymaster 192.168.233.7 6379 2
初始化监听,都是监听主,监听主动服务器的状态
2 对应的从服务器的数量以及投票的参与者 参与者要和从服务器的数量一致
2台服务器投票通过,主才能进行故障转移。
sentinel down-after-milliseconds mymaster 30000
判断服务器宕机的时间周期 30秒
每30秒检测一次
sentinel failover-timeout mymaster 180000
判断故障节点的超时的最大时间 180秒
redis-sentinel sentinel.conf &
启动哨兵模式命令
redis-cli -p26379 info Sentinel
查看哨兵模式的状态命令
哨兵模式就创建完成了。
三、cluster集群
redis3.0之后的分布式存储方案
集群由多个节点组成,redis数据保存在这些节点。
集群中的节点分为主和从
主负责读写以及维护集群的信息
从节点进行主节点数据的复制(也可以查)
redis集群的数据分片
在集群概念中,引用的时hash槽的概念
创建了集群就有16384个哈希槽
0-16383
三个节点:
主1 0-5460
主2 5461-10922
主3 10923-16383
节点当中,如果主和从全部失败,整个集群都将不可用
六台服务一起配置
进入配置文件
允许所有ip地址通过,关闭保护模式
开启他的集群模式,超时设置为15秒
打开AOF功能
redis-cli -h 192.168.124.60 -cluster create 192.168.124.60:6379 192.168.124.63:6379 192.168.124.61:6379 192.168.124.64:6379 192.168.124.62:6379 192.168.124.65:6379 --cluster-replicas 1
配置主从的节点命令
192.168.124.60 集群的主连接节点 配置节点
-cluster create 192.168.124.60:6379 192.168.124.63:6379 192.168.124.61:6379 192.168.124.64:6379 192.168.124.62:6379 192.168.124.65:6379
前面的是主,后面的是从
--cluster-replicas 1
每个主机只能有一个从
出现这个字段说明已经配置成功了
进入redis库中查询哈希槽怎么分配的
在查看六台服务的主从分配
集群:move不是报错,只是系统提示客户端到指定位置的哈希槽进行读或者写,系统提示什么,就去哪个节点操作即可,这个节点是该节点的主
集群的功能只是满足高可用和写的负载均衡,不能保证数据的完整性。