一.为什么要用集群

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. radhat 6.7修改mac地址方法

    vi ifcfg-eth0 #HW……,即注释掉原硬件地址. 再自己照着原地址写:MACADDR="新mac地址" 重启

  2. Scrapy 命令

    Scrapy提供了两种类型的命令.一种必须在Scrapy项目中运行(针对项目(Project-specific)的命令),另外一种则不需要(全局命令).全局命令在项目中运行时的表现可能会与在非项目中运 ...

  3. dp饭卡

    电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够).所以大家 ...

  4. Draw.io--自认为最好用的流程图绘制软件

    draw.io 是一个强大简洁的在线的绘图网站,支持流程图,UML图,架构图,原型图等图标.支持Github,Google Drive, One drive等网盘同步,并且永久免费.如果觉得使用Web ...

  5. 【MySQL】用户管理及备份

    "我们知道我们的最高权限管理者是root用户,它拥有着最高的权限,包括select.update.delete.grant等操作.一般在公司里DBA工程师会创建一个用户和密码,让你去连接数据 ...

  6. java redis 实现用户签到功能(很普通简单的签到功能)

    业务需求是用户每天只能签到一次,而且签到后用户增加积分,所以把用户每次签到时放到redis 缓存里面,然后每天凌晨时再清除缓存,大概简单思想是这样的 直接看代码吧如下 @Transactional @ ...

  7. 基于Tesseract实现图片文字识别

    一.简介  Tesseract是一个开源的文本识别[OCR]引擎,可通过Apache 2.0许可获得.它可以直接使用,或者使用API从图像中提取打印的文本,支持多种语言.该软件包包含一个ORC引擎[l ...

  8. Spring Boot 开发 WebService 服务

    WebService 虽然现在大部分互联网企业不太提倡使用,但在以第三方接口为主导的市场,对方来什么接口你还得用什么接口,不可能把接口重写了.例如大部分传统的大型企业都在用 WebService,并且 ...

  9. Docker for YApi--一键部署YApi

    获取YApi镜像$ docker pull mrjin/yapi:latest 注意:本仓库目前只支持安装,暂不支持升级,请知晓.如需升级请备份mongoDB内的数据. docker-compose ...

  10. SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xd0 in position 2: invalid continuation byte

    [root@hostuser src]# python3 subprocess_popen.py File "subprocess_popen.py", line 23Syntax ...