返回顶部
首页 > 资讯 > 后端开发 > JAVA >Redis集群的三种配置方式案例
  • 785
分享到

Redis集群的三种配置方式案例

redis数据库java 2023-09-09 20:09:17 785人浏览 泡泡鱼
摘要

前言 Redis有三种集群模式: 主从复制哨兵(Sentinel)集群(Cluster) 💕主从复制 读写分离 在多个Redis实例建立起主从关系,当主redis 中的数据发生变化,从redis 中的数据也会同步变化。 通

前言

Redis有三种集群模式:

  • 主从复制
  • 哨兵(Sentinel)
  • 集群(Cluster)

💕主从复制 读写分离

在多个Redis实例建立起主从关系,当主redis 中的数据发生变化,从redis 中的数据也会同步变化。

通过主从配置可以实现redis数据的备份(从redis就是对主redis的备份),保证数据的安全性;通过主从配置可以实现redis的读写分离

 条件有限我是在一台机器上演示的😆,使用多个不同的redis.conf来启动服务,相当于多台redis,我这里就用3个redis服务来演示,我使用的redis 版本是5.0.5,废话少说开始演示。

💕1.在redis目录创建文件夹存放主从复制的配置

mkdir msconf

💕2.把redis目录下的redis.conf复制到msconf,作为主服务的配置

cp redis.conf  msconf/redis-master.conf

💕3.修改redis-master.conf配置

port 6380pidfile /var/run/redis_6380.piddump_6380.rdbappendonly_6380.aof

 在拷贝2份作为slave从服务端口(6381,6382),直接使用快捷操作,省的修改端口号

sed 's/6380/6381/g' redis-master.conf > redis-slave1.confsed 's/6380/6382/g' redis-master.conf > redis-slave1.conf

💕4.修改slave配置文件,跟从 6380

slaveof 127.0.0.1 6380  #master的ip、端口,我redis都在本机所有可以写127.0.0.1masterauth 123456  #这个是master的密码

💕5.根据配置启动三个redis实例

redis-server redis-master.conf &redis-server redis-slave1.conf &redis-server redis-slave2.conf &

启动slave节点的时候发现日志中连接master节点

💕6.测试

在主(master)写入数据,在slave1、slave2中查询


👮‍♂️哨兵模式(高可用)

        主从切换技术的⽅法是:当主服务器宕机后,需要⼿动把⼀台从服务器切换为主服务器,这就需要⼈⼯⼲预,费事费⼒,还会造成⼀段时间内服务不可⽤。这不是⼀种推荐的⽅式,更多时候,我们优先考虑哨兵模式。Redis从2.8开始正式提供了Sentinel(哨兵) 架构来解决这个问题。谋朝篡位的⾃动版,能够后台监控主机是否故障,如果故障了根据投票数⾃动将从库转换为主库。哨兵模式是⼀种特殊的模式,⾸先Redis提供了哨兵的命令,哨兵是⼀个独⽴的进程,作为进程,它会独⽴运⾏。其原理是哨兵通过发送命令,等待Redis服务器响应,从⽽监控运⾏的多个Redis实例

 

 这⾥的哨兵有两个作⽤

 通过发送命令,让Redis服务器返回监控其运⾏状态,包括主服务器和从服务器。

当哨兵监测到master宕机,会⾃动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置⽂件,让它们切换主机。然⽽⼀个哨兵进程对Redis服务器进⾏监控,可能会出现问题,为此,我们可以使⽤多个哨兵进⾏监控。各个哨兵之间还会进⾏监控,这样就形成了多哨兵模式

 假设主服务器宕机,哨兵1先检测到这个结果,系统并不会⻢上进⾏failover过程,仅仅是哨兵1主观的认为主服务器不可⽤,这个现象成为主观下线。当后⾯的哨兵也检测到主服务器不可⽤,并且数量达到⼀定值时,那么哨兵之间就会进⾏⼀次投票,投票的结果由⼀个哨兵发起,进⾏failover[故障转移]操作。切换成功后,就会通过发布订阅模式,让各个哨兵把⾃⼰监控的从服务器实现切换主机,这个过程称为客观下线。

👮‍♂️哨兵配置前提 

  1. 首先完成主从配置
  2. 创建并启动三个哨兵

👮‍♂️1.创建文件夹、拷贝sentinel.conf文件

mkdir sentinelcnf  #创建存放哨兵配置文件夹cp sentinel.conf sentinelcnf/sentinel-26380.conf  #复制哨兵配置模板

👮‍♂️2.修改配置文件

vim sentinel-26380.conf#修改内容:port  26380  #哨兵端口pidfile /var/run/redis-sentinel-26380.pidsentinel monitor mymaster 127.0.0.1 6380 2      #127.0.0.1 6380:监听主  2:有几个哨兵确认他宕机就是真的宕机,一般写n+1 一半多一个,例如有3个哨兵他的一般就是1+1就写2,例如5个哨兵一般就是2+1,就写3sentinel auth-pass     #redis密码  sentinel auth-pass mymaster 123456

👮‍♂️3.快捷拷贝另外2个哨兵配置

sed 's/26380/26381/g' sentinel-26380.conf > sentinel-26381.confsed 's/26380/26382/g' sentinel-26380.conf > sentinel-26382.conf

编辑每个sentinel.conf 配置

vim sentinel-26380.conf#删除sentinel myid 1552e6c9be7f8294d0ef8d90c8ef6b590c708c30  #这行没用可以删除#添加sentinel down-after-milliseconds mymaster 30000   #mymaster30秒没有响应就确认它宕机了,mymaster 是自定义的根据sentinel monitor mymaster 127.0.0.1 6380 2 来确定的

sentinel-26381.conf、sentinel-26382.conf 也是一样的操作

👮‍♂️4.安装指令

yum install -y lsof

👮‍♂️5.停止redis服务(没有启动可以无视)

lsof -i:6380  #查看pidkill -9 pid  #关闭服务

把6381、6382也关了

👮‍♂️6.启动Redis

复制三个窗口来操作

进入redis 目录

主操作:

cd /usr/local/redis-5.0.5/msconf/redis-server redis-master.conf 

从1操作:

cd /usr/local/redis-5.0.5/msconf/ redis-server redis-slave1.conf

从2操作:

cd /usr/local/redis-5.0.5/msconf/ redis-server redis-slave2.conf

👮‍♂️7.启动哨兵

复制三个窗口

启动哨兵1:

redis-sentinel /usr/local/redis-5.0.5/sentinelcnf/sentinel-26380.conf 

启动时监听到了主从

 启动哨兵2、3

redis-sentinel /usr/local/redis-5.0.5/sentinelcnf/sentinel-26381.conf redis-sentinel /usr/local/redis-5.0.5/sentinelcnf/sentinel-26382.conf 

每个哨兵能监听到主从、以及其他哨兵的加入

 👮‍♂️测试

停止(mester)6380

从(slave)节点的日志开始报错,尝试连接主被拒绝

 2.因为设置的30秒,等待30秒查看哨兵日志...

 slave:6381的日志,直接连接到了新主6382了


👨‍👨‍👦‍👦Cluster模式(高可用、高并发同时支持)

说明

  • 每个Redis节点必须要有一个备机,例如搭建3个节点的集群就要有6个redis实例
  • 数据按照slots分布式存储在不同的redis节点上,节点中的数据可共享,可以动态调整数据的分布
  • 可扩展性强,可以动态增删节点 ,最多可扩展1000+节点
  • 集群每个节点通过主备(哨兵模式),可以保证其高可用性

👨‍👨‍👦‍👦1.创建文件夹

由于我是单机里面操作启动6个redis 所有创建这个文件夹统一放6个redis配置文件

mkdir cluster-conf

👨‍👨‍👦‍👦2.拷贝一个配置文件

cat redis.conf | grep -v "#"|grep -v "^$" > cluster-conf/redis-7001.conf

命令解读:

  • cat redis.conf:读取redis.conf文件
  • grep -v "#":去除文件中包含#的所在行
  • grep -v "^$" :去除空格
  • > cluster-conf/redis-7001.conf:写到cluster-conf目录下的redis-7001.conf文件里面

redis.conf文件内容:

 过滤注释的行和换行后的redis-7001.conf:

👨‍👨‍👦‍👦3.编辑配置

 编辑redis-7001.conf,修改文件中这些内容,成这样的结果

protected-mode noport 7001#bind 127.0.0.1pidfile /var/run/redis_7001.piddbfilename dump_7001.rdbappendfilename "appendonly_7001.aof"#下面4个是集群主要配置clusterd-enable yes  #开启支持集群开关cluster-config-file nodes-7001.conf  cluster-node-timeout 15000daemonize yes

👨‍👨‍👦‍👦4.拷贝其它配置5

上面以及配置了一份还需5份配置,端口分别是7002~7006

sed 's/7001/7002/g' redis-7001.conf > redis-7002.conf sed 's/7001/7003/g' redis-7001.conf > redis-7003.conf sed 's/7001/7004/g' redis-7001.conf > redis-7004.conf sed 's/7001/7005/g' redis-7001.conf > redis-7005.conf sed 's/7001/7006/g' redis-7001.conf > redis-7006.conf 

👨‍👨‍👦‍👦5.启动6个实例

注意:记得开放对应端口,安全组,防火墙(不止要放行7001~7006,因为这个是我们redis 设置端口,但是集群节点相互发现使用的端口是原端口号加一万,那就也得放行17001~17006),否则在第六步会一直卡在 Waiting for the cluster to join ....

redis-server redis-7001.conf &redis-server redis-7002.conf &redis-server redis-7003.conf &redis-server redis-7004.conf &redis-server redis-7005.conf &redis-server redis-7006.conf &

再次查看,多了6个nodes的配置文件

查看6个实例是否启动 ps -ef | grep redis

👨‍👨‍👦‍👦6.启动集群

语法:redis-cli --cluster create --cluster-replicas [几个备机] -a [密码没有可省略] [ip:端口...]

备机要和总数除得进,例如6个redis实例,1个备机,最终结果是3个实例,3个备机,一个实例和一个备机一组,总共三组

redis-cli --cluster create --cluster-replicas 1 -a 123456 182.61.29.144:7001 182.61.29.144:7002 182.61.29.144:7003 182.61.29.144:7004 182.61.29.144:7005 182.61.29.144:7006 

如下图:筛选出了3个主,3个备,并且指定了谁是谁的主

 然后是否确认上面的配置,确认输入 "yes" 成功如下

👨‍👨‍👦‍👦7.进入客户端

1 进入

redis-cli -p 7001 #此方法启动是只能进入7001,并且里面的操作是单节点操作,其他节点拿不到redis-cli -p 7001 -c   #此方法才是以集群方式进入

2 进入后输入密码才能操作

auth redis密码

3写入值

set k1 666

可能出现异常:

-> Redirected to slot [12706] located at 182.61.29.144:7003

(error) NOAUTH Authentication required.

原因:每次重定向需要输入密码,需要在客户端登录时配置 -a,退出redis客户端重新使用如下命令进入

redis-cli -c -p 7001 -a 123456

4 继续尝试7.3步骤写入成功,在尝试多写入几个值,如下图,发现 【k1写到了7003,k2写到了7001,k3也是】

 7.5 查询所有keys

keys *

结果和上面写入时一样,因为k1写到了7003,所有7001只能查询到k2、k3

 但是直接get k1 还是可以拿到值的,直接从7003拿,这就证明配置成功!


🐱‍🏍集群管理

🐱‍🏍查看集群状态

语法:redis-cli --cluster info ip:端口  -a 密码示例:redis-cli --cluster info 182.61.29.144:7001 -a 123456

🐱‍🏍平衡节点槽数量

  • 数据槽的迁移可能会导致数据量不平衡,使用如下命令(把7001节点中的槽的数量做到相对统一),作用:每个节点的存储,检索效率相对一致
 redis-cli --cluster rebalance  182.61.29.144:7001 -a 123456

🐱‍🏍迁移节点槽

  • 在这个集群中有3个节点,我想把7001干掉,但是它有数据,所有要把数据迁移到其他节点,我这里案例就迁移到7002

 

 

 命令:

redis-cli --cluster reshard 182.61.29.144:7001 -a 123456How many slots do you want to move (from 1 to 16384)? 5461   #要迁移几个槽What is the receiving node ID? a5dba591a312fd1f7cd45aa681736ffe5d7cd921  #迁移到那个节点,输入对应节点的IdSource node #1: 8bca11ccef368d7df3Dc6603fc424a271a070155   #那个槽要被迁移,输入对应的iddone   #完毕

然后出现是否执行输入yes

 执行完毕后查看集群状态

 如上图,7001已经没有槽了,但是7002槽很多,此时输入平衡节点槽命令

 再次查看状态,发现槽数量平衡了

🐱‍🏍删除节点

删除条件:没有数据槽,需要输入节点id

节点id可以使用迁移数据槽的命令来查看,如下图

 语法:

redis-cli --cluster del-node (id:端口) (节点id) -a (密码没有可忽略)

redis-cli --cluster del-node 182.61.29.144:7001 8bca11ccef368d7df3dc6603fc424a271a070155 -a 123456

 再次查看集群状态,这次命令就不能用7001会报错 redis-cli --cluster info 182.61.29.144:7002 -a 123456 发现7001没了

 注意:删除节点会顺便帮你关闭这个节点的服务

🐱‍🏍添加节点

先启动节点

redis-server  /usr/local/redis-5.0.5/cluster-conf/redis-7001.conf &

在添加

语法:redis-cli --cluster add-node (要加入的ip:端口) (加入的集群,有7002、7003随便输入一个都可以) [-a 密码]

redis-cli --cluster add-node 182.61.29.144:7001    182.61.29.144:7002 -a 123456

 再次查看状态,如下图,存在了7001


🤣主从复制和集群的区别

  • 主从复制:一个负责写,N个负责读
  • 集群:每个实例都可以进行读写

高可用:保证redis一直处于可用状态,即使出现了故障也有方案保证可用性

高并发:一个redis实例已经可以支持多大11W并发读操作,或者8.1W并发写操作;但是如果对于有更高并发需求的应用来说,可以通过读写分离、集群配置


🤼‍♂️SpringBoot 连接集群

    org.springframework.boot    spring-boot-starter-data-redis

 原始连接配置:

spring:  redis:    host: 182.61.29.144    passWord: 123456

集群连接配置

spring:  redis:    cluster:      nodes: 182.61.29.144:7001,182.61.29.144:7002,182.61.29.144:7003      max-redirects: 3  #连接失败的时候重试几次    password: 123456

测试

@Autowiredprivate StringRedisTemplate stringRedisTemplate;@Testpublic void test2() {   stringRedisTemplate.opsForValue().set("s1", "222");   String s1 = stringRedisTemplate.opsForValue().get("s1");   System.out.println("s1 = " + s1);}

进入redis 查看

 这是小编在开发学习使用和总结的小Demo,  这中间或许也存在着不足,希望可以得到大家的理解和建议。如有侵权联系小编!

来源地址:https://blog.csdn.net/weixin_46522803/article/details/126929302

--结束END--

本文标题: Redis集群的三种配置方式案例

本文链接: https://lsjlt.com/news/401879.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Redis集群的三种配置方式案例
    前言 Redis有三种集群模式: 主从复制哨兵(Sentinel)集群(Cluster) 💕主从复制 读写分离 在多个redis实例建立起主从关系,当主redis 中的数据发生变化,从redis 中的数据也会同步变化。 通...
    99+
    2023-09-09
    redis 数据库 java
  • 详解redis集群的三种方式
    目录主从复制基本原理持久化开关配置哨兵模式基本原理启动配置故障迁移Cluster集群键分布模型配置cluster集群启动集群Redis三种集群方式:主从复制,哨兵模式,Cluster集群。 主从复制 基本原理 当新建立...
    99+
    2022-07-25
    redis集群 redis集群方式
  • Redis集群搭建的三种方式
    Redis集群搭建的三种方式@TOC 1.Redis主从 1.1 Redis主从原理 和MySQL需要主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生性能瓶颈,特别是在读压力上,...
    99+
    2023-09-15
    redis java linux
  • 一文掌握Redis的三种集群方案
    在开发测试环境中,我们一般搭建Redis的单实例来应对开发测试需求,但是在生产环境,如果对可用性、可靠性要求较高,则需要引入Redis的集群方案。虽然现在各大云平台有提供缓存服务可以直接使用,但了解一下其背后的实现与原理总还是有些...
    99+
    2021-08-29
    一文掌握Redis的三种集群方案
  • 详解Redis集群搭建的三种方式
    目录一、单节点实例二、主从模式(master/slaver)三、sentinel 模式四、cluster 模式一、单节点实例 单节点实例还是比较简单的,平时做个测试,写个小程序如果需...
    99+
    2024-04-02
  • Redis三种集群模式详解
    目录三种集群模式一、主从复制1、reids主从模式2、redis复制原理 3、redis主从复制原理 4、redis主从复制优缺点二、Sentinel 哨兵模式1、Sentinel系...
    99+
    2024-04-02
  • Redis三种集群模式是什么
    本文小编为大家详细介绍“Redis三种集群模式是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Redis三种集群模式是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 ...
    99+
    2024-04-02
  • 比较几种Redis集群方案
    目录一、概述二、Redis高可用集群搭建三、Redis集群节点间的通信机制3.1、集中式3.2、gossip四、网络抖动五、Redis集群选举原理分析5.1、集群是否完整才能对外提供...
    99+
    2024-04-02
  • redis集群方案的示例分析
    这篇文章主要为大家展示了“redis集群方案的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“redis集群方案的示例分析”这篇文章吧。一、主从模式将数据...
    99+
    2024-04-02
  • 一文带你了解Redis的三种集群模式
    目录Redis 的三种集群模式主从复制模式哨兵模式Redis-Cluster集群模式小结Redis 的三种集群模式 Redis 的常用的集群方式主要有以下三种,分别是主从复制模式、哨兵模式、Redis-Cluster集群...
    99+
    2023-06-10
    Redis的三种集群模式 Redis 集群模式
  • Redis中常见的几种集群部署方案
    目录前言几种常用的集群方案主从集群模式全量同步增量同步举个栗子哨兵机制什么是哨兵机制如何保证选主的准确性如何选主选举主节点的规则哨兵进行主节点切换切片集群Redis Cluster方...
    99+
    2024-04-02
  • redis集群分配哈希槽的方式
    重新分配哈希曹:ip:port 为当前redis集群任意节点ip和portredis-cli --cluster reshard ip:port操作如图:分配哈希槽有两种方式:1、在其他节点拿出适量的哈希...
    99+
    2024-04-02
  • redis集群配置的方法是什么
    在Redis中配置集群需要进行以下步骤: 启动集群模式:首先需要修改Redis的配置文件,将cluster-enabled设置为...
    99+
    2024-04-02
  • Redis集群主从模式怎么配置
    这篇文章主要介绍“Redis集群主从模式怎么配置”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Redis集群主从模式怎么配置”文章能帮助大家解决问题。一、为什么需要...
    99+
    2024-04-02
  • springboot redis集群配置的方法是什么
    要配置Spring Boot中的Redis集群,可以使用以下方法:1. 添加Redis依赖项:在`pom.xml`文件中添加Spri...
    99+
    2023-09-16
    springboot redis
  • 搭建配置redis集群的步骤
    这期内容当中的小编将会给大家带来有关搭建配置redis集群的步骤,以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Redis集群至少需要3个节点,因为投票容错机制要求超过半数节点认为某个节...
    99+
    2024-04-02
  • Redis集群高可用配置的方法是什么
    Redis集群高可用配置的方法有以下几种: 主从复制:通过配置Redis实例的主从关系,主节点负责写操作,从节点负责读操作和主节...
    99+
    2023-10-24
    Redis
  • MySQL集群的配置方法
    本篇内容介绍了“MySQL集群的配置方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 一、介绍 ==...
    99+
    2024-04-02
  • Redis高可用集群的搭建配置
    这篇文章将为大家详细讲解有关Redis高可用集群的搭建配置,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Redis的集群主从模型是一种高可用的集群架构。本章主要内容有:高...
    99+
    2024-04-02
  • SpringMVC集成redis配置的多种实现方法
    第一步:下载并安装Redis(网上已经有很多安装教程在此不细讲了) 第二步:pom文件引入jar包 在此需要注意Redis和jedis连接工厂版本 redsi:https://mvn...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作