环境

  • 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. sunny图表——NABCD分析

    项目 内容 这个作业属于哪个课程 2021春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 团队选题 我在这个课程的目标是 初步获得软件工程师的能力 这个作业在哪个具体方面帮助我实现目标 选 ...

  2. 死磕Spring之AOP篇 - 初识JDK、CGLIB两种动态代理

    该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读. Spring 版本:5.1 ...

  3. 6.3string用法

    string类型可以大大方便对字符串的处理 1.string的定义 string str; string str="abcd"; 2.string中内容的访问 (1)可以像字符数组 ...

  4. Go 类型转换与类型判断

    目录 Go 类型转换与类型判断 1.类型转化 2.类型判断 Go 类型转换与类型判断 1.类型转化 T(a) : T 是目标类型 a 是源变量 package main import "fm ...

  5. Day16_96_IO_available() 和 skip()方法

    available() 和 skip()方法 int available()方法 返回流中估计剩余字节数,int i ,i 值表示所剩余的字节数.使用read()方法读取数据,读取一个字节,avail ...

  6. Python学习从入门到放弃?我不允许!!!

    嗨,大家好 这里是汐仔 很多人都说学习python学习python,打开书本,三分钟,从入门到放弃. 这怎么可以!!!大家能选择python的原因可能是看它既简单,好入门,现在俨然是语言中的一匹黑马. ...

  7. 趁五一撸个纯Flutter版的心情日记App

    前言 最近真的是太忙了,只能趁着五一期间把之前Android版的心情日记App移植到Flutter平台,并且已经上架华为应用市场以及苹果App Store. 整体框架沿用了两个星期,用Flutter撸 ...

  8. 【新手/零基础】Hexo+Gitee个人博客搭建教程--详细版

    前言 点此转到--精简版 可能很多小伙伴都有搭建一个属于自己的博客的想法.但是经常是无奈于自己匮乏的知识.但是,每个老手都是新手过来的,再困难的事情,只要肯花一点时间都可以办成. 本次教程分为详细版和 ...

  9. Sass中连体符(&)的运用

    在CSS中,这种想法是无法实现的,但在Sass中,可以轻松的通过连体符&来实现.这也是我们今天要说的. 我们先来回忆一下,CSS中常见的一组样式: /*页面中链接的颜色*/ a {clolor ...

  10. Android Studio导入Android 4.4.4r1的源码

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/70339471 一.环境配置 1.ubuntu 14.04.5 x64bit 2.j ...