redis集群(高可用)
redis集群的三种模式
主从复制 奇数 3台 1主2从
哨兵模式 3台 1主2从
cluster 集群 6台 生产中:333 9台
主从复制:
和MySQL的主从复制类似,主可以写,写入主的数据通过RDB方式把数据同步到服务器。从不能更新到主。也是哨兵模式的基础。
缺点:故障自动化恢复,只有主能够写。
主从复制:
主节点和从节点
数据的复制是单向的,由主复制到从
主从复制的流程:
部署主从复制:
192.168.60.30 redis 主
192.168.60.31 从1
192.168.60.32 从2
操作:
主: [root@test3 ~]# vim /etc/redis/6379.conf70 bind 0.0.0.0707 appendonly yes[root@test3 ~]# /etc/init.d/redis_6379 restart #重启配置文件
从1:70 bind 0.0.0.0287 replicaof 192.168.60.30 6379 #取消注释并更改700 appendonly yes #no改为yes[root@test3 ~]# /etc/init.d/redis_6379 restart #重启配置文件
从2:70 bind 0.0.0.0287 replicaof 192.168.60.30 6379 #取消注释并更改700 appendonly yes #no改为yes[root@test3 ~]# /etc/init.d/redis_6379 restart #重启配置文件
哨兵:
故障自动化恢复,主从复制完成之后,从服务器变成只读模式。
故障切换时,主故障,变成从服务器,主变成从之后,也会进入只读模式。
缺点:从节点一旦故障,读会受到影响。
哨兵模式流程:
主从之间互相监听,主切换之后变成从自动变成只读模式 切换方式:不是按照权重来进行切换 投票:主宕机,其他服务器投票选举Raft算法。选一个离当前时间点更新最快的从变成主
部署哨兵模式:
192.168.60.30 redis 主
192.168.60.31 从1
192.168.60.32 从2
操作:
主从都需要配置: [root@test3 redis-5.0.7]# vim sentinel.conf17 protected-mode no #取消注释18 #关闭保护模式27 daemonize yes #将no改为yes37 logfile "/var/log/sentinel.log66 dir "/var/lib/redis/6379"85 sentinel monitor mymaster 192.168.60.30 6379 2#初始化监听,都是监听主。监听主服务器的状态#2 对应的就是从服务器的数量以及投票的参与者要和从服务器的数量一致。#2台服务器投票通过,主才能进行故障转移。114 sentinel down-after-milliseconds mymaster 30000#判断服务器宕机的时间周期 30秒 每30秒检测一次147 sentinel failover-timeout mymaster 180000#判断故障节点的超时的最大时间 180秒
#先起主 [root@test3 redis-5.0.7]# redis-sentinel sentinel.conf & [1] 35685 [root@test3 redis-5.0.7]# redis-cli -p 26379 info Sentinel
#再起从 [root@redis1 redis-5.0.7]# redis-sentinel sentinel.conf & [1] 18757 [root@redis1 redis-5.0.7]# redis-cli -p 26379 info Sentinel
集群:
把每两台服务器作为主从模式,形成一个大的主从的集群
解决了写操作的负载均衡。较为完善的高可用方案
缺点:保证高可用,对数据的完整性要求不高。
redis3.0之后的分布式存储方案
集群由多个节点组成,redis数据保存在这些节点。集群中的节点分为主和从。
主负责读写以及维护集群的信息
从节点进行主节点数据的复制(也可以查)
redis集群的数据分片
在集群概念中,引用的是hash槽的概念
创建了集群就有16384个hash槽
0~16383
3个节点:
主1 0~5460
主2 5461~10922
主3 10923~16383
节点当中,如果主和从全部失败,整个集群都将不可用。
部署哨兵模式:
192.168.60.30 redis 主1
192.168.60.31 主2
192.168.60.70 主3
192.168.60.33 从1
192.168.60.34 从2
192.168.60.35 从3
操作:
vim /etc/redis/6379.conf70 #bind 127.0.0.1 192.168.60.30 #将70行注释,表示默认所有89 protected-mode no#将yes改为no833 cluster-enabled yes#将833行取消注释841 cluster-config-file nodes-6379.conf #将841取消注释847 cluster-node-timeout 15000将847行取消注释700 appendonly yes#将700行的no改为yes/etc/init.d/redis_6379 restart#重启配置文件
redis-cli -h 192.168.60.30 --cluster create 192.168.60.30:6379 192.168.60.31:6379 192.168.60.70:6379 192.168.60.34:6379 192.168.60.33:6379 192.168.60.35:6379 --cluster-replicas 1 #在集群的主连接节点配置节点(192.168.60.30)
[root@test3 ~]# redis-cli -h 192.168.60.30 -p 6379 192.168.60.30:6379> cluster slots #查看hash槽的分配数量 1) 1) (integer) 02) (integer) 54603) 1) "192.168.60.30"2) (integer) 63793) "98d9ae173e3819c6db5c203631fdecdc48454efa"4) 1) "192.168.60.33"2) (integer) 63793) "fd1e5a933fa758fb85ff86456fef1189c5dff573" 2) 1) (integer) 54612) (integer) 109223) 1) "192.168.60.31"2) (integer) 63793) "2efc007ee1b53f8341106f68826c7ea0857e5639"4) 1) "192.168.60.35"2) (integer) 63793) "eadd988775c3e9412616e2dd6caa06f1a42252bc" 3) 1) (integer) 109232) (integer) 163833) 1) "192.168.60.70"2) (integer) 63793) "612a04150651a4b0d0d99d5a939345f42d133000"4) 1) "192.168.60.34"2) (integer) 63793) "4f5dcd83674f988a7763e020f3e9580a5fd4e831" 192.168.60.30:6379> cluster nodes #查看主从节点 98d9ae173e3819c6db5c203631fdecdc48454efa 192.168.60.30:6379@16379 myself,master - 0 1722408517000 1 connected 0-5460 fd1e5a933fa758fb85ff86456fef1189c5dff573 192.168.60.33:6379@16379 slave 98d9ae173e3819c6db5c203631fdecdc48454efa 0 1722408515000 5 connected 4f5dcd83674f988a7763e020f3e9580a5fd4e831 192.168.60.34:6379@16379 slave 612a04150651a4b0d0d99d5a939345f42d133000 0 1722408517928 4 connected 2efc007ee1b53f8341106f68826c7ea0857e5639 192.168.60.31:6379@16379 master - 0 1722408516000 2 connected 5461-10922 eadd988775c3e9412616e2dd6caa06f1a42252bc 192.168.60.35:6379@16379 slave 2efc007ee1b53f8341106f68826c7ea0857e5639 0 1722408517000 6 connected 612a04150651a4b0d0d99d5a939345f42d133000 192.168.60.70:6379@16379 master - 0 1722408516921 3 connected 10923-16383
redis-cli -h 192.168.60.30 --cluster create 192.168.60.30:6379 192.168.60.31:6379 192.168.60.70:6379 192.168.60.34:6379 192.168.60.33:6379 192.168.60.35:6379 --cluster-replicas 1
192.168.60.30 集群的主连接节点 配置节点
--cluster create 192.168.60.30:6379 192.168.60.31:6379 192.168.60.70:6379 192.168.60.34:6379 192.168.60.33:6379 192.168.60.35:6379
前面的是主,后面的是从
--cluster-replicas 1
表示每个主只有一个节点
集群
:moved表示报错,只是系统提示客户端到指定为止的hash槽进行读或者写
系统提示啥,那就去哪个节点操作即可 这个节点是改节点的主。
集群的功能只是满足了高可用和写的负载均衡,不能保证数据的完整性。