Redis集群搭建

Redis的单机版安装:https://blog.csdn.net/qq_43412289/article/details/99815373

Redis的window版安装:https://blog.csdn.net/qq_43412289/article/details/99817555

一、Redis Cluster(Redis集群)简介

  • redis是一个开源的key value存储系统,受到了广大互联网公司的青睐。redis3.0版本之前只支持单例模式,在3.0版本及以后才支持集群,我这里用的是redis3.0.0版本;
  • redis集群采用P2P模式,是完全去中心化的,不存在中心节点或者代理节点;
  • redis集群是没有统一的入口的,客户端(client)连接集群的时候连接集群中的任意节点(node)即可,集群内部的节点是相互通信的(PING-PONG机制),每个节点都是一个redis实例;
  • 为了实现集群的高可用,即判断节点是否健康(能否正常使用),redis-cluster有这么一个投票容错机制:如果集群中超过半数的节点投票认为某个节点挂了,那么这个节点就挂了(fail)。这是判断节点是否挂了的方法;
  • 那么如何判断集群是否挂了呢? -> 如果集群中任意一个节点挂了,而且该节点没有从节点(备份节点),那么这个集群就挂了。这是判断集群是否挂了的方法;
  • 那么为什么任意一个节点挂了(没有从节点)这个集群就挂了呢? -> 因为集群内置了16384个slot(哈希槽),并且把所有的物理节点映射到了这16384[0-16383]个slot上,或者说把这些slot均等的分配给了各个节点。当需要在Redis集群存放一个数据(key-value)时,redis会先对这个key进行crc16算法,然后得到一个结果。再把这个结果对16384进行求余,这个余数会对应[0-16383]其中一个槽,进而决定key-value存储到哪个节点中。所以一旦某个节点挂了,该节点对应的slot就无法使用,那么就会导致集群无法正常工作。
  • 综上所述,每个Redis集群理论上最多可以有16384个节点。

二、集群搭建需要的环境
2.1 Redis集群至少需要3个节点,因为投票容错机制要求超过半数节点认为某个节点挂了该节点才是挂了,所以2个节点无法构成集群。
2.2 要保证集群的高可用,需要每个节点都有从节点,也就是备份节点,所以Redis集群至少需要6台服务器。因为我没有那么多服务器,也启动不了那么多虚拟机,所在这里搭建的是伪分布式集群,即一台服务器虚拟运行6个redis实例,修改端口号为(7001-7006),当然实际生产环境的Redis集群搭建和这里是一样的。
2.3 安装ruby
三、集群搭建具体步骤如下(注意要关闭防火墙)
3.1 在usr/local目录下新建redis-cluster目录,用于存放集群节点

3.2 把redis目录下的bin目录下的所有文件复制到/usr/local/redis-cluster/redis01目录下,不用担心这里没有redis01目录,会自动创建的。操作命令如下(注意当前所在路径):

cp -r redis/bin/ redis-cluster/redis01

依次复制5份同样的操作,修改端口号,打开集群模式

cp -r  redis01/ redis02

cp -r  redis01/ redis03

cp -r  redis01/ redis04

cp -r  redis01/ redis05

cp -r  redis01/ redis06

3.3 删除redis01目录下的快照文件dump.rdb,并且修改该目录下的redis.cnf文件,

具体修改两处地方:一是端口号修改为7001,二是开启集群创建模式,打开注释即可。分别如下图所示:
删除dump.rdb文件 必须得删除不然搭建集群的时候会报错

修改配置文件 redis.conf文件里的端口号分别为7001,7002,7003,7004,7005,7006 默认是6379

将cluster-enabled yes 的注释打开

3.5 接着启动所有redis节点,由于一个一个启动太麻烦了,所以在这里创建一个批量启动redis节点的脚本文件,命令为start-all.sh,文件内容如下:

#!/bin/bash
for I in {01,02,03,04,05,06}
do
echo "start redis$I redis"
cd /usr/local/redis-cluster/redis$I
./redis-server redis.conf
echo "redis$I redis started"
done

设置关闭命令 vim stop-all.sh

#!/bin/bash
for I in {01,02,03,04,05,06}
do
echo "stop redis$I redis"
cd /usr/local/redis-cluster/redis$I
./redis-cli -p 70$I shutdown
echo "redis$I redis stoped"
done

创建脚本完毕之后,需要修改脚本的权限,(权限修改完之后会变成绿色)使它能够执行命令:

chmod +x start-all.sh

chmod +x stop-all.sh

3.7 执行start-all.sh脚本,启动6个redis节点,可以通过命令查看进程是否开启存在

ps -ef|grep redis

或者

ps -aux|grep redis

3.8 要搭建集群的话,需要使用一个工具(脚本文件),这个工具在redis解压文件的源代码里。

linux连网设置:https://blog.csdn.net/qq_43412289/article/details/99815036

因为这个工具是一个ruby脚本文件,所以这个工具的运行需要ruby的运行环境,就相当于java语言的运行需要在jvm上。所以需要安装ruby,指令如下:

yum install ruby

yum install rubygems

然后需要把ruby相关的包安装到服务器,我这里用的是redis-3.0.0.gem,大家需要注意的是:redis的版本和ruby包的版本最好保持一致。
将Ruby包安装到服务器:需要先下载再安装,如图

下载地址:链接: https://pan.baidu.com/s/17mhKew7Z-hF7PozKjUMSpg 提取码: afh7

安装命令如下:

gem install redis-3.0.0.gem

3.9 上一步中已经把ruby工具所需要的运行环境和ruby包安装好了,接下来需要把这个ruby脚本工具复制到usr/local/redis-cluster目录下。那么这个ruby脚本工具在哪里呢?之前提到过,在redis解压文件的源代码里,即redis/src目录下的redis-trib.rb文件。

3.10 将该ruby工具(redis-trib.rb)复制到redis-cluster目录下,指令如下:

cp redis-trib.rb /usr/local/redis-cluster

然后使用该脚本文件搭建集群,运行 redis-trib.rb 脚本指令如下:

./redis-trib.rb create --replicas 1 192.168.81.142:7001 192.168.81.142:7002

192.168.81.142:7003 192.168.81.142:7004 192.168.81.142:7005 192.168.81.142:7006

注意:此处大家应该根据自己的服务器ip输入对应的ip地址!

中途有个地方需要手动输入yes即可

至此,Redi集群搭建成功!大家注意最后一段文字,显示了每个节点所分配的slots(哈希槽),这里总共6个节点,其中3个是从节点,所以3个主节点分别映射了0-5460、5461-10922、10933-16383solts。

3.11 最后连接集群节点,连接任意一个即可:

随便找一台机器连接即可,但是要加-c 参数 代表连接的是集群

redis01/redis-cli -p 7001 -c

注意:一定要加上-c,不然节点之间是无法自动跳转的!如下图可以看到,存储的数据(key-value)是均匀分配到不同的节点的:

如果没有再添加数据报错出现 (error) CLUSTERDOWN The cluster is down

解决方法:https://blog.csdn.net/qq_43412289/article/details/99761556

原因:没有删除dump.rdb文件

redis集群基本命令:

1.查看当前集群信息

cluster info

2.查看集群里有多少个节点

cluster nodes

Redis集群的搭建(具体步骤)相关推荐

  1. 深入剖析Redis系列(三) - Redis集群模式搭建与原理详解

    前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...

  2. Redis集群架构搭建详解

    一.简介 这其实是一种分布式数据库,就是通过分片的机制储存数据,cluster中的每个节点仅仅储存数据哭的一部分数据,本质上就是实现数据库分片. 这种集群是一种去中心化的集群,也就是说,集群中的每个节 ...

  3. Redis集群环境搭建实践

    本文是Redis集群学习的实践总结(基于Redis 6.0+),详细介绍逐步搭建Redis集群环境的过程,并完成集群伸缩的实践. Redis集群简介 Redis集群(Redis Cluster) 是R ...

  4. Redis集群的搭建与主从复制,redis-cluster

    注意:我是搭建的伪集群,我在一个服务器上启动了6个redis ,ip地址一致端口号不同:与搭建正式集群方法一致,只是正式集群用了6台服务器,IP地址不同,端口号一致: Redis集群的搭建 redis ...

  5. 2W 字详解 Redis 集群环境搭建实践

    点击上方 "终端研发部"关注, 星标或置顶一起成长 本文是Redis集群学习的实践总结(基于Redis 6.0+),详细介绍逐步搭建Redis集群环境的过程,并完成集群伸缩的实践. ...

  6. redis集群的搭建详细教程

    1 Redis-cluster架构图             redis-cluster投票:容错  (至少要三个才可以,才能超过半数) 架构细节: (1)所有的redis节点彼此互联(PING-PO ...

  7. (转) 淘淘商城系列——Redis集群的搭建

    http://blog.csdn.net/yerenyuan_pku/article/details/72860432 本文我将带领大家如何搭建Redis集群.首先说一下,为何要搭建Redis集群.R ...

  8. redis常用命令及安全Redis集群环境搭建

    2019独角兽企业重金招聘Python工程师标准>>> redis 安装 在centos 上很简单 yum install redis 即可完成redis的安装 安装redis cd ...

  9. Redis Cluster高可用(HA)集群环境搭建详细步骤

    1.为什么要有集群 由于Redis主从复制架构每个数据库都要保存整个集群中的所有数据,容易形成木桶效应,所以Redis3.0之后的版本添加特性就是集群(Cluster) 2.Redis集群架构说明 架 ...

最新文章

  1. java三维滑雪,第六章 三维数据空间分析方法.ppt
  2. 完美解决 keil5.25 某宝Jlink无法使用问题
  3. 导航系统辅助设备行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  4. aba问题mysql_Mysql中select + update并发更新问题
  5. 修改element ui的table的某一列的样式
  6. 解决SVN汉化不成功问题,下载历史版本
  7. CN 国家顶级域名(摘自网络)
  8. C++多线程 - 无锁编程
  9. python无限制邮件群发软件_有哪些逆天的邮件群发软件推荐?
  10. 银河麒麟桌面V10微信不能登录
  11. debezium集成Oralce攻略(上)
  12. 格雷希尔GripSeal快速密封接头G70外卡式、滑套式快速连接器型号规格
  13. IC、FPGA验证学习
  14. matlab矩阵分块
  15. python控制程序_Python 流程控制
  16. 【转】Android 自己收集的开源项目和文章集合(持续更新至2018.12.17)
  17. 新手体验 kaggle上的电影评论情感分析
  18. c++微信读书学习笔记——很久以前随便写的
  19. 使用nw.js将vue项目打包为可在xp系统运行的桌面程序
  20. 存储区更新、插入或删除语句影响到了意外的行数(0)。实体在加载后可能被修改或删除

热门文章

  1. 使用SAP Spartacus快速创建一个电商店铺网站
  2. SAP Commerce开发时的Spring学习要点记录
  3. CRM My Opportunity max hit的技术实现
  4. view detail data in gateway error log
  5. why our extension project didn't load S3 view and controller
  6. S4HANA事务码MM01创建物料的调试
  7. CRM呼叫中心和社交媒体集成的技术实现
  8. SAP CRM One Order里item quantity和CUMULAT_H的联动
  9. 手动生成function 对应的ABAP class
  10. SAP Cloud for Customer创建Account也会生成对应的Business partner实例