redis cluster 部署过程
一, 特点
高性能:
1、在多分片节点中,将16384个槽位,均匀分布到多个分片节点中
2、存数据时,将key做crc16(key),然后和16384进行取模,得出槽位值(0-16383之间)
3、根据计算得出的槽位值,找到相对应的分片节点的主节点,存储到相应槽位上
4、如果客户端当时连接的节点不是将来要存储的分片节点,分片集群会将客户端连接切换至真正存储节点进行数据存储
高可用:
在搭建集群时,会为每一个分片的主节点,对应一个从节点,实现slaveof的功能,同时当主节点down,实现类似于sentinel的自动failover的功能。
1、redis会有多组分片构成(3组)
2、redis cluster 使用固定个数的slot存储数据(一共16384slot)
3、每组分片分得1/3 slot个数(0-5500 5501-11000 11001-16383)
4、基于CRC16(key) % 16384 ====》值 (槽位号)。
规划、搭建过程:
6个redis实例,一般会放到3台硬件服务器
注:在企业规划中,一个分片的两个分到不同的物理机,防止硬件主机宕机造成的整个分片数据丢失。
二, 配置
端口号:7000-7005
1、安装集群插件
EPEL源安装ruby支持
yum install ruby rubygems -y
使用国内源
gem sources -l
gem sources -a http://mirrors.aliyun.com/rubygems/
gem sources --remove https://rubygems.org/
gem sources -l
gem install redis -v 3.3.3
或者:
gem sources -a http://mirrors.aliyun.com/rubygems/ --remove https://rubygems.org/
2、集群节点准备
mkdir /data/{..}
vim /data//redis.conf
port
daemonize yes
pidfile /data//redis.pid
loglevel notice
logfile "/data/7000/redis.log"
dbfilename dump.rdb
dir /data/
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout
appendonly yes
vim /data//redis.conf
port
daemonize yes
pidfile /data//redis.pid
loglevel notice
logfile "/data/7001/redis.log"
dbfilename dump.rdb
dir /data/
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout
appendonly yes
vim /data//redis.conf
port
daemonize yes
pidfile /data//redis.pid
loglevel notice
logfile "/data/7002/redis.log"
dbfilename dump.rdb
dir /data/
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout
appendonly yes
vim /data//redis.conf
port
daemonize yes
pidfile /data//redis.pid
loglevel notice
logfile "/data/7003/redis.log"
dbfilename dump.rdb
dir /data/
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout
appendonly yes
vim /data//redis.conf
port
daemonize yes
pidfile /data//redis.pid
loglevel notice
logfile "/data/7004/redis.log"
dbfilename dump.rdb
dir /data/
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout
appendonly yes
vim /data//redis.conf
port
daemonize yes
pidfile /data//redis.pid
loglevel notice
logfile "/data/7005/redis.log"
dbfilename dump.rdb
dir /data/
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout
appendonly yes
vim /data//redis.conf
port
daemonize yes
pidfile /data//redis.pid
loglevel notice
logfile "/data/7006/redis.log"
dbfilename dump.rdb
dir /data/
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout
appendonly yes
vim /data//redis.conf
port
daemonize yes
pidfile /data//redis.pid
loglevel notice
logfile "/data/7007/redis.log"
dbfilename dump.rdb
dir /data/
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout
appendonly yes
启动节点:
redis-server /data//redis.conf
redis-server /data//redis.conf
redis-server /data//redis.conf
redis-server /data//redis.conf
redis-server /data//redis.conf
redis-server /data//redis.conf
redis-server /data//redis.conf
redis-server /data//redis.conf
[root@db01 ~]# ps -ef |grep redis

3、将节点加入集群管理
redis-trib.rb create --replicas 127.0.0.1: 127.0.0.1: 127.0.0.1: 127.0.0.1: 127.0.0.1: 127.0.0.1:
4、集群状态查看
集群主节点状态
redis-cli -p cluster nodes | grep master
集群从节点状态
redis-cli -p cluster nodes | grep slave
三, 添加节点
集群节点管理
添加主节点:
redis-trib.rb add-node 127.0.0.1: 127.0.0.1:
add-node 后面写的地址为需要添加的地址
最后的地址为管理的地址
添加一个从节点
-----------------------------注意---------------------------
redis-trib.rb add-node --slave --master-id 691dbaf500ffe5a60213a5f8681637ea7868e9c5 127.0.0.1: 127.0.0.1:
--master-id 后面的是对应的主节点id值
后面跟的是从节点地址
最后的是管理节点地址

转移slot(重新分片)
----------------------------重点-----------------------
每次添加都必须向新添加的节点增加slot,不然没有性能的提升
redis-cli -p cluster nodes | grep master

添加节点后默认是没有slot的
运行
redis-trib.rb reshard 127.0.0.1:

后面的数字填写的是需要挪动的slot数 一般是16384除以主节点数得出的结果
我这里节点数有4个 所以 16384/4 = 4096

这个id值为需要接收的id 就是哪个新添加需要接收slot的id值

这个是选择从哪里拿slot值, 选择all就是再所有节点上拿一点 每个节点平均分给需要收益的节点

选择yes 表示开始配置!!!!!
四, 删除节点
将需要删除节点的slot先移动走
redis-trib.rb reshard 127.0.0.1:7000
进入内容后
归还第一个空间

因为节点一开始分配了4096的slot ,所以要把4096均匀的还给其余三个节点
第一个节点归还
第一个值是归还的大小
第二个值为归还的目标,我这里第一个归还目标为7000节点
选择确定

第一个为选择从哪里拿去slot值,因为要删除7006, 所以也是从7006拿区值
第二个空位done 及结束,表示只在这里拿
确定

选择yes
第二次归还
发现7006空间少了,7000空间添加进去了 
剩下的开始归还

确定到底,
第一个值位从7006要删除的节点抽取的slot值
第二个位抽取的值接收的节点ID
第三个值为抽取slot值的节点是哪个
第四个为结束
确定------>后面的为yes
第三次归还

发现slot又少了, 受益者为7001

确定到底,
第一个值位从7006要删除的节点抽取的slot值
第二个位抽取的值接收的节点ID
第三个值为抽取slot值的节点是哪个
第四个为结束
确定------>后面的为yes

最后发现没了
现在删除他们一主一从 7006 7007
[root@db01 ~]# redis-trib.rb del-node 127.0.0.1:7006 d3d67f8fd1680caba870a8b5a167c365088f6840
>>> Removing node d3d67f8fd1680caba870a8b5a167c365088f6840 from cluster 127.0.0.1:
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.
[root@db01 ~]# redis-trib.rb del-node 127.0.0.1:7007 64701ac2c0cf563cb6160c6948e97d2fdf602bfd
>>> Removing node 64701ac2c0cf563cb6160c6948e97d2fdf602bfd from cluster 127.0.0.1:
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.

redis-trib.rb del-node 127.0.0.1:7006 d3d67f8fd1680caba870a8b5a167c365088f6840
redis-trib.rb del-node 127.0.0.1:7007 64701ac2c0cf563cb6160c6948e97d2fdf602bfd
后面的值为地址和对应的id
要重新添加节点的话需要重新启动节点信息并且删除节点里面的信息
redis cluster 部署过程的更多相关文章
- window下使用Redis Cluster部署Redis集群
日常的项目很多时候都需要用到缓存.redis算是一个比较好的选择.一般情况下做一个主从就可以满足一些比较小的项目需要.在一些并发量比较大的项目可能就需要用到集群了,redis在Windows下做集群可 ...
- Redis Cluster部署、管理和测试
背景: Redis 3.0之后支持了Cluster,大大增强了Redis水平扩展的能力.Redis Cluster是Redis官方的集群实现方案,在此之前已经有第三方Redis集群解决方案,如Twen ...
- 最适合新手的Redis Cluster搭建过程
好记性不如烂笔头,记录分片高可用Redis Cluster的搭建过程 Redis集群演进过程 Redis单节点 主从复制: 复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复. 故 ...
- 基于redis5的redis cluster部署
一.环境规划 #准备六台主机,地址如下 10.0.0.8 ---> master1 10.0.0.18 ---> master2 10.0.0.28 ---> master3 10. ...
- 【docker】【redis】2.docker上设置redis集群---Redis Cluster部署【集群服务】【解决在docker中redis启动后,状态为Restarting,日志报错:Configured to not listen anywhere, exiting.问题】【Waiting for the cluster to join...问题】
参考地址:https://www.cnblogs.com/zhoujinyi/p/6477133.html https://www.cnblogs.com/cxbhakim/p/9151720.htm ...
- Linux Centos 7 下部署 .NetCore + MySql + Redis + mssql2007 部署过程
1. net core 安装及运行配置 安装 1)rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-p ...
- 在 K8S 中快速部署 Redis Cluster & Redisinsight
Redis Cluster 部署 使用 Bitnami helm chart 在 K8S redis 命名空间中一键部署 Redis cluster . helm repo add bitnami h ...
- 170103、Redis官方集群方案 Redis Cluster
前面我们谈了Redis Sharding多服务器集群技术,Redis Sharding是客户端Sharding技术,对于服务端来说,各个Redis服务器彼此是相互独立的,这对于服务端根据需要灵活部署R ...
- Redis Cluster 原理相关说明
背景 之前写的 Redis Cluster部署.管理和测试 和 Redis 5.0 redis-cli --cluster help说明 已经比较详细的介绍了如何安装和维护Cluster.但关于Clu ...
随机推荐
- HTTP Debugger Pro使用教程
相关链接:HTTP Debugger Pro安装教程 1.设置过滤器,只监控指定地址的数据 选择仅显示匹配的记录 输入监控地址 控件传输的数据 服务器返回的数据
- JS 观察者模式
Events = function() { var listen, log, obj, one, remove, trigger, __this; obj = {}; __this = this; l ...
- 编写高质量代码改善C#程序的157个建议——建议62:避免嵌套异常
建议62:避免嵌套异常 应该允许异常在调用堆栈上往上传,不要过多的使用catch,然后再throw.过多的使用catch会带来两个问题: 1)代码更多了.这看上去好像你根本不知道怎么处理异常,所以你总 ...
- Discovering Gold LightOJ - 1030 (概率dp)
You are in a cave, a long cave! The cave can be represented by a 1 x N grid. Each cell of the cave c ...
- hdu 4284 Travel(壮压DP&TSP&floyd)
Travel Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- base64编码问题
最近遇到一个很奇怪的问题:post方式上传文件,因为文件不大,所以直接base64后作为参数扔给服务器.一开始好用,后来出问题了,上传的压缩包再下载后,能双击打开看到压缩包里面的文件,但是解压就报错, ...
- Windows上编译libpng
下载libpng 1.5.10并解压到[工作目录]/png/libpng-1.5.10 用CMake选择png/libpng-1.5.10目录并Configure: CMAKE_C_FLAGS_DEB ...
- Data Base Oracle 常用命令
Data Base Oracle 常用命令 1.登录:(不需要密码,属于管理员权限) conn /as sysdba; 2.查看数据库存储位置: select name from v$datafil ...
- tf-idf sklearn
第一步:语料转化为词袋向量 step 1. 声明一个向量化工具vectorizer: 本文使用的是CountVectorizer,默认情况下,CountVectorizer仅统计长度超过两个字符的词, ...
- “全栈2019”Java第七章:IntelliJ IDEA注释快捷键
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...