redis 之redis集群与集群配置
一.为什么要用集群
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集群与集群配置的更多相关文章
- Java Spring mvc 操作 Redis 及 Redis 集群
本文原创,转载请注明:http://www.cnblogs.com/fengzheng/p/5941953.html 关于 Redis 集群搭建可以参考我的另一篇文章 Redis集群搭建与简单使用 R ...
- 【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: ...
- Tomcat 集群模式下 Session 更新 Bug (redis memcached 及tomcat自已的集群)
从 excel 中导入数据入系统,我们用的是先上传文件至服务器再分析所上传的文件逐行导入. 就是执行了一循环,在当前循环位置标识一下客户端就知道执行的进度了,以前的方式 是用 session.setA ...
- 【Redis】Redis分布式集群几点说道
Redis数据量日益增大,使用的公司越来越多,不仅用于做缓存,同时趋向于存储这一块,这样必促使集群的发展,各个公司也在收集适合自己的集群方案,目前行业用的比较多的是下面几种集群架构,大部分都是采用分片 ...
- redhat6.5 redis单节点多实例3A集群搭建
在进行搭建redis3M 集群之前,首先要明白如何在单节点上完成redis的搭建. 单节点单实例搭建可以参看这个网:https://www.cnblogs.com/butterflies/p/9628 ...
- Redis数据库 02事务| 持久化| 主从复制| 集群
1. Redis事务 Redis不支持事务,此事务不是关系型数据库中的事务: Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化.按顺序地执行.事务在执行的过程中,不会被其他客户端发送来的 ...
- Linux下redis 的部署、主从与集群
老男孩Python全栈6期——redis--------------------------Linux 操作系统 默认的内存管理机制RSS:page cache:anno page:Linux操作系统 ...
- redis 5.0.3 讲解、集群搭建
REDIS 一 .redis 介绍 不管你是从事Python.Java.Go.PHP.Ruby等等... Redis都应该是一个比较熟悉的中间件.而大部分经常写业务代码的程序员,实际工作中或许只用到了 ...
- Redis在Windows上使用和集群配置
一.什么是Redis Redis是一个开源的,使用C语言编写的面向键值对类型的分布式Nosql数据库系统,功能类似Memcache,但比Memcache功能更丰富.官网地址:https://redis ...
- redis的主从复制和高可用集群
一.redis的简介 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.redis是一个key-value存储系 ...
随机推荐
- python日常题目小练习
1.使用while循环输出1 2 3 4 5 6 8 9 10 i=0 while i<10: i+=1 if i==7: continue print(i) 结果: 2.求1-100的所有数的 ...
- 6,html5的离线储存怎么用
6,html5的离线储存怎么用 客户端:(百科:或称为用户端,是指与服务器相对应,为客户提供本地服务的程序.除了一些只在本地运行的应用程序,一般安装在客户机上,需要与服务端配合运行) 在用户没有和因特 ...
- Java面向对象内存图
1. java虚拟机的内存划分 2. 苹果手机类 package cn.itcast.day06.demo02; /* 定义一个类,用来模拟“手机”事物. 属性:品牌.价格.颜色 行为:打电话.发短信 ...
- 强化学习-Q-learning学习笔记
Q学习动作探索策略中的ep-greepy,以ep的概率进行随机探索,以1-ep的概率以最大值策略进行开发,因为设定的迭代次数比较多,所以肯定存在一定的次数去搜索不同的动作. 1)Python版本 b站 ...
- 聊聊面试中常问的GC机制
GC 中文直译垃圾回收,是一种回收内存空间避免内存泄漏的机制.当 JVM 内存紧张,通过执行 GC 有效回收内存,转而分配给新对象从而实现内存的再利用. JVM GC 机制虽然无需开发主动参与,减轻不 ...
- IDEA & MAVEN配置代理(没用)
1. IDEA配置代理: 2. maven配置代理: 在maven中配置代理,主要配置编辑~/.m2/settings.xml文件的<proxies> socks5类型: <id&g ...
- JSON 解析中遇到的坑😭
最近做加解密遇到一个很“奇葩的问题”,解析服务端加密后的字符串 序列化 时一直报错 "json解析失败:Error Domain=NSCocoaErrorDomain Code=3840 & ...
- 高级T-SQL进阶系列 (一)【上篇】:使用 CROSS JOIN 介绍高级T-SQL
[译注:此文为翻译,由于本人水平所限,疏漏在所难免,欢迎探讨指正] 原文连接:传送门 这是一个新进阶系列的第一篇文章,我们将浏览Transact-SQL(T-SQL)的更多高级特性.这个进阶系列将会包 ...
- 洛谷 P5019 铺设道路(差分)
嗯... 题目链接:https://www.luogu.org/problem/P5019 首先简化一下题意: 给定一个长为N的数组,每次操作可以选择一个区间减去1,问最少多少次操作可以将数组中的数全 ...
- i.MX RT600之DSP开发环境调试篇
i.MX RT600的Cadence Xtensa HiFi 4 Audio DSP 是一个高度优化过的音频处理器,主频高达600MHz,专门为音频信号的编码.解码以及预处理和后处理模块而设计,功能十 ...