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

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
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
相关文章
|
3月前
|
监控 NoSQL Redis
看完这篇就能弄懂Redis的集群的原理了
看完这篇就能弄懂Redis的集群的原理了
102 0
|
23天前
|
监控 NoSQL 算法
Redis Sentinel(哨兵)详解
Redis Sentinel(哨兵)详解
|
2月前
|
存储 NoSQL Redis
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
Redis持久化、RDB和AOF方案、Redis主从集群、哨兵、分片集群、散列插槽、自动手动故障转移
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
|
3月前
|
SQL 存储 NoSQL
Redis6入门到实战------ 一、NoSQL数据库简介
这篇文章是关于NoSQL数据库的简介,讨论了技术发展、NoSQL数据库的概念、适用场景、不适用场景,以及常见的非关系型数据库。文章还提到了Web1.0到Web2.0时代的技术演进,以及解决CPU、内存和IO压力的方法,并对比了行式存储和列式存储数据库的特点。
Redis6入门到实战------ 一、NoSQL数据库简介
|
3月前
|
运维 监控 NoSQL
【Redis】哨兵(Sentinel)原理与实战全解~炒鸡简单啊
Redis 的哨兵模式(Sentinel)是一种用于实现高可用性的机制。它通过监控主节点和从节点,并在主节点故障时自动进行切换,确保集群持续提供服务。哨兵模式包括主节点、从节点和哨兵实例,具备监控、通知、自动故障转移等功能,能显著提高系统的稳定性和可靠性。本文详细介绍了哨兵模式的组成、功能、工作机制以及其优势和局限性,并提供了单实例的安装和配置步骤,包括系统优化、安装、配置、启停管理和性能监控等。此外,还介绍了如何配置主从复制和哨兵,确保在故障时能够自动切换并恢复服务。
|
3月前
|
NoSQL Redis
Redis——单机迁移cluster集群如何快速迁移
Redis——单机迁移cluster集群如何快速迁移
110 0
|
3月前
|
NoSQL Linux Redis
使用docker-compose搭建redis-cluster集群
使用docker-compose搭建redis-cluster集群
479 0
|
存储 NoSQL 网络安全
Redis安装(单机、主从、哨兵、集群)
Redis安装(单机、主从、哨兵、集群)
164 1
|
6月前
|
缓存 NoSQL 应用服务中间件
分布式缓存之Redis(持久化、主从、哨兵、分片集群)
分布式缓存之Redis(持久化、主从、哨兵、分片集群)
|
12月前
|
NoSQL 编译器 Redis
轻松掌握组件启动之Redis单机、主从、哨兵、集群配置
这篇文章介绍了Redis的单机配置启动和主从架构、哨兵、集群搭建方法。无论你是初学者还是有一定经验的开发者,这篇文章都能为你提供实用的指导,让你轻松掌握Redis的配置和架构搭建。
137 0