一.为什么要用集群

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. 1018 Public Bike Management (30分) (迪杰斯特拉+dfs)

    思路就是dijkstra找出最短路,dfs比较每一个最短路. dijkstra可以找出每个点的前一个点, 所以dfs搜索比较的时候怎么处理携带和带走的数量就是关键,考虑到这个携带和带走和路径顺序有关, ...

  2. Hyperledger Fabric 踩坑汇总

    搭建基础环境 阿里云安装出现的一些问题解决 1. [signal SIGSEGV: segmentation violation code=0x1 addr=xxx pc=xxx] 类似的错误:原始错 ...

  3. cordova将vue项目打包成apk

    1,若vue项目不在cordova项目里,直接把它复制进来,避免改动代码的麻烦 2,直接按照以下链接进行操作即可 链接:https://www.cnblogs.com/qirui/p/8421372. ...

  4. 【CSS选择器】

    " 目录 一.介绍 二.语法 三.引入方式 1. 行内样式 2. 嵌入式 3. 外部样式 四.选择器 1. 基本选择器 2. 组合选择器 3. 属性选择器 4. 不常用选择器 5. 分组和嵌 ...

  5. scrapy import CrawlSpider 报错

    from scrapy.spider import CrawlSpider 报错 import module CrawlSpider error 看了下以前一直用的scrapy0.14.1 使用的是B ...

  6. 爬虫,工具 - Splash

    What is it? Splash is a javascript rendering service. It's a lightweight web browser with an HTTP AP ...

  7. 解决Vue 使用vue-router切换页面时 页面显示没有在顶部的问题

    有时候我们需要页面滚动条滚动到某一固定的位置,一般使用Window scrollTo() 方法. 语法就是:scrollTo(xpos,ypos) xpos:必需.要在窗口文档显示区左上角显示的文档的 ...

  8. 【原】mac电脑使用总结

    mac下终端配置(item2+oh-my-zsh)+solarized配色方案:https://www.cnblogs.com/weixuqin/p/7029177.html

  9. 安装go和goland

    1.建议去go语言中文网下载,网址:https://studygolang.com/dl ,下图是下载页面及包介绍 2.Windows版安装 3.在cmd命令行窗口输入“go version”可以查看 ...

  10. java之中文乱码处理

    有些时候,比如文件操作的时候,特别是文件中有中文,会规定用GBK格式,这时读写文件,可能会出现中文乱码 资源文件乱码 文件内容乱码 资源文件乱码: 解决: PropertiesUtil proper ...