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

相关文章

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

Redis中的AOF原理及分析

《Redis中的AOF原理及分析》Redis的AOF通过记录所有写操作命令实现持久化,支持always/everysec/no三种同步策略,重写机制优化文件体积,与RDB结合可平衡数据安全与恢复效率... 目录开篇:从日记本到AOF一、AOF的基本执行流程1. 命令执行与记录2. AOF重写机制二、AOF的

Java 线程池+分布式实现代码

《Java线程池+分布式实现代码》在Java开发中,池通过预先创建并管理一定数量的资源,避免频繁创建和销毁资源带来的性能开销,从而提高系统效率,:本文主要介绍Java线程池+分布式实现代码,需要... 目录1. 线程池1.1 自定义线程池实现1.1.1 线程池核心1.1.2 代码示例1.2 总结流程2. J

使用EasyPoi快速导出Word文档功能的实现步骤

《使用EasyPoi快速导出Word文档功能的实现步骤》EasyPoi是一个基于ApachePOI的开源Java工具库,旨在简化Excel和Word文档的操作,本文将详细介绍如何使用EasyPoi快速... 目录一、准备工作1、引入依赖二、准备好一个word模版文件三、编写导出方法的工具类四、在Export

利用Python操作Word文档页码的实际应用

《利用Python操作Word文档页码的实际应用》在撰写长篇文档时,经常需要将文档分成多个节,每个节都需要单独的页码,下面:本文主要介绍利用Python操作Word文档页码的相关资料,文中通过代码... 目录需求:文档详情:要求:该程序的功能是:总结需求:一次性处理24个文档的页码。文档详情:1、每个

C++读写word文档(.docx)DuckX库的使用详解

《C++读写word文档(.docx)DuckX库的使用详解》DuckX是C++库,用于创建/编辑.docx文件,支持读取文档、添加段落/片段、编辑表格,解决中文乱码需更改编码方案,进阶功能含文本替换... 目录一、基本用法1. 读取文档3. 添加段落4. 添加片段3. 编辑表格二、进阶用法1. 文本替换2