今天从 0 开始搭建 Redis Cluster 官方集群,解决搭建过程中遇到的问题,超详细。

旧版本使用 redis-trib.rb ruby 脚本安装集群,5.0版本redis-cli 已经自带 创建集群功能了

安装redis库

$ yum install redis

搭建集群

1、创建集群目录

首先进入一个新目录,创建六个以端口号为名字的子目录。

$ mkdir redis-cluster
$ cd redis-cluster
$ mkdir 9001 9002 9003 9004 9005 9006
2、添加集群配置文件

在文件夹9001~9006中各建一个redis.conf文件,修改对应文件夹的端口,内容如下:

daemonize yes
port 9001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
  • cluster-enabled:用于开实例的集群模式
  • cluster-conf-file:设定了保存节点配置文件的路径,默认值为nodes.conf,节点配置文件无须人为修改,它由 Redis集群在启动时创建, 并在有需要时自动进行更新。

要让集群正常运作至少需要三个主节点,不过在刚开始试用集群功能时, 强烈建议使用六个节点: 其中三个为主节点, 而其余三个则是各个主节点的从节点。

配置文件示例

3、添加redis服务文件

把编译好的redis-server文件复制到redis-cluster文件夹中。

4、启动集群实例

进入到9001~90066每个目录下,启动每个实例:

cd 9001 && redis-server redis.conf
cd ../9002 && redis-server redis.conf
cd ../9003 && redis-server redis.conf
cd ../9004 && redis-server redis.conf
cd ../9005 && redis-server redis.conf
cd ../9006 && redis-server redis.conf
cd ..
5、创建集群

现在我们已经有了六个正在运行中的Redis实例,接下来我们需要使用这些实例来创建集群,并为每个节点编写配置文件。通过使用Redis集群命令行工具redis-trib,编写节点配置文件的工作可以非常容易地完成:redis-trib位于Redis源码的src文件夹中,它是一个Ruby程序,这个程序通过向实例发送特殊命令来完成创建新集群,检查集群,或者对集群进行重新分片(reshared)等工作。

redis-cli --cluster create 127.0.0.1:9001 127.0.0.1:9002 127.0.0.1:9003 127.0.0.1:9004 127.0.0.1:9005 127.0.0.1:9006 --cluster-replicas 1

这表示集群中的 16384 个槽都有至少一个主节点在处理, 集群运作正常。

运行结果

6、查看集群节点

连接使用集群

$ ./redis-cli -c -h 192.168.1.8 -p 9002 -a 123456

-c:cluster,连接到集群模式,否则key不落在本实例将会报错。

-h:host,指定连接主机。

-p:port,指定连接端口。

-a:auth,指定密码,集群模式需要指定,不然移动会认证失败。

$ ./redis-cli -c -h 192.168.1.8 -p 9002 -a 123456127.0.0.1:9002> set hnad 21233-> Redirected to slot [2114] located at 127.0.0.1:9001OK

如上,键hnad被转移到实例9001。

主从复制不能同步问题解决

搭建一个3主3从的Redis Cluster集群发现从实例不能同步主实例的数据,但确认搭建的步骤和参数都没啥问题啊,官网也没有给出对应的问题解决方案。

解决方案

后来查各种资料发现,是因为主实例设置了密码,从实例配置中需要配置主实例的连接密码才能实现主从复制同步。

就是下面这个配置:

# If the master is password protected (using the "requirepass" configuration# directive below) it is possible to tell the slave to authenticate before# starting the replication synchronization process, otherwise the master will# refuse the slave request.## masterauth <master-password>

翻译:

如果master是密码保护的,下面的配置就是可以告诉从实例在启动集群同步复制进程之前要经过认证,否则主实例会拒绝从实例的请求。

解决流程

所以,要解决不同步问题,先停止6个从实例,然后在每个实例的redis.conf文件中加入对应主备实例的认证密码,然后再启动各个从实例。如:

masterauth 123456

然后主实例上的数据实时变化都会同步到从实例,问题解决。

官方集群创建实例

实例位置 redis\utils\create-cluster

#!/bin/bash# Settings
PORT=30000
TIMEOUT=2000
NODES=6
REPLICAS=1# You may want to put the above config parameters into config.sh in order to
# override the defaults without modifying this script.if [ -a config.sh ]
thensource "config.sh"
fi# Computed vars
ENDPORT=$((PORT+NODES))if [ "$1" == "start" ]
thenwhile [ $((PORT < ENDPORT)) != "0" ]; doPORT=$((PORT+1))echo "Starting $PORT"../../src/redis-server --port $PORT --cluster-enabled yes --cluster-config-file nodes-${PORT}.conf --cluster-node-timeout $TIMEOUT --appendonly yes --appendfilename appendonly-${PORT}.aof --dbfilename dump-${PORT}.rdb --logfile ${PORT}.log --daemonize yesdoneexit 0
fiif [ "$1" == "create" ]
thenHOSTS=""while [ $((PORT < ENDPORT)) != "0" ]; doPORT=$((PORT+1))HOSTS="$HOSTS 127.0.0.1:$PORT"done../../src/redis-cli --cluster create $HOSTS --cluster-replicas $REPLICASexit 0
fiif [ "$1" == "stop" ]
thenwhile [ $((PORT < ENDPORT)) != "0" ]; doPORT=$((PORT+1))echo "Stopping $PORT"../../src/redis-cli -p $PORT shutdown nosavedoneexit 0
fiif [ "$1" == "watch" ]
thenPORT=$((PORT+1))while [ 1 ]; docleardate../../src/redis-cli -p $PORT cluster nodes | head -30sleep 1doneexit 0
fiif [ "$1" == "tail" ]
thenINSTANCE=$2PORT=$((PORT+INSTANCE))tail -f ${PORT}.logexit 0
fiif [ "$1" == "call" ]
thenwhile [ $((PORT < ENDPORT)) != "0" ]; doPORT=$((PORT+1))../../src/redis-cli -p $PORT $2 $3 $4 $5 $6 $7 $8 $9doneexit 0
fiif [ "$1" == "clean" ]
thenrm -rf *.logrm -rf appendonly*.aofrm -rf dump*.rdbrm -rf nodes*.confexit 0
fiif [ "$1" == "clean-logs" ]
thenrm -rf *.logexit 0
fiecho "Usage: $0 [start|create|stop|watch|tail|clean]"
echo "start       -- Launch Redis Cluster instances."
echo "create      -- Create a cluster using redis-cli --cluster create."
echo "stop        -- Stop Redis Cluster instances."
echo "watch       -- Show CLUSTER NODES output (first 30 lines) of first node."
echo "tail <id>   -- Run tail -f of instance at base port + ID."
echo "clean       -- Remove all instances data, logs, configs."
echo "clean-logs  -- Remove just instances logs."
  • start 启动本地的6个测试实例 port 30000 自增

  • create 创建redis集群

springboot配置Redis哨兵主从服务 以及 Redis 集群

参考:
https://andyoung.blog.csdn.net/article/details/114069945

超详细的 Redis Cluster 官方集群搭建指南,适用于 redis 5.x, 6.x相关推荐

  1. 超详细的 Redis Cluster 官方集群搭建指南

    转载自  超详细的 Redis Cluster 官方集群搭建指南 今天从 0 开始搭建 Redis Cluster 官方集群,解决搭建过程中遇到的问题,超详细. 安装ruby环境 因为官方提供的创建集 ...

  2. Docker下Redis Cluster分片集群的搭建、基本操作、集群扩容和集群故障转移(非关系型数据库技术课程 第九周)

    文章目录 Docker 下Redis Cluster 分片集群搭建 1. Cluster 分片集群 1.1 Cluster 集群的结构和作用 1.2 Cluster 分片集群 的作用 1.3哈希槽(h ...

  3. Redis 多服务器集群搭建

    Redis 多服务器集群搭建 近期,想到之前使用的Redis集群测试使用的是单服务器上的伪集群,重温<Redis深度历险-核心原理与应用实践>的案例,觉得还是搭建一下多服务器集群来玩一玩会 ...

  4. Redis HA篇 +集群搭建

    说明:本文为面向Redis集群搭建的指导手册 标签:Redis集群.Redis高可用.Redis分布式.Redis 4.0.2 注意:文中删去了不需要的多余部分,让初学者一目了然一学就会 温馨提示:如 ...

  5. Redis Cluster 伪集群的搭建

    简介 为何要搭建Redis集群?Redis是在内存中保存数据的,而我们的电脑一般内存都不大,这也就意味着Redis不适合存储大数据,适合存储大数据的是Hadoop生态系统的Hbase或者是MogoDB ...

  6. 【❤️万字长文总结❤️】一篇学会Redis高可用✔集群✔搭建详细教程

    大家好,我是Lex 喜欢欺负超人那个Lex 擅长领域:python开发.网络安全渗透.Windows域控Exchange架构 今日重点:今天总结一下Redis集群高可用的搭建流程 [惊喜推荐+优质资源 ...

  7. redis高可用集群搭建

    上篇博客记录了哨兵模式的集群搭建,今天搭建高可用的redis集群以及两种集群架构的对比. 搭建集群(参考redis官方文档) 1.在redis目录中创建cluster目录,cluster下分别创建存放 ...

  8. redis入门及其集群搭建、哨兵模式

    一.Nosql概述 1.为什么要用Nosql 1.1 单机 MySQL 的美好时代 来源博客(https://www.cnblogs.com/lukelook/p/11135209.html) 在90 ...

  9. redis安装、集群搭建等

    1 Redis介绍 1.1 什么是NoSql 为了解决高并发.高可扩展.高可用.大数据存储问题而产生的数据库解决方案,就是NoSql数据库. NoSQL,泛指非关系型的数据库,NoSQL即Not-On ...

最新文章

  1. gvim中进行verilog语言信号追踪、显示拓扑插件
  2. python输出中文加数字_python处理“#”开头加数字的html字符方法
  3. different application signatures解决方法
  4. 2018 Multi-University Training Contest 10 - CSGO
  5. 使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(一)-- 起步
  6. java cpu过高排查_涨薪秘籍:JAVA项目排查cpu负载过高
  7. ux设计师怎样找同类产品_没有预算? 别找借口。 便宜的UX上的UX 2:让我们开始构建。...
  8. UTF-8, ASCII, Unicode的介绍与区分
  9. 伯克利、OpenAI等提出基于模型的元策略优化强化学习
  10. Android 资讯类App项目实战 第一章 滑动顶部导航栏
  11. Linux配置手册(八)基于MySQL构建PHP环境
  12. empire-CVE-2018-19462
  13. centos下安装teamview
  14. Spring Boot入门教程(三十九):微信支付集成-申请服务号和微信支付
  15. hdu2017沈阳网络赛card(结论水题)
  16. PyQt5 第六章 拖拽和绘画(二)
  17. 拉取 gcr.io 镜像,如 Kubernetes,istio 等
  18. 【Scrum模式语言5】Scrum of Scrums
  19. 数据分析笔记--对NBA球员数据的聚类分析(代码)
  20. 【ArcGIS】图文攻略:使用ArcGIS将CAD的dwg文件转换为kml格式

热门文章

  1. MPB:扬州大学王梦芝组-​​反刍动物瘤胃原虫样品采集及计数方法
  2. TEE综述:植物—土壤反馈(PSF):自然和农业科学间的桥梁
  3. 生信小白的福音——免费在线分析扩增子数据SILVAngs
  4. Nature:乙酸盐通过介导微生物-脑-β细胞轴促进代谢综合征
  5. Nature:拟南芥微生物组功能研究2细菌基因组测序和分析
  6. R语言使用table1包绘制(生成)三线表、使用单变量分列构建三线表、编写自定义三线表结构(将因子变量细粒度化重新构建三线图)、为不同的变量显示不同的统计信息
  7. pandas使用argmax函数返回给定series对象中最大值(max、maximum)的行索引实战
  8. python使用imbalanced-learn的NearMiss方法进行下采样处理数据不平衡问题
  9. R使用tsne进行高维数据可视化实战:二维可视化、三维可视化
  10. R构建SVM回归模型