【NoSQL】redis主从、哨兵、集群(二)

简介: 【NoSQL】redis主从、哨兵、集群(二)

4.6.3启动哨兵模式

==先启master,再启slave ==


cd /opt/redis-5.0.7/
redis-sentinel sentinel.conf &
注意!先启动主服务器,再启动从服务器





4.6.4查看哨兵信息

redis-cli -p 26379 info Sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.137.20:6379,slaves=2,sentinels=3
[1]+  完成                  redis-sentinel sentinel.conf


4.6.5模拟故障

#在Master 上查看redis-server进程号:

ps -ef | grep redis


#杀死 Master 节点上redis-server的进程号

kill -9 6491 #Master节点上redis-server的进程号


#验证master是转换至从服务器

tail -f /var/log/sentinel.log


#在Slave上查看是否转换成功

redis-cli -p 26379 INFO Sentinel

在Master 上查看redis-server进程号


杀死 Master 节点上redis-server的进程号


验证master是转换至从服务器


Slave上查看是否转换成功



五、Redis群集模式

集群,即 Redis Cluster, 是Redis 3. 0开始引入的分布式存储方案。


集群由多个节点(Node) 组成,Redis 的数据分布在这些节点中。


集群中的节点分为主节点和从节点;只有主节点负责读写请求和集群信息的维护;从节点只进行主节点数据和状态信息的复制。


5.1集群的作用

数据分区:数据分区(或称数据分片) 是集群最核心的功能。


集群将数据分散到多个节点,一方面突破了 Redis 单机内存大小的限制,存储容量大大增加;另一方面每个主节点都可以对外提供读服务和写服务,大大提高了集群的响应能力。

Redis 单机内存大小受限问题,在介绍持久化和主从复制时都有提及;例如,如果单机内存太大,bgsave 和 bgrewriteaof的 fork 操作可能导致主进程阻塞,主从环境下主机切换时可能导致从节点长时间无法提供服务,全量复制阶段主节点的复制缓冲区可能溢出。


高可用:集群支持主从复制和主节点的自动故障转移(与哨兵类似) ;当任一节点发生故障时,集群仍然可以对外提供服务。


5.2集群模式的数据分片

Redis集群引入了哈希槽的概念


Redis集群有 16384 个哈希槽( 编号0-16383)


集群的每个节点负责一部分哈希槽


每个Key 通过 CRC16 校验后对16384取余来决定放置哪个哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作


<- - -以3个节点组成的集群为例- - ->
节点A 包含0到5460号哈希槽
节点B 包含5461到10922号哈希槽
节点C 包含10923到16383号哈希槽

5.3集群模式的主从复制模型

集群中具有A、B、C三个节点,如果节点B失败了,整个集群就会因缺少5461-10922这个范围的槽而不可以用。

为每个节点添加一个从节点A1、B1、C1整个集群便有三个Master节点和三个slave节点组成,在节点B失败后,集群选举B1位为主节点继续服务。当B和B1都失败后,集群将不可用。


5.4redis集群的搭建

5.4.1环境准备

redis的集群一般需要6个节点,3主3从。 方便起见, 这里所有节点在3台服务器上模拟,每台主机上设置一主一备,以IP地址和端口进行区分:

三个主节点端口号:5001,5002,5003

对应的从节点端口号:7001,7002,7003


服务器类型 系统和IP地址 需要安装的组件 节点端口
Master 1 CentOS7.4(64位) 192.168.137.20 redis-5.0.7.tar.gz 5001
Slave1 CentOS7.4(64位) 192.168.137.20 redis-5.0.7.tar.gz 7001
Master 2 CentOS7.4(64位) 192.168.137.15 redis-5.0.7.tar.gz 5002
Slave 2 CentOS7.4(64位) 192.168.137.15 redis-5.0.7.tar.gz 7002
Master 3 CentOS7.4(64位) 192.168.137.10 redis-5.0.7.tar.gz 5003
Slave 3 CentOS7.4(64位) 192.168.137.10 redis-5.0.7.tar.gz 7003
hostnamectl set-hostname master1_slave1
hostnamectl set-hostname master2_slave2
hostnamectl set-hostname master3_slave3

5.4.2创建目录复制配置文件到对应的节点上

#第一台主机:192.168.137.20
cd /etc/redis/
mkdir -p redis-cluster/redis5001
mkdir -p redis-cluster/redis7001
cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis5001/
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis5001/
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis7001/



#第二台主机:192.168.137.15
cd /etc/redis/
mkdir -p redis-cluster/redis5002
mkdir -p redis-cluster/redis7002
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis5002/
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis7002/
#第三台主机:192.168.137.10
cd /etc/redis/
mkdir -p redis-cluster/redis5003
mkdir -p redis-cluster/redis7003
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis5003/
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis7003/


5.4.3修改主配置文件,设置开启群集功能

(1)先在Master1上配置,然后将配置文件复制到其他节点服务器


#Master1配置如下,其他5个服务器的配置文件类似,注意6个端口都要不一样。
cd /etc/redis/redis-cluster/redis5001
vim redis.conf
bind 192.168.145.11    #69行,修改bind项,监听自己的IP
protected-mode no      #88行,修改,关闭保护模式
port 5001        #92行,修改,redis监听端口
daemonize yes       #136行,以独立进程启动
cluster-enabled yes      #832行,取消注释,开启群集功能
cluster-config-file nodes-6379.conf  #840行,取消注释,群集名称文件设置,无需修改
cluster-node-timeout 15000    #846行,取消注释群集超时时间设置
appendonly yes        #699行,修改,开启AOF持久化






(2)在Master1节点上将配置文件到其他两台Master节点中


scp /etc/redis/redis-cluster/redis5001/redis.conf root@192.168.145.18:/etc/redis/redis-cluster/redis5002/redis.conf
scp /etc/redis/redis-cluster/redis5001/redis.conf root@192.168.145.26:/etc/redis/redis-cluster/redis5003/redis.conf


(3)将Master节点上的配置文件再复制到各自的从服务器中


#将Master1的主配置文件复制到Slave1
cp -p /etc/redis/redis-cluster/redis5001/redis.conf /etc/redis/redis-cluster/redis7001/redis.conf
#将Master2的主配置文件复制到Slave2
cp -p /etc/redis/redis-cluster/redis5002/redis.conf /etc/redis/redis-cluster/redis7002/redis.conf
#将Master3的主配置文件复制到Slave3
cp -p /etc/redis/redis-cluster/redis5003/redis.conf /etc/redis/redis-cluster/redis7003/redis.conf




(4)修改除Master1节点之外的所有服务器的监听地址及端口


#Slave1
vim /etc/redis/redis-cluster/redis7001/redis.conf
bind 192.168.145.11      #69行,修改bind项,监听自己的IP
port 7001      #92行,修改,redis监听端口


#Master2
vim /etc/redis/redis-cluster/redis5002/redis.conf
bind 192.168.145.18     #69行,修改bind项,监听自己的IP 
port 5002               #92行,修改,redis监听端口


#Slave2
vim /etc/redis/redis-cluster/redis7002/redis.conf
bind 192.168.145.18        #69行,修改bind项,监听自己的IP 
port 7002                  #92行,修改,redis监听端口 


#Master3
vim /etc/redis/redis-cluster/redis5003/redis.conf
bind 192.168.145.26         #69行,修改bind项,监听自己的IP 
port 5003                   #92行,修改,redis监听端口


#Slave3
vim /etc/redis/redis-cluster/redis7003/redis.conf
bind 192.168.145.26     #69行,修改bind项,监听自己的IP
port 7003                     #92行,修改,redis监听端口


5.4.4启动所有redis节点

cd /etc/redis/redis-cluster/redis5001/
redis-server redis.conf
cd /etc/redis/redis-cluster/redis7001/
redis-server redis.conf
cd /etc/redis/redis-cluster/redis5002/
redis-server redis.conf
cd /etc/redis/redis-cluster/redis7002/
redis-server redis.conf
cd /etc/redis/redis-cluster/redis5003/
redis-server redis.conf
cd /etc/redis/redis-cluster/redis7003/
redis-server redis.conf


5.4.5启动群集

#前三台为Master,后三台为Slave,下面交互的时候需要输入yes 才可以创建。
redis-cli --cluster create 192.168.145.11:5001 192.168.145.18:5002 192.168.145.26:5003 192.168.145.11:7001 192.168.145.18:7002 192.168.145.26:7003 --cluster-replicas 1
#-replicas 1   表示每个主节点有1个从节点。


5.4.6测试集群

 #加-c参数,节点之间就可以互相跳转 
redis-cli -h 192.168.145.11 -p 5001 -c 
 #查看节点的哈希槽编号范围
cluster slots    
set hobby dance
#查看键的槽编号  
cluster keyslot hobby




六、总结

本文学习了redis的主从复制、哨兵模式以及集群模式;我们需要了解并掌握其原理,以及知道是如何进行配置的。


相关文章
|
10月前
|
存储 负载均衡 NoSQL
【赵渝强老师】Redis Cluster分布式集群
Redis Cluster是Redis的分布式存储解决方案,通过哈希槽(slot)实现数据分片,支持水平扩展,具备高可用性和负载均衡能力,适用于大规模数据场景。
681 2
|
8月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
858 6
|
9月前
|
存储 监控 NoSQL
Redis高可用架构全解析:从主从复制到集群方案
Redis高可用确保服务持续稳定,避免单点故障导致数据丢失或业务中断。通过主从复制实现数据冗余,哨兵模式支持自动故障转移,Cluster集群则提供分布式数据分片与水平扩展,三者层层递进,保障读写分离、容灾切换与大规模数据存储,构建高性能、高可靠的Redis架构体系。
|
11月前
|
负载均衡 NoSQL Redis
【赵渝强老师】Redis的主从复制集群
Redis主从复制是指将一台Redis服务器的数据复制到其他Redis服务器,实现数据热备份、故障恢复、负载均衡及高可用架构的基础。主节点负责写操作,从节点同步数据并可提供读服务,提升并发处理能力。
341 5
|
10月前
|
存储 NoSQL 算法
Redis的集群架构与使用经验
本文介绍了Redis的集群架构与使用经验,包括主从复制、哨兵集群及Cluster分片集群的应用场景与实现原理。内容涵盖Redis主从同步机制、数据分片存储方式、事务支持及与Memcached的区别,并讨论了Redis内存用尽时的处理策略。适用于了解Redis高可用与性能优化方案。
|
存储 NoSQL 网络安全
Redis安装(单机、主从、哨兵、集群)
Redis安装(单机、主从、哨兵、集群)
430 1
|
存储 运维 监控
【Redis】主从、哨兵、集群架构
【Redis】主从、哨兵、集群架构
527 1
|
缓存 NoSQL 应用服务中间件
分布式缓存之Redis(持久化、主从、哨兵、分片集群)
分布式缓存之Redis(持久化、主从、哨兵、分片集群)
|
存储 NoSQL 算法
Redis主从、哨兵、 Cluster集群一锅端! 2
Redis主从、哨兵、 Cluster集群一锅端!
|
监控 NoSQL Redis
Redis主从、哨兵、 Cluster集群一锅端! 1
Redis主从、哨兵、 Cluster集群一锅端!