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

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 【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的主从复制、哨兵模式以及集群模式;我们需要了解并掌握其原理,以及知道是如何进行配置的。


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
1天前
|
存储 监控 NoSQL
Redis哨兵&分片集群
Redis哨兵&分片集群
6 0
|
1天前
|
存储 NoSQL 算法
Redis持久化&Redis主从
Redis持久化&Redis主从
10 0
|
2天前
|
NoSQL Linux Redis
本地虚拟机centos7通过docker安装主从redis3.2
本地虚拟机centos7通过docker安装主从redis3.2
|
3天前
|
NoSQL 算法 Java
深入浅出Redis(八):Redis的集群模式
深入浅出Redis(八):Redis的集群模式
|
3天前
|
负载均衡 NoSQL 关系型数据库
深入浅出Redis(六):Redis的主从架构与主从复制原理
深入浅出Redis(六):Redis的主从架构与主从复制原理
|
8天前
|
NoSQL Redis
透视Redis集群:心跳检测如何维护高可用性
Redis心跳检测保障集群可靠性,通过PING命令检测主从连接状态,预防数据丢失。当连接异常时,自动触发主从切换。此外,心跳检测辅助实现`min-slaves-to-write`和`min-slaves-max-lag`策略,避免不安全写操作。还有重传机制,确保命令无丢失,维持数据一致性。合理配置心跳检测,能有效防止数据问题,提升Redis集群的高可用性。关注“软件求生”获取更多Redis知识!
109 10
透视Redis集群:心跳检测如何维护高可用性
|
11天前
|
监控 NoSQL 算法
Redis集群模式:高可用性与性能的完美结合!
小米探讨Redis集群模式,通过一致性哈希分散负载,主从节点确保高可用性。节点间健康检测、主备切换、数据复制与同步、分区策略和Majority选举机制保证服务可靠性。适合高可用性及性能需求场景,哨兵模式则适用于简单需求。一起学习技术的乐趣!关注小米微信公众号“软件求生”获取更多内容。
44 11
Redis集群模式:高可用性与性能的完美结合!
|
存储 NoSQL Redis
NoSQL-Redis入门(二)
Redis要点: 1.关键字(keys)用于标识一段数据的字符串 2.值(values)是一段任意的字节序列,Redis不会关注他们实质是什么 3.Redis展示了5种专门的数据结构 4.上面几点使得Redis快速而且容易使用,但Redis不适用于所有的应用场景 1.Redis的数据结构 每种数据结构的要点包括: 1.是什么? 2.包含的有效方法 3.使用这些数据结构能处理哪些类型的特性和数据 1.1 字符串(String) 在Redis里,字符串是最基本的数据结构。
973 0
|
SQL Web App开发 NoSQL
NoSQL-Redis入门(一)
从这篇开始记录Redis相关知识: 1 NoSQL是什么?1.1 NoSQL特性 1.1.1 易扩展 1.1.2 大数据量与高性能1.2 RDBMS vs NoSQL1.
1467 0
|
1月前
|
存储 NoSQL 算法
09- Redis分片集群中数据是怎么存储和读取的 ?
Redis分片集群使用哈希槽分区算法,包含16384个槽(0-16383)。数据存储时,通过CRC16算法对key计算并模16383,确定槽位,进而分配至对应节点。读取时,根据槽位找到相应节点直接操作。
66 12