1、Redis集群的三种模式
主从复制:奇数,至少3台,一主两从
哨兵模式:至少3台,一主两从
cluster集群:9台 3 3 3
2、主从复制
2.1概念
和mysql的主从复制类似,主可以写,写入主的数据通过RDB方式把数据同步到从服务器,从不能更新到主,也是哨兵模式的基础
2.2缺点
无法实现故障自动化恢复,只有主能够写
主节点和从节点
数据的复制是单向的,由主复制到从
2.3主从复制的流程
基于RDB复制,在建立主从连接时,从服务器向主发送sync command请求同步命令,主服务器根据请求通过子进程创建RDB文件,将RDB文件记录的数据同步给从。
一旦主从建立,主可以读也可以写,从只能读,从进入只读模式。
2.4部署主从复制
192.168.230.31 redis 主
192.168.230.32 从1
192.168.230.33 从2
#关闭防火墙 安全机制
systemctl stop firewalld
setenforce 0
#时间同步
yum -y install ntpdate
ntpdate ntp.aliyun.com
#查看时间
date
#主服务器
vim /etc/redis/6379.conf
70行 bind 0.0.0.0
700行 appendonly yes
#从服务器
vim /etc/redis/6379.conf
70行 bind 0.0.0.0
287行 replicaof 192.168.230.31 6379
700行 appendonly yes
#重启
/etc/init.d/redis_6379 restart
#查看端口
netstat -antp | grep 6379
#查看日志
tail -f /var/log/redis_6379.log
3、哨兵模式
3.1概念
故障自动化恢复,主从复制完成之后,从服务器会变成只读模式。故障切换时,主故障,变成从服务器,主变成从之后,也会进入只读模式
3.2缺点
从节点一旦故障,读会受到影响
3.3工作机制
主从互相监控,出了故障主从来回切换
主切换之后变成了从,自动变成只读模式
切换方式:不是按照权重来进行切换,主宕机,其他服务器投票选举Raft算法,选一个离当前时间点更新最快的从变成主
3.4部署哨兵模式
192.168.230.31 redis 主
192.168.230.32 从1
192.168.230.33 从2
cd/opt/redis-5.0.7
vim sentinel.conf
17行 protected-mode no 取消注释
#关闭保护模式
27行 daemonize yes
37行 logfile "/var/log/sentinel.log"
66行 dir "/var/lib/redis/6379"
85行 sentinel monitor mymaster 192.168.230.31 6379 2
#初始化监听,都是监听主,监听主服务器的状态。2对应的就是从服务器的数量以及投票的参与者,参与者要和从服务器的数量一致。2台服务器投票通过,主才能进行故障转移
114行 sentinel down-after-milliseconds nymaster 30000
#判断服务器宕机的时间周期,30秒,每30秒检测一次
147行 failover-timeout mymaster 180000
#判断故障节点的超时最大时间是180秒
#先启动主,再启从
redis-sentinel sentinel.conf &
#查看哨兵模式的状态
redis-cli -p 26379 info sentinel
#主模拟故障
/etc/init.d/redis_6379 stop
#查看日志
tail -f /var/log/sentinel.log
4、集群
4.1概念
把每两台服务器作为主从模式,形成一个大的主从集群。解决了写操作的负载均衡,是一个较完善的高可用方案
集群是redis3.0之后的分布式存储方案
集群由多个节点组成,redis数据保存在这些节点
集群的节点分为主和从。主负责读写以及维护集群的信息,从节点进行主节点的复制(也可以查)
4.2缺点
保证高可用,对数据的完整性要求不高
4.3redis集群的数据分片
在集群概念中,引用的是hash槽的概念
创建了集群就有16384个hash槽,编号从0-16383,hash槽是平均分配的
例:3个节点
主1 0-5460
主2 5461-10922
主3 10923-16383
节点当中如果主和从全部失败,整个集群都将不可用
4.4部署集群
192.168.230.31 redis 主1
192.168.230.32 主2
192.168.230.33 主3
192.168.230.34 从1
192.168.230.35 从2
192.168.230.36 从3
systemctl stop firewalld
setenforce 0
#时间同步
yum -y install ntpdate
ntpdate ntp.aliyun.com
#查看时间
date
vim /etc/redis/6379.conf
70行 bind 注释
89行 protected-mode no
832行 cluster-enabled yes 取消注释
841行 取消注释
847行 取消注释
700行 appendonly yes
#重启
/etc/init.d/redis_6379 restart
redis-cli -h 192.168.230.31 --cluster create 192.168.230.31:6379 192.168.230.34:6379 192.168.230.32:6379 192.168.230.35:6379 192.168.230.33:6379 192.168.230.36:6379 --cluster-replicas 1
-----------------------------------
-h:配置集群的主连接节点
--cluster create:分配主从,前面的是主,后面的是从
--cluster-repulicas 1:表示每个主只有一个节点
-----------------------------------
redis-cli -h 192.168.230.31 -p 6379
cluster slots
#查看hash槽分配
cluster nodes
#查看节点
集群中的moved不是报错,只是系统提示客户端到指定位置的hash槽进行读或者写,系统提示什么,就去哪个节点操作即可,这个节点一定是该节点的主
redis-cli -h 192.168.230.31 -p 6379
cluster slots
#查看hash槽分配
cluster nodes
#查看节点
集群中的moved不是报错,只是系统提示客户端到指定位置的hash槽进行读或者写,系统提示什么,就去哪个节点操作即可,这个节点一定是该节点的主
集群的功能只是满足了高可用和写的负载均衡,不能保证数据的完整性