环境

  • 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. Azure Digital Twins(2)- 在本地使用ADT Explorer 管理数字孪生

    本文介绍: 在本地运行ADT Explorer 并连接Azure Digital Twins 实例: 使用 VS CODE DTDL插件开发第一个 模型文件: ADT Explorer的几个基本功能: ...

  2. baystack(ret2one_gadget)

    babystack 首先检查一下保护 全保护开启,我们IDA分析一下. main函数很简单,首先第一个read明显存在漏洞,如果不是以 \n 结尾会存在栈中地址的泄漏. payload = 'A'*0 ...

  3. 使用Vue-TreeSelect组件的时候,用watch变量方式解决弹出编辑对话框界面无法触发更新的问题

    在前篇随笔<使用Vue-TreeSelect组件实现公司-部门-人员级联下拉列表的处理>中介绍了Vue-TreeSelect组件的使用,包括使用v-modal绑定值,normalizer ...

  4. GoF设计模式合集

    1 概述 这篇文章是对GoF23种设计模式+1种非GoF模式的合集,由笔者自己的笔记整理而来,每个模式都详细描述了步骤,角色等,以及使用Java实现的具体的例子. 2 基础 设计模式概述 UML与面向 ...

  5. (十九)VMware Harbor 详细介绍

    一 . 简介 Harbor是VMware公司开源的企业级DockerRegistry项目,项目地址为https://github.com/vmware/harbor.其目标是帮助用户迅速搭建一个企业级 ...

  6. 前端进阶(2)使用fetch/axios时, 如何取消http请求

    前端进阶(2)使用fetch/axios时, 如何取消http请求 1. 需求 现在前端都是SPA,我们什么时候需要取消HTTP请求呢? 当我们从一个页面跳转到另外一个页面时,如果前一个页面的请求还没 ...

  7. 数据库函数-常用的MySQL函数

    1.date_sub() 时间的加减 备注:record 为datetime类型 select record_time as date, order_area as orderArea, order_ ...

  8. ARM详细指令集

    算术和逻辑指令 ADC : 带进位的加法 (Addition with Carry) ADC{条件}{S} <dest>, <op 1>, <op 2> dest ...

  9. Windows PE变形练手1-用PE自己的机器码修改自己的逻辑

    PE变形练手1-用PE自己的机器码修改自己的逻辑 就是找一个PE文件,用自己的部分代码部分覆盖或者而修改自己另一个代码部分的补丁姿势(现实中使用很少,极少数破解可以用到.这次例子目的是了解PE). 第 ...

  10. c++逆向分析----返回对象

    对象不使用默认析构函数 class Test { public: char cNum1; int iNum2; int* pInt; }; Test _ReturnObject() { Test st ...