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 ...
随机推荐
- 更改文本的编码jsp.xml.java
JSP改为UTF-8编码 更改xml workspace resource
- SSH不能连接虚拟机中的Ubuntu
设置 网络 既然要远程ubuntu的系统.那么首先是两个网络是不是在一个网段.能不能ping的通? a) Windows电脑上--cmd 打开命令窗口.键入:ipconfig 命令.查看主机IP. b ...
- Cuckoo Hash和多级Hash的粗浅认识
通过对Cuckoo Hash.多级Hash和BloomFilter的粗浅了解,感觉它们三者存在类似之处,算是近亲(暂且把普通的Hash称作远亲). Cuckoo Hash的思想非常简单,冲突时,重Ha ...
- SpringMVC源码解读 - HandlerMapping - SimpleUrlHandlerMapping初始化
摘要: SimpleUrlHandlerMapping只是参与Handler的注册,请求映射时由AbstractUrlHandlerMapping搞定. 初始化时,通过setMappings(Prop ...
- mybatis SqlMapConfig.xml
一.SqlMapConfig.xml 1.属性properties 在入门时,以抽取出连接数据库的属性得到properties文件. a.可以通过resource和url来获得属性. b.proper ...
- 团体程序设计天梯赛L1-024 后天 2017-03-22 17:59 68人阅读 评论(0) 收藏
L1-024. 后天 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 如果今天是星期三,后天就是星期五:如果今天是星期六,后天就 ...
- CodeForces 122G Lucky Array(一脸懵逼的树状数组)
Petya loves lucky numbers. Everybody knows that lucky numbers are positive integers whose decimal re ...
- Python 数据分析—第七章 数据归整:清理、转换、合并、重塑
一.数据库风格的Dataframe合并 import pandas as pd import numpy as np df1 = pd.DataFrame({'1key':['b','b','a',' ...
- 小试maven工程
由于工作中要用到maven来进行开发j2ee开发,所以选用了集成maven的eclipse版本: 下载地址: https://www.eclipse.org/downloads/ 根据提示下载32或者 ...
- [Postgres]合并多行到一列(转)
转自http://csk83.sinaapp.com/?p=104 在实际应用中常常遇见这样的情况,见下表,我们现在需要统计出来每年每个人的工资总和以及发放月份. user_name year mon ...