Redis集群分布
Redis系列
作者Mr.Chen,转载请注明博客出处:http://www.cnblogs.com/cjh-notes/
Redis集群存储
先看下架构图,下面说明其存储原理:首先redis每个节点上的数据都是不一样的,只有主从节点的数据是一样,这分别体现出其分布式及高可用性。每个主节点负责的是不同范围的槽(slot),根据指定算法来确定值所对应的槽进而进行存取操作。
注意点:
- redis最低要求3个或以上的主节点(Master Node)
- 一个主节点可对应多个从节点(Slave Node),主节点挂掉后,自有的投票机制会选出其中一个从节点晋升为主节点
- 任何一个主节点挂掉都会使整个redis服务器宕机
- 槽(slot)直接对应的是主节点
Redis集群搭建
redis集群搭建有几种方法,我使用的是官方推荐的redis-cluster
第一步:安装ruby
其实整个流程用到的是一个叫redis-trib.rb工具,因其由ruby语言编写所以需要相应环境的支持。
下载安装:
因为yum库上的版本过低,所以我是直接从官网上下载tar包解压安装的,如果原来有安装旧版本的,建议先卸载干净旧版本再进行新版本的安装,不然会有不少麻烦的错误~
我这里使用的是2.4.3稳定版
wget https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.3.tar.gz make && make install ruby –v gem –v gem install redis
ps:gem是ruby的一个包管理器,类似yum,gem install redis安装的是集群所需的组件
第二步:节点配置
节点配置主要有以下几步:
- 在多个节点上安装redis
- 节点配置文件redis.conf中打开集群属性,cluster-enable yes
- 修改端口号,port NodePort
- 修改集群的节点配置文件,cluster-config-file nodes_port.conf
- 若是不同的主机需要修改绑定的主机地址,bind host
- 可以使用 include 来共享相同的配置,include same.conf
第三步:启动各节点redis服务器
第四步:创建集群
现在使用redis-trib.rb工具对redis的节点进行集群管理,创建集群3主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:
参数replicas 表示每个主节点下有多少个从节点,至于哪个节点是主哪个节点是从就由redis来进行分配。
ps:有时宕机后需要重新创建或新增节点时会出现这样的错误:
[ERR] Node 127.0.0.1:7000 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
提示中说明了两个原因,一个是节点的配置信息已过期(指的是redis.conf中的cluster-config-file,一般位于主节点根目录下),另一个原因是本地数据库存在一些值造成了影响,那么解决办法就有以下两种了:
- 删除nodes-port.conf
- 删除aof、rdb文件
需要注意的是在进行以上操作前要先把redis的进程关闭,处理完之后再重新启动
最后一步:测试
//在节点7000设置值 ./redis-cli -c -p 127.0.0.1:> set name cjh -> Redirected to slot [] located at 127.0.0.1: OK //在节点7001获取值 ./redis-cli -c -p 127.0.0.1:> get name "cjh" //查看集群节点的信息 127.0.0.1:> cluster nodes
测试通过~
Redis集群分布的更多相关文章
- Redis集群分布(Windows版)
Redis系列 作者Mr.Chen,转载请注明博客出处:http://www.cnblogs.com/cjh-notes/ 第一步:下载安装redis windows版的下载地址:https://gi ...
- redis集群(多机)分布
一.实现原理 一致性哈希算法(Consistent Hashing): http://www.zsythink.net/archives/1182 二.配置两个redis服务,端口号要不一致 三.代码 ...
- Redis集群最佳实践
今天我们来聊一聊Redis集群.先看看集群的特点,我对它的理解是要需要同时满足高可用性以及可扩展性,即任何时候对外的接口都要是基本可用的并具备一定的灾备能力,同时节点的数量能够根据业务量级的大小动态的 ...
- Redis 集群的合纵与连横
之前一篇写了关于 Redis 的性能,这篇就写写我认为比性能更重要的扩展性方面的主题. 如果再给我一次回到好几年前的机会,对于使用 Redis 我一开始就要好好考虑将来的扩展问题.就像我们做数据库分库 ...
- 搭建高可用的redis集群,避免standalone模式带给你的苦难
现在项目上用redis的话,很少说不用集群的情况,毕竟如果生产上只有一台redis会有极大的风险,比如机器挂掉,或者内存爆掉,就比如我们生产环境 曾今也遭遇到这种情况,导致redis内存不够挂掉的情况 ...
- 25.redis集群搭建笔记
###Redis集群### 0.准备 软件: redis-3.0.0.gem redis-3.0.0.tar.gz#源码 1.安装ruby环境 redis基于ruby槽位计算,hash算法技术,k ...
- redis集群讨论
一.生产应用场景 二.存储架构演变 三.应用最佳实践 四.运维经验总结 第1.2节:介绍redis cluster在唯品会的生产应用场景,以及存储架构的演变.第3节:redis cluster的稳定性 ...
- 高性能网站架构设计之缓存篇(5)- Redis 集群(上)
集群技术是构建高性能网站架构的重要手段,试想在网站承受高并发访问压力的同时,还需要从海量数据中查询出满足条件的数据,并快速响应,我们必然想到的是将数据进行切片,把数据根据某种规则放入多个不同的服务器节 ...
- 基于Twemproxy的Redis集群方案
概述 由于单台redis服务器的内存管理能力有限,使用过大内存redis服务器的性能急剧下降,且服务器发生故障将直接影响大面积业务.为了获取更好的缓存性能及扩展型,我们将需要搭建redis集群来满足需 ...
随机推荐
- [国嵌攻略][069][Bootm命令移植]
Bootloader作用 1.初始化软硬件 2.启动操作系统 内核分类 1.zImage 不加信息头的内核 2.uImage 加信息头后的内核,用bootm命令来启动 bootm作用 1.检测信息头: ...
- 织梦中data文件夹是存放什么内容的
dede(织梦)的data文件夹下的文件及文件夹也不少,我们来一个一个的介绍下. 1. admin文件夹 admin文件夹 管理员用到的文件夹,一般是后台的配置文件. 第一个文件,idc.txt 配置 ...
- PHP move_uploaded_file() 函数
PHP Filesystem 函数 定义和用法 move_uploaded_file() 函数将上传的文件移动到新位置. 若成功,则返回 true,否则返回 false. 语法 move_upload ...
- sqlite数据库的char,varchar,text,nchar,nvarchar,ntext的区别
1.CHAR.CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充. 2.VAR ...
- poweshell批量删除某类型文件
错误方法 rm *.o" -recurse 按照提示,rm(remove-item)是可以递归删除子文件夹的.但是这个方法确实无效.在他们的示例里面找到说明: --------------- ...
- c#目录以及子目录下图片批量缩放,像素不变,图像大小改变
采用多线程,整体效果 图像根目录黏贴或者手工选择,点击开始,进行目录底下图片筛查.采用多线程,点击开始按钮,开启线程,这样UI不会卡住 private void button2_Click(objec ...
- 使用WinDbg获取SSDT函数表对应的索引再计算得出地址
当从Ring3进入Ring0的时候会将所需要的SSDT索引放入到寄存器EAX中去,所以我们这里通过EAX的内容得到函数在SSDT中的索引号,然后计算出它的地址首先打开WinDbug,我们以函数ZwQu ...
- Spring-depends on
depends-on用来表示一个bean A的实例化依靠另一个bean B的实例化, 但是A并不需要持有一个B的对象,如果需要的话就不用depends-on. 示例: 步骤一: public clas ...
- elasticsearch java和_head插件对索引文档的增删改查
利用head插件: 1,创建索引并添加一条数据(yananindex:索引名称,yanantype:索引类型,1:索引id) 2.修改索引数据(索引id1不变,_version是对该索引数据执行了几次 ...
- CentOS 7 修改SSH端口号 和 ssh无法使用密码登录 和 查看pid 端口占用
如下示例把SSH默认端口22改为122. 1 修改/etc/ssh/sshd_config文件 #Port #找到改行,如果还想继续使用该端口,可以把#去掉,如果使用新端口,可以默认不管 Port # ...