一.为什么要用集群

redis3.0集群采用P2P模式,完全去中心化,将redis所有的key分成了16384个槽位,每个redis实例负责一部分slot,集群中的所有信息通过节点数据交换而更新。

redis实例集群主要思想是将redis数据的key进行散列,通过hash函数特定的key会映射到指定的redis节点上

二.数据分布理论

分布式数据库首要解决把整个数据集按照分区规则映射到多个节点的问题,即把数据集划分到多个节点上,每个节点负责整个数据的一个子集。

常见的分区规则有哈希分区和顺序分区。Redis Cluster采用哈希分区规则,因此接下来会讨论哈希分区规则。

(1)节点取余分区

(2)一致性哈希分区

(3)虚拟槽分区(redis-cluster采用的方式)

顺序分布

那么同样的分4个节点就是hash(key)%4

节点取余的优点是简单,客户端分片直接是哈希+取余

一致性哈希

客户端进行分片,哈希+顺时针取余

三.redis虚拟槽分区

Redis Cluster采用虚拟槽分区

虚拟槽分区巧妙地使用了哈希空间,使用分散度良好的哈希函数把所有的数据映射到一个固定范围内的整数集合,整数定义为槽(slot)。

Redis Cluster槽的范围是0~16383。

槽是集群内数据管理和迁移的基本单位。采用大范围的槽的主要目的是为了方便数据的拆分和集群的扩展,

每个节点负责一定数量的槽

存的数据是存到槽位,16383个槽位在分配给节点。

四.搭建redis cluster

搭建集群分为几步:

准备节点(redis库)

节点通信(自动分配主从)

分配槽位给节点(slot分配给redis)

redis-cluster集群架构

多个服务端,负责读写,彼此通信,redis指定了16384个槽。

ruby的脚本自动就把分配槽位这事做了。

五.redis集群配置

1.准备6个节点

mkdir /opt/redis_conf/redis_Cluster/

192.168.1.209  3个节点

/opt/redis_conf/redis_Cluster/redis-7000.conf

/opt/redis_conf/redis_Cluster/redis-7001.conf

/opt/redis_conf/redis_Cluster/redis-7002.conf

192.168.1.208  3个节点

/opt/redis_conf/redis_Cluster/redis-7003.conf

/opt/redis_conf/redis_Cluster/redis-7004.conf

/opt/redis_conf/redis_Cluster/redis-7005.conf

2.节点的配置

port
bind 192.168.1.209
daemonize yes
dir "/data/redis_Cluster/"
logfile "/data/redis_Cluster/logs/7000.log"
dbfilename "dump-7000.rdb"
cluster-enabled yes
cluster-config-file nodes-.conf

这6个节点配置文件都一样,仅仅是端口的不同

,bind后端的ip是本机ip

这边再放一个另外一台的配置:
[root@node208 redis_Cluster]# cat redis-7003.conf

port
bind 192.168.1.208
daemonize yes
dir "/data/redis_Cluster/"
logfile "/data/redis_Cluster/logs/7003.log"
dbfilename "dump-7003.rdb"
cluster-enabled yes
cluster-config-file nodes-.conf

并创建相应的目录:

mkdir /data/redis_Cluster/

mkdir /data/redis_Cluster/logs/

3.启动这六个节点

192.168.1.209 上运行

redis-server /opt/redis_conf/redis_Cluster/redis-7000.conf

redis-server /opt/redis_conf/redis_Cluster/redis-7001.conf

redis-server /opt/redis_conf/redis_Cluster/redis-7002.conf

192.168.1.209 上运行

redis-server /opt/redis_conf/redis_Cluster/redis-7003.conf

redis-server /opt/redis_conf/redis_Cluster/redis-7004.conf

redis-server /opt/redis_conf/redis_Cluster/redis-7005.conf

启动6个节点后的截图:

4.随便进入一个redis交互模式,写入数据,发现无法写入

报错,没有分配哈希槽

5.准备ruby环境,安装ruby并执行redis-trib.rb脚本

分配redis集群状态,以及槽位分配,互联网企业,豆瓣公司开源的一个工具

(1)下载、编译、安装Ruby

# 下载ruby
wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz
# 安装ruby
tar -xvf ruby-2.3..tar.gz
# 进入目录
cd ruby-2.3./
# 指定安装目录
./configure --prefix=/opt/ruby/
# 编译安装
make && make install

6.添加ruby环境变量

vim /etc/profile
在PATH=后面添加ruby的环境变量路径
export PATH=$PATH:/opt/python36/bin:/opt/ruby/bin
# 重新读取环境变量
source /etc/profile

7.安装ruby gem redis-trib.rb

wget http://rubygems.org/downloads/redis-3.3.0.gem
使用gem安装redis-3.3..gem工具
gem install -l redis-3.3..gem
安装redis-trib.rb命令
cp /opt/redis-5.0./src/redis-trib.rb /usr/local/bin/

如下截图,说明redis-trib.rb配置成功

这样表示添加成功

安装ruby gem 包管理工具

wget http://rubygems.org/downloads/redis-3.3.0.gem

gem install -l redis-3.3.0.gem

8.一键开启redis-cluster集群

redis-cli --cluster create --cluster-replicas 1 192.168.1.209:7000 192.168.1.209:7001 192.168.1.209:7002 192.168.1.208:7003 192.168.1.208:7004 192.168.1.208:7005

--replicas  # 表示进行身份授权

1  # 表示每个主节点,只有一个从节点

# 集群会自动分配主从关系  7000、7001、7002为主服务器master 7003、7004、7005为从服务器slave

连接集群命令

redis-cli -h  IP地址 -p 端口 -c

# redis-cli -h 192.168.1.209 -p 7000 -c

两个数据库的数共享,插入的数据随机分配到一主一从的其中一个。查询数据的时候,

两个库的数据都能在一个库中查询到。每一次插入数据都会先分配节点,在插入相应的库的数据。

redis 之redis集群与集群配置的更多相关文章

  1. Java Spring mvc 操作 Redis 及 Redis 集群

    本文原创,转载请注明:http://www.cnblogs.com/fengzheng/p/5941953.html 关于 Redis 集群搭建可以参考我的另一篇文章 Redis集群搭建与简单使用 R ...

  2. 【redis】 redis 创建集群时,Waiting for the cluster to join.... 一直等待

    redis 搭建集群时,一直join.... ./redis-trib.rb  create --replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1: ...

  3. Tomcat 集群模式下 Session 更新 Bug (redis memcached 及tomcat自已的集群)

    从 excel 中导入数据入系统,我们用的是先上传文件至服务器再分析所上传的文件逐行导入. 就是执行了一循环,在当前循环位置标识一下客户端就知道执行的进度了,以前的方式 是用 session.setA ...

  4. 【Redis】Redis分布式集群几点说道

    Redis数据量日益增大,使用的公司越来越多,不仅用于做缓存,同时趋向于存储这一块,这样必促使集群的发展,各个公司也在收集适合自己的集群方案,目前行业用的比较多的是下面几种集群架构,大部分都是采用分片 ...

  5. redhat6.5 redis单节点多实例3A集群搭建

    在进行搭建redis3M 集群之前,首先要明白如何在单节点上完成redis的搭建. 单节点单实例搭建可以参看这个网:https://www.cnblogs.com/butterflies/p/9628 ...

  6. Redis数据库 02事务| 持久化| 主从复制| 集群

    1. Redis事务 Redis不支持事务,此事务不是关系型数据库中的事务: Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化.按顺序地执行.事务在执行的过程中,不会被其他客户端发送来的 ...

  7. Linux下redis 的部署、主从与集群

    老男孩Python全栈6期——redis--------------------------Linux 操作系统 默认的内存管理机制RSS:page cache:anno page:Linux操作系统 ...

  8. redis 5.0.3 讲解、集群搭建

    REDIS 一 .redis 介绍 不管你是从事Python.Java.Go.PHP.Ruby等等... Redis都应该是一个比较熟悉的中间件.而大部分经常写业务代码的程序员,实际工作中或许只用到了 ...

  9. Redis在Windows上使用和集群配置

    一.什么是Redis Redis是一个开源的,使用C语言编写的面向键值对类型的分布式Nosql数据库系统,功能类似Memcache,但比Memcache功能更丰富.官网地址:https://redis ...

  10. redis的主从复制和高可用集群

    一.redis的简介 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.redis是一个key-value存储系 ...

随机推荐

  1. pycharm新建Django时,遇到的坑,安装index包失败

    https://blog.csdn.net/li93675/article/details/89418097 如果在pycharm中导入django包 ,只对当前项目有效,建议使用命令pip inst ...

  2. 计算机二级-C语言-程序设计题-190118记录-通过数组和指针两种方式对字符串进行处理。

    //编写一个函数fun,比较两个字符串的长度,(不使用C语言提供的求字符串长度的函数),函数返回较长的字符串.若两个字符长度相同,则返回第一个字符串. //重难点:通过数组处理和通过指针进行处理的不同 ...

  3. 从 0 到 1:Apache APISIX 的 Apache 之路

    2019 年 12 月 14 日,又拍云联合 Apache APISIX 社区举办 API 网关与高性能服务最佳实践丨Open Talk 广州站活动,本次活动,邀请了来自Apache APISIX.又 ...

  4. python-opencv:读取图片

    代码 import cv2 # 读取一张图片 src = cv2.imread("../images/lena.jpg") # 命名一个窗口 cv2.namedWindow(&qu ...

  5. AOP统一日志打印处理

    在日常开发工作中,我们免不了要打印很多log.而大部分需要输出的log又是重复的(例如传入参数,返回值).因此,通过AOP方式来进行日志管理可以减少很多代码量,也更加优雅. Springboot通过A ...

  6. debezium、kafka connector 解析 mysql binlog 到 kafak

    目的: 需要搭建一个可以自动监听MySQL数据库的变化,将变化的数据捕获处理,此处只讲解如何自动捕获mysql 中数据的变化 使用的技术 debezium :https://debezium.io/d ...

  7. Update(stage3):第1节 redis组件:4、安装(略);5、数据类型(略);6、javaAPI操作;

    第三步:redis的javaAPI操作 操作string类型数据 操作hash列表类型数据 操作list类型数据 操作set类型的数据 详见代码

  8. Idea 隐藏不必要的文件或文件夹 eg:(.idea,.gitignore,*.iml)

    在使用Idea的时候,有一些文件是不必要的,可以将他们隐藏起来 方法:打开File–>Settings–>Editor如图,在File Types 中的 Ignore files and ...

  9. pandas help

    1. read_csv read_csv方法定义: pandas.read_csv(filepath_or_buffer, sep=', ', delimiter=None, header='infe ...

  10. nginx windows下重新加载配置

    运行过程中,有个节点部分服务出现故障,像将其下线修复, 使用nginx -t; nginx -s reload 重新加载配置 得到错误"nginx: [error] OpenEvent(&q ...