redis分布式及HA部署文档

2024-06-21 16:38
文章标签 文档 部署 redis 分布式 ha

本文主要是介绍redis分布式及HA部署文档,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文就官方redis分布式的部署进行总结说明,redis分布式中集成了高可用HA功能,依次进行说明,现对redis的分布式部署做以下总结。

  • 下载redis版本
    官方下载地址:http://download.redis.io/releases/redis-3.2.4.tar.gz

  • redis编译
    解压redis-3.2.4.tar.gz包,进入到redis-3.2.4
    我一般添加快捷方式:ln -s redis-3.2.4 redis
    进入redis目录的src下,执行:.configure完成编译即可

  • 部署环境说明
    参照官方说明,支持redis主备,最少部署六个节点,三主三备

mkdir redis-cluster
cd redis-cluster
mkdir 7000 7001 7002 7003 7004 7005

拷贝编译好的redis分别拷贝到7000,7001,7002,7003,7004,7005下面,见下图所示

这里写图片描述

分别进入到7000,7001,7002,7003,7004,7005的redis-3.2.4目录中,新建redis_cluster_7000.conf redis_cluster_7001.conf等文件,添加以下内容

redis_cluster_7000.conf配置文件如下所示
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes


redis_cluster_7001.conf配置文件如下所示
port 7001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

   依次类推即可。
  • 分别启动以上六个redis实例
    进入到7000/redis-3.2.4的src目录下,执行

../redis-server ./redis_cluster_7000.conf
../redis-server ./redis_cluster_7001.conf
../redis-server ./redis_cluster_7002.conf
../redis-server ./redis_cluster_7003.conf
../redis-server ./redis_cluster_7004.conf
../redis-server ./redis_cluster_7005.conf

备注:以上启动的六个redis之间没有任何的关系,都是独立的,下文介绍如何将六个redis实例变成3主三备。

  • 安装gem

yum install gem
在线安装失败后,可考虑离线安装

  • 创建redis集群
    进入到任意redis的src目录下,执行如下命令

gem install redis
#创建集群,replicas 1 代表每个节点创建几个备份
./redis-trib.rb create –replicas 1 127.0.0.1:7000 127.0.0.1:7001 \
127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005

  • 查看集群状态

使用如下命令:./redis-trib.rb check 127.0.0.1:7000
如下图所示
这里写图片描述
备注:3个master将16384个槽分配了,后续介绍redis如何将key存储到这些槽中。

  • 新增集群节点
  1. 开启两个redis实例,本文基于同一台机器部署,跨机器部署只需要修改ip就行,如下所示:
    ./redis-server ../redis_cluster_7006.conf &
    ./redis-server ../redis_cluster_7007.conf &
    启动后的redis进程如下图所示:
    这里写图片描述

2.将7006加入到集群中作为主节点:
src目录下执行:./redis-trib.rb add-node 127.0.0.1:7006 127.0.0.1:7000
这里写图片描述
查看集群状态:./redis-trib.rb check 127.0.0.1:7006
这里写图片描述
发现此时:7006已经成为了集群中一个主,但是没有分配一个槽,故此时连接7006操作的话,所有的请求都会转发到其他的solt槽去处理。
3.接下来我们给7006redis添加一个备
redis的src目录下执行:./redis-trib.rb add-node –slave –master-id e6aee83e740d7dc44afd563e4aa160378f5a4cdf 127.0.0.1:7007 127.0.0.1:7000
这里写图片描述
检查集群状态:
这里写图片描述
此时我们发现7007已经变成7006一个备了,但是7006还是没有被分配槽号,接下来我们操作如何进行solt的重分配。
以下命令solt槽的分配交由系统自动完成
./redis-trib.rb reshard 127.0.0.1:7000
这里写图片描述
配置部分截图:

# redis-trib.rb reshard 127.0.0.1:7000 
#下面是主要过程
How many slots do you want to move (from 1 to 16384)? 2000 
#设置slot数2000
What is the receiving node ID? 03ccad2ba5dd1e062464bc7590400441fafb63f2 
#新节点node id
Please enter all the source node IDs.Type 'all' to use all the nodes as source nodes for the hash slots.Type 'done' once you entered all the source nodes IDs.
Source node #1:all
#表示全部节点重新洗牌
Do you want to proceed with the proposed reshard plan (yes/no)? yes 
#确认重新分

再次查看集群状态
这里写图片描述
备注:分配成功

  • 异常总结
[ERR] Nodes don't agree about configuration!
>>> Check for open slots...
[WARNING] Node 127.0.0.1:7006 has slots in importing state (5608).
[WARNING] The following slots are open: 5608

出现这种情况:某个槽位号被打开了,解决方法
redis-trib.rb fix 127.0.0.1:7000

 #执行部分结果如下:[ERR] Nodes don't agree about configuration!
>>> Check for open slots...
[WARNING] Node 127.0.0.1:7006 has slots in importing state (5608).
[WARNING] The following slots are open: 5608
>>> Fixing open slot 5608
Set as migrating in: 
Set as importing in: 127.0.0.1:7006
>>> Moving all the 5608 slot keys to its owner 127.0.0.1:7001
Moving slot 5608 from 127.0.0.1:7006 to 127.0.0.1:7001: 
>>> ****Setting 5608 as STABLE in 127.0.0.1:7006****
>>> Check slots coverage...

由上可以,设置7006的5608槽为stable即可
具体操作如下:
这里写图片描述
再次查看集群,集群恢复正常!

这篇关于redis分布式及HA部署文档的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1081754

相关文章

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

SpringBoot配置Ollama实现本地部署DeepSeek

《SpringBoot配置Ollama实现本地部署DeepSeek》本文主要介绍了在本地环境中使用Ollama配置DeepSeek模型,并在IntelliJIDEA中创建一个Sprin... 目录前言详细步骤一、本地配置DeepSeek二、SpringBoot项目调用本地DeepSeek前言随着人工智能技

Redis 中的热点键和数据倾斜示例详解

《Redis中的热点键和数据倾斜示例详解》热点键是指在Redis中被频繁访问的特定键,这些键由于其高访问频率,可能导致Redis服务器的性能问题,尤其是在高并发场景下,本文给大家介绍Redis中的热... 目录Redis 中的热点键和数据倾斜热点键(Hot Key)定义特点应对策略示例数据倾斜(Data S

通过Docker Compose部署MySQL的详细教程

《通过DockerCompose部署MySQL的详细教程》DockerCompose作为Docker官方的容器编排工具,为MySQL数据库部署带来了显著优势,下面小编就来为大家详细介绍一... 目录一、docker Compose 部署 mysql 的优势二、环境准备与基础配置2.1 项目目录结构2.2 基

CentOS 7部署主域名服务器 DNS的方法

《CentOS7部署主域名服务器DNS的方法》文章详细介绍了在CentOS7上部署主域名服务器DNS的步骤,包括安装BIND服务、配置DNS服务、添加域名区域、创建区域文件、配置反向解析、检查配置... 目录1. 安装 BIND 服务和工具2.  配置 BIND 服务3 . 添加你的域名区域配置4.创建区域

redis+lua实现分布式限流的示例

《redis+lua实现分布式限流的示例》本文主要介绍了redis+lua实现分布式限流的示例,可以实现复杂的限流逻辑,如滑动窗口限流,并且避免了多步操作导致的并发问题,具有一定的参考价值,感兴趣的可... 目录为什么使用Redis+Lua实现分布式限流使用ZSET也可以实现限流,为什么选择lua的方式实现

Redis中管道操作pipeline的实现

《Redis中管道操作pipeline的实现》RedisPipeline是一种优化客户端与服务器通信的技术,通过批量发送和接收命令减少网络往返次数,提高命令执行效率,本文就来介绍一下Redis中管道操... 目录什么是pipeline场景一:我要向Redis新增大批量的数据分批处理事务( MULTI/EXE

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、

Redis中的常用的五种数据类型详解

《Redis中的常用的五种数据类型详解》:本文主要介绍Redis中的常用的五种数据类型详解,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Redis常用的五种数据类型一、字符串(String)简介常用命令应用场景二、哈希(Hash)简介常用命令应用场景三、列表(L

Redis解决缓存击穿问题的两种方法

《Redis解决缓存击穿问题的两种方法》缓存击穿问题也叫热点Key问题,就是⼀个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击,本文给大家介绍了Re... 目录引言解决办法互斥锁(强一致,性能差)逻辑过期(高可用,性能优)设计逻辑过期时间引言缓存击穿:给