一.为什么要用集群

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. springboot 框架 - helloword

    功能:浏览器发送hello请求,服务器接收请求并处理,返回hello word字符串 一.创建一个maven项目 二.在pom.xml文件中添加依赖导入springboot框架运行需要的依赖 < ...

  2. EVE上传Dynamips、IOL和QEMU镜像

    1.镜像保存目录: /opt/unetlab/addons ---/dynamips   Dynamips镜像保存目录 ---/iol               IOL镜像保存目录(运行IOU的镜像 ...

  3. 克隆虚拟机后ip配置

    (1)出错原因: 错误:No suitable device found: no device found for connection "System eth0" 原因:克隆虚拟 ...

  4. List(数组)里面常用的属性和方法

    常用属性: length 长度 reversed 翻转 isEmpty 是否为空 isNotEmpty 是否不为空常用方法: add 增加 addAll 拼接数组 增加多个数据 list.addAll ...

  5. RTT学习之RTC设备

    RTC: 目前系统内只允许存在一个 RTC 设备,且名称为 "rtc",所以不用查找设备 启用 Soft RTC (软件模拟 RTC),对无硬件RTC 启用 NTP 时间自动同步, ...

  6. php集成环境、基础标记符

    集成环境:wamp windows apache mysql php lamp linux apache mysql php 标记符: 1.<?php ...... ?> 2.<?p ...

  7. 【笔记6-支付及订单模块】从0开始 独立完成企业级Java电商网站开发(服务端)

    支付模块 实际开发工作中经常会遇见如下场景,一个支付模块,一个订单模块,有一定依赖,一个同事负责支付模块,另一个同事负责订单模块,但是开发支付模块的时候要依赖订单模块的相关类 ,方法,或者工具类,这些 ...

  8. python中安装下载超时,下载不了安装包

    python3 -m pip install scapy 执行上面命令报错,下载超时,下载不了安装包 Collecting scapy WARNING: Retrying (Retry(total=4 ...

  9. C:数值溢出问题

    当超过一个数据类型能够存放最大的范围时,数值会溢出. 有符号位最高位溢出的区别:符号位溢出会导致数的正负发生改变,但最高位的溢出会导致最高位丢失. #include <stdio.h> i ...

  10. 【代码审计】XDCMS 报错注入

    审计的都是之前很老的一些的CMS,把学习的过程分享出来,如果有正在和我一起学习的兄弟们,希望看到文章之后会有所收获 ------------------------------------------ ...