哨兵模式()
哨兵模式和主从切换的区别
主从切换技术的方法是:当主服务器宕机了,手动切换从服务器当主服务器用,需要人工手动操作。
哨兵的核心功能:在主从复制的基础上,哨兵引入了 主节点的自动故障转移,比主从复制多了个哨兵集群监控
哨兵模式的原理
哨兵:是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障的时候同过哨兵集群投票机制选择新的master并将所有的slave连接到新的master。所以整个运行哨兵的集群的数量不得少于3个节点。
!!!注:当master宕机后哨兵模式开始投票,这是宕机的master又恢复了不参与新master选举的投票。以从节点加入他们新的集群中。
哨兵模式的作用
①监控
哨兵 会不断地检查主节点和从节点是否正常运作
②自动故障转移
当主节点不能正常工作的时候,哨兵会开始自动故障转移操作,他会将失效的主节点的其中一个从节点作为新的主节点使用,并让其他的从节点改为复制新的主节点。
③通知
哨兵可以将故障转移的结果发送给客户端
哨兵结构组成
哨兵节点:哨兵系统由一个或多个节点组成,哨兵节点是特殊的redis节点,不储存数据。
数据节点:主节点和从节点都是数据节点
故障转移机制
1,哨兵节点定时监控发现主节点是否出现故障
每个哨兵节点每隔一秒会向主节点发,从节点及其他哨兵节点发送一次ping作为心跳检测,如果主节点在一定时间范围内不回复或者恢复错误的消息,那么这个哨兵就会认为这个主节点主管下线(单方面)。当超过半数哨兵节点认为改主节点主观下线,就客观下线了
(客观下线):半数以上的哨兵认为该主节点主观下线。!!!主节点才会有的概念,从节点没有客观下线
2.当主节点出现故障,此时哨兵节点会通过raft算法(选举算法)实现选举机制共同选举出一个哨兵节点
为leader 来负责处理主节点的故障转移和通知,所以整个运行哨兵的集群数量不得少于3个节点
3.由leader 哨兵节点执行故障转移,过程如下
①将某一个节点升级为新的主节点,让其他从节点指向新的主节点。
②若原来的主节点恢复也会变为从节点,让其他从节点指向新的主节点。
③通知客户主节点已经更换
主节点的选举:
1.过滤掉不健康的(已下线的),没有回复哨兵 ping 响应的从节点。
2.选择配置文件中从节点优先级配置最高的。(replica-priority,默认值为100)
3.选择复制偏移量最大,也就是复制最完整的从节点。
哨兵模式依赖主从模式,所有要把主从模式安装好的情况下再去做哨兵模式
哨兵模式搭建过程
搭建redis哨兵模式
Redis哨兵模式建立在主从复制的基础上
主从复制已搭建好
首先关闭防火墙
Systemctl stop firewalld
Setenforce 0
修改主从服务器的哨兵节点
Vim /opt/redis-5.0.7/sentinel.conf
第17行关闭保护模式
21行,Redis哨兵默认的监听端口
26行,指定sentinel为后台路径
36行 指定日志存放路径
65行 指定数据库存放路径
84行修改 指定该哨兵节点监控192.168.10.22:6379这个主节点,该主节点的名称是mymaster,最后的2的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移
sentinel down-after-milliseconds mymaster 30000 #113行,判定服务器down掉的时间周期,默认30000毫秒(30秒)
默认不用改
sentinel failover-timeout mymaster 180000 #146行,故障节点的最大超时时间为180000(180秒)
默认不用改
启动哨兵模式先主后从
cd /opt/redis-5.0.7/
redis-sentinel sentinel.conf &
查看哨兵信息
此时的192.168.179.129是主节点
有3个节点2个从节点1个主节点
查看主节点进程
杀死一个进程然后验证结果
哨兵模式开始运行
在此查看哨兵信息
主节点挂了后哨兵模式已经启动将从节点192.168.179.10选举为主节点,证明哨兵模式没有问题成功运行。
redis集群模式(cluster集群)
集群,即redis cluster 是redis3.0开始引入的分布式存储方案
集群简述
集群由多个节点组成,redis的数据分布在这些节点中,集群中的节点分为主节点和从节点:只有主节点负责读写请求和集群的信息维护;从节点只进行主节点数据和状态的信息复制
集群的作用
(1)数据分区:数据分区(或称数据分片)是集群最核心的功能。
集群将数据分散到多个节点,一方面突破了Redis单机内存大小的限制,存储容量大大增加;另一方面每个主节点都可以对外提供读服务和写服务,大大提高了集群的响应能力。
Redis单机内存大小受限问题,在介绍持久化和主从复制时都有提及;例如,如果单机内存太大,bgsave和bgrewriteaof的fork操作可能导致主进程阻塞,主从环境下主机切换时可能导致从节点长时间无法提供服务,全量复制阶段主节点的复制缓冲区可能溢出。
(2)高可用:集群支持主从复制和主节点的自动故障转移(与哨兵类似);当任一节点发生故障时,集群仍然可以对外提供服务。
#Redis集群的数据分片:
Redis集群引入了哈希槽的概念
Redis集群有16384个哈希槽(编号0-16383)
集群的每个节点负责一部分哈希槽
每个Key通过CRC16校验后对16384取余来决定放置哪个哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作
Redis集群的主从复制模型
集群中具有A、B、C三个节点,如果节点B失败了,整个集群就会因缺少5461-10922这个范围的槽而不可以用。
为每个节点添加一个从节点A1、B1、C1整个集群便有三个Master节点和三个slave节点组成,在节点B失败后,集群选举B1位为的主节点继续服务。当B和B1都失败后,集群将不可用。
cluster集群搭建
Cluster集群
先关闭防火前
Systemctl stop firewalld
Setenforce 0
Cd /etc/redis/
Mkdir -p redis-cluster/redis600{1…6}
运行for脚本拷贝数据到新创建的redis6001-6中
在这里插入图片描述
Cd /opt 到opt目录下将redis 的压缩包下载进来
然后tar zxvf redis-5.0.7.tar.gz解压
进入redis-5.0.7下安装
Cd redis-5.0.7 make
Make
然后cd到etc目录下心创建的cluster下
cd /etc/redis/redis-cluster/运行for脚本
开启集群功能
改配置文件
cd /etc/redis/redis-cluster/redis6001
每个都要改
cd /etc/redis/redis-cluster/redis6002
cd /etc/redis/redis-cluster/redis6003
cd /etc/redis/redis-cluster/redis6004
cd /etc/redis/redis-cluster/redis6005
cd /etc/redis/redis-cluster/redis6006
再分别vim redis.conf
#bind 127.0.0.1
#69行,注释掉bind 项,默认监听所有网卡
protected-mode no
#88行,修改,关闭保护模式
port 6006
#92行,修改,redis监听端口,
daemonize yes
#136行,开启守护进程,以独立进程启动
cluster-enabled yes
#832行,取消注释,开启群集功能
cluster-config-file nodes-6001.conf
#840行,取消注释,群集名称文件设置
cluster-node-timeout 15000
#846行,取消注释群集超时时间设置
appendonly yes
#700行,修改,开启AOF持久化
改完之后
启动redis节点
分别进入redis6001-6的文件夹下执行命令
redis-server redis.conf 来启动redis节点
cd /etc/redis/redis-cluster/redis6001
redis-server redis.conf
运行for脚本
for d in {1…6}
do
cd /etc/redis/redis-cluster/redis600$d
redis-server redis.conf
Done
然后查看reidis
ps -ef | grep redis
启动集群
redis-cli --cluster create 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006 --cluster-replicas 1
中间输入yes
启动cluster集群成功
测试群集
Redis-cli -p 6001 -c
Redis-cli 6002 -c
建立一个name zsj
然后进入他的从节点
Redis-cli 6005 -c
对应的slave节点也有这个数据说明clust集群创建成功。