环境

  • Linux :centos 7

  • redis:redis-5.0.9

Redis 集群环境搭建步骤

早期 redis 版本集群环境搭建需要安装 ruby 运行环境,搭建步骤比较繁琐; redis 5.x 版本集群搭建已不需要我们安装 ruby 就可以搭建成功,并且 redis 给我们提供了快速搭建集群脚本

步骤一:找到快速搭建 create-cluster 脚本
[root@dtinone create-cluster]# cd /opt/redis-5.0.9/utils/create-cluster

进入 create-cluster 目录后查看如下:

[root@dtinone create-cluster]# ll
总用量 8
-rwxrwxr-x. 1 root root 2344 4月 17 2020 create-cluster #这就是快速搭建集群脚本
-rw-rw-r--. 1 root root 1317 4月 17 2020 README

create-cluster 脚本提供以下几个命令:

  • start :创建redis集群实例
  • create :搭建redis集群
  • stop :停止redis集群实例
  • watch :查看集群节点
  • clean :删除生成的日志,配置,数据文件
  • clean-logs :只删除日志
步骤二:运行 create-cluste 脚本快速搭建集群环境
  • 运行 ./create-cluster start 命令脚本将自动为我们创建 6 个redis 进程实例(集群环境至少 6 个 redis 实例,3 master / 3 slave),而且自动为我们分配端口(30001-30006)
[root@dtinone create-cluster]# ./create-cluster start
Starting 30001
Starting 30002
Starting 30003
Starting 30004
Starting 30005
Starting 30006
  • 运行 ./create-cluster create 命令脚本将自动搭建集群环境(分配 6 个 slot 并配置好 6 个 redis 实例的主从关系)

    redis 集群支持16384 个 slots,即最大支持 16384 个 redis 实例组成的集群环境)

    遇到以下提示信息,是询问你是否可以使用分配的配置,输入yes 回车即可

    Can I set the above configuration? (type 'yes' to accept): yes # 输入 yes 回车即可

[root@dtinone create-cluster]# ./create-cluster create
>>> Performing hash slots allocation on 6 nodes...
# 分配集群槽位
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383 # 分配主从关系
Adding replica 127.0.0.1:30005 to 127.0.0.1:30001
Adding replica 127.0.0.1:30006 to 127.0.0.1:30002
Adding replica 127.0.0.1:30004 to 127.0.0.1:30003
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master # 显示槽位和主从关系
M: 68472ec54dba34b08cd6d4f987f8b97e5de00411 127.0.0.1:30001
slots:[0-5460] (5461 slots) master
M: a05be1b0ee3f33d0fdba1c4624484659df71ba9c 127.0.0.1:30002
slots:[5461-10922] (5462 slots) master
M: 4ebf676146947b59063b7474f3bf706e4319cc01 127.0.0.1:30003
slots:[10923-16383] (5461 slots) master
S: 3cb2dae684fb9fa7393cf7a7b8c6ee401db80f05 127.0.0.1:30004
replicates 68472ec54dba34b08cd6d4f987f8b97e5de00411
S: 41c6962bf0f80dcd3ccd07ec758a949b55938248 127.0.0.1:30005
replicates a05be1b0ee3f33d0fdba1c4624484659df71ba9c
S: bef3b70608bbae26f20b0de5915e7c2f521f18c3 127.0.0.1:30006
replicates 4ebf676146947b59063b7474f3bf706e4319cc01
Can I set the above configuration? (type 'yes' to accept): yes #输入yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
.
>>> Performing Cluster Check (using node 127.0.0.1:30001)
M: 68472ec54dba34b08cd6d4f987f8b97e5de00411 127.0.0.1:30001
slots:[0-5460] (5461 slots) master
1 additional replica(s)
S: bef3b70608bbae26f20b0de5915e7c2f521f18c3 127.0.0.1:30006
slots: (0 slots) slave
replicates 4ebf676146947b59063b7474f3bf706e4319cc01
M: a05be1b0ee3f33d0fdba1c4624484659df71ba9c 127.0.0.1:30002
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
M: 4ebf676146947b59063b7474f3bf706e4319cc01 127.0.0.1:30003
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
S: 41c6962bf0f80dcd3ccd07ec758a949b55938248 127.0.0.1:30005
slots: (0 slots) slave
replicates a05be1b0ee3f33d0fdba1c4624484659df71ba9c
S: 3cb2dae684fb9fa7393cf7a7b8c6ee401db80f05 127.0.0.1:30004
slots: (0 slots) slave
replicates 68472ec54dba34b08cd6d4f987f8b97e5de00411
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
主节点端口 槽位 从节点端口
30001 0-5460 30005
30002 5461-10922 30006
30003 10923 - 16383 30004
步骤三:查看进程
[root@dtinone create-cluster]# ps -ef | grep redis
[root@node-01 create-cluster]# ps -ef | grep redis
root 2392 1 0 17:14 ? 00:00:00 ../../src/redis-server *:30001 [cluster]
root 2394 1 0 17:14 ? 00:00:00 ../../src/redis-server *:30002 [cluster]
root 2402 1 0 17:14 ? 00:00:00 ../../src/redis-server *:30003 [cluster]
root 2404 1 0 17:14 ? 00:00:00 ../../src/redis-server *:30004 [cluster]
root 2409 1 0 17:14 ? 00:00:00 ../../src/redis-server *:30005 [cluster]
root 2417 1 0 17:14 ? 00:00:00 ../../src/redis-server *:30006 [cluster]
root 2431 1495 0 17:18 pts/0 00:00:00 grep --color=auto redis

说明已经创建了 6 个 redis 进程实例,端口号分别是 30001- 30006

步骤四:查看集群环境
[root@node-01 redis-5.0.9]# src/redis-cli -c -p 30001  # -c:表示连接的集群环境
127.0.0.1:30001> cluster nodes # 查看集群节点信息
127.0.0.1:30003@40003 master - 0 1615540917054 3 connected 10923-16383
127.0.0.1:30005@40005 slave 0 1615540917054 5 connected
127.0.0.1:30006@40006 slave 0 1615540917254 6 connected
127.0.0.1:30002@40002 master - 0 1615540917153 2 connected 5461-10922
127.0.0.1:30004@40004 slave 0 1615540916449 4 connected
127.0.0.1:30001@40001 myself,master - 0 1615540916000 1 connected 0-5460

集群中确实是 3 个主节点,3 个 从节点

步骤五:测试集群环境

向集群端口 30001 的主节点存储数据,如下:

127.0.0.1:30001> set name zhangsan
-> Redirected to slot [5798] located at 127.0.0.1:30002
OK
127.0.0.1:30002>

结果显示,数据存储到端口为 30002 的主节点。

原因是存储数据分配的槽位是 5798,30002主节点的槽位是 [5461-10922],所以应该存储到 30002 主节点上。

127.0.0.1:30002> get name
"zhangsan"

在 30002 主节点上确实可以查看数据。

步骤六:测试集群故障转移

为了触发故障转移,我们可以做的最简单的事情(也就是在分布式系统中可能出现的语义上最简单的故障)是使单个进程崩溃,如下:

[root@node-01 redis-5.0.9]# src/redis-cli -c -p 30001 debug segfault
Error: Server closed the connection

可以看到,端口号为 30001 的主节点被我们搞崩溃了,这时查看集群节点状态,如下

[root@node-01 redis-5.0.9]# src/redis-cli -c  -p 30002
127.0.0.1:30002> cluster nodes
127.0.0.1:30003@40003 master - 0 1615541662157 3 connected 10923-16383
127.0.0.1:30004@40004 slave 0 1615541661655 4 connected
127.0.0.1:30005@40005 master - 0 1615541661655 7 connected 0-5460 # 成为新的主节点
127.0.0.1:30002@40002 myself,master - 0 1615541662000 2 connected 5461-10922
127.0.0.1:30006@40006 slave 0 1615541661655 6 connected
127.0.0.1:30001@40001 master,fail - 1615541651480 1615541651077 1 disconnected

可以看到,端口 30001的主节点,显示为 fail,而它的从节点是端口 30005,现在已经切换为主节点,说明集群故障转移成功。

Redis 快速集群环境搭建的更多相关文章

  1. redis哨兵集群环境搭建

    一.哨兵的介绍 哨兵(sentinal)是redis集群架构中非常重要的一个组件,主要功能如下: 集群监控,负责监控redis master和slave进程是否正常工作 消息通知,如果某个redis实 ...

  2. Redis之集群环境搭建

    前面文章介绍了Redis的主从复制,虽然该模式能够在一定程度上提高系统的稳定性,但是在数据访问量比较大的情况下,单个master应付起来还是比较吃力的,这时我们可以考虑将redis集群部署,本文就来重 ...

  3. Redis集群环境搭建实践

    0 Redis集群简介 Redis集群(Redis Cluster)是Redis提供的分布式数据库方案,通过分片(sharding)来进行数据共享,并提供复制和故障转移功能.相比于主从复制.哨兵模式, ...

  4. Redis与Redis 伪集群环境的搭建

    一 .准备工作 GCC编译环境 ruby运行环境 安装ruby脚本运行包 二.环境安装 1.GCC环境 首先,因为redis是由C语言编写的,所以需要安装GCC环境,可以用 gcc -v 命令来检查是 ...

  5. Docker 搭建 Redis Cluster 集群环境

    使用 Docker 搭建 Redis Cluster,最重要的环节就是容器通信的问题,这一块我们在之前的文章中已经给大家解决了<Docker 网络模式详解及容器间网络通信>,本篇文章主要练 ...

  6. Docker Compose 搭建 Redis Cluster 集群环境

    在前文<Docker 搭建 Redis Cluster 集群环境>中我已经教过大家如何搭建了,本文使用 Docker Compose 再带大家搭建一遍,其目的主要是为了让大家感受 Dock ...

  7. Ningx集群环境搭建

    Ningx集群环境搭建 Nginx是什么? Nginx ("engine x") 是⼀个⾼性能的 HTTP 和 反向代理 服务器,也是⼀个 IMAP/ POP3/SMTP 代理服务 ...

  8. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(三)安装spark2.2.1

    如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...

  9. Hadoop完全分布式集群环境搭建

    1. 在Apache官网下载Hadoop 下载地址:http://hadoop.apache.org/releases.html 选择对应版本的二进制文件进行下载 2.解压配置 以hadoop-2.6 ...

随机推荐

  1. 字体图标库 iconfont、iconmoon 的维护管理与使用探索

    字体图标库的使用 这是之前留下的博客,由于一堆博客没写完,本周周末做了个补充,可能内容上会有点不太斜街,请见谅... 本文大部分内容是自己结合过往经验探索总结的字体图标维护方式 iconfont-阿里 ...

  2. Spring Boot 接口幂等插件使用

    幂等概述 幂等性原本是数学上的概念,即使公式:f(x)=f(f(x)) 能够成立的数学性质.用在编程领域,则意为对同一个系统,使用同样的条件,一次请求和重复的多次请求对系统资源的影响是一致的. 幂等性 ...

  3. Spring 学习笔记(四):Spring AOP

    1 概述 本文主要讲述了AOP的基本概念以及在Spring中AOP的几种实现方式. 2 AOP AOP,即Aspect-Oriented Programming,面向切面编程,与OOP相辅相成.类似的 ...

  4. 手写Spring DI依赖注入,嘿,你的益达!

    目录 提前实例化单例Bean DI分析 DI的实现 构造参数依赖 一:定义分析 二:定义一个类BeanReference 三:BeanDefinition接口及其实现类 四:DefaultBeanFa ...

  5. Salesforce学习之路(一)几个简单概念

    Salesforce是一款非常强大的CRM(Customer Relationship Management)系统,国外企业使用十分频繁,而国内目前仅有几家在使用(当然,国内外企使用的依旧较多),因此 ...

  6. Java JFR 民间指南 - 事件详解 - jdk.ObjectAllocationInNewTLAB

    重新申请 TLAB 分配对象事件:jdk.ObjectAllocationInNewTLAB 引入版本:Java 11 相关 ISSUES: JFR: RecordingStream leaks me ...

  7. Day02_13_Javadoc_生成帮助文档

    JavaDoc 命令:javadoc -encoding UTF-8 -charset UTF-8 Doc.java 执行该命令后,会在java目录生成index.html打开就可以看到生成的文档了 ...

  8. 1075 PAT Judge

    The ranklist of PAT is generated from the status list, which shows the scores of the submissions. Th ...

  9. poj1182 and 携程预赛2第一题 带权并查集

    题意:       动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A.  现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底 ...

  10. 如何利用C++的time头文件获取系统时间

    C++提供了time.h头文件进行时间编辑操作,可以把时间格式化进tm结构体,方便使用.MFC框架中的ctime类就是基于time.h封装的. 代码样例: #include <iostream& ...