文档章节

redis学习笔记---redis集群

ivan-Zhao
 ivan-Zhao
发布于 2015/12/16 14:53
字数 1931
阅读 615
收藏 49
  一、介绍
    redis集群是一个可以在多个节点之间进行数据共享的设施,redis集群提供如下两个好处
     1:将数据自动切分(split)到多个节点
 2:当集群中的某一个节点故障时,redis还可以继续处理客户端的请求。
 一个 Redis 集群包含 16384 个哈希槽(hash slot),数据库中的每个数据都属于这16384个哈希槽中的一个。集群使用公式 CRC16(key) % 16384 来计算键 key 属于哪个槽。集群中的每一个节点负责处理一部分哈希槽。
 集群中的主从复制
 集群中的每个节点都有1个至N个复制品,其中一个为主节点,其余的为从节点,如果主节点下线了,集群就会把这个主节点的一个从节点设置为新的主节点,继续工作。这样集群就不会因为一个主节点的下线而无法正常工作。
 注意:如果某一个主节点和他所有的从节点都下线的话,redis集群就会停止工作了。
 redis集群不保证数据的强一致性,在特定的情况下,redis集群会丢失已经被执行过的写命令
 使用异步复制(asynchronous replication)是 Redis 集群可能会丢失写命令的其中一个原因
 网络原因,如果网络断开时间太长,redis集群就会启用新的主节点,之前发给主节点的数据就会丢失。
    

二、Redis3.0集群部署

(要让集群正常工作至少需要3个主节点,在这里我们要创建6redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下)

192.168.1.160:7000
192.168.1.160:7001

192.168.1.160:7002

192.168.1.160:7003

192.168.1.160:7004

192.168.1.160:7005

 

1:下载redis。官网下载3.0.0版本,之前2.几的版本不支持集群模式

下载地址:http://download.redis.io/releases/redis-3.0.0.tar.gz

2:上传服务器,解压,编译

tar -zxvf redis-3.0.0.tar.gz

mv redis-3.0.0.tar.gz redis3.0

cd /usr/local/redis3.0

make

make install

3:创建集群需要的目录

mkdir -p /usr/local/cluster

cd /usr/local/cluster

mkdir 7000

mkdir 7001

mkdir 7002

mkdir 7003

mkdir 7004

mkdir 7005

 

4:修改配置文件redis.conf

cp /usr/local/redis3.0/redis.conf  /usr.local/cluster

vi redis.conf

##修改配置文件中的下面选项

port 7000

daemonize yes

cluster-enabled yes

cluster-config-file nodes.conf

cluster-node-timeout 5000

appendonly yes

##修改完redis.conf配置文件中的这些配置项之后把这个配置文件分别拷贝到7000/7001/7002/7003/7004/7005目录下面

cp /usr/local/cluster/redis.conf /usr/local/cluster/7000

cp /usr/local/cluster/redis.conf /usr/local/cluster/7001

cp /usr/local/cluster/redis.conf /usr/local/cluster/7002

cp /usr/local/cluster/redis.conf /usr/local/cluster/7003

cp /usr/local/cluster/redis.conf /usr/local/cluster/7004

cp /usr/local/cluster/redis.conf /usr/local/cluster/7005

 

##注意:拷贝完成之后要修改7001/7002/7003/7004/7005目录下面redis.conf文件中的port参数,分别改为对应的文件夹的名称

 

5:分别启动这6redis实例

cd /usr/local/cluster/7000

redis-server redis.conf

cd /usr/local/cluster/7001

redis-server redis.conf

cd /usr/local/cluster/7002

redis-server redis.conf

cd /usr/local/cluster/7003

redis-server redis.conf

cd /usr/local/cluster/7004

redis-server redis.conf

cd /usr/local/cluster/7005

redis-server redis.conf

 

 

##启动之后使用命令查看redis的启动情况ps -ef|grep redis

如下图显示则说明启动成功


6:执行redis的创建集群命令创建集群

cd /usr/local/redis3.0/src

./redis-trib.rb  create --replicas 1 192.168.1.160:7000 192.168.1.160:7001 192.168.1.160:7002 192.168.1.160:7003 192.168.1.160:7004 192.168.1.160:7005

6.1执行上面的命令的时候可能会报错,因为是执行的ruby的脚本,需要ruby的环境

错误内容:/usr/bin/env: ruby: No such file or directory

所以需要安装ruby的环境,这里推荐使用yum install ruby安装

yum install ruby

 

6.2然后再执行第6步的创建集群命令,可能还会报错,提示缺少rubygems组件,使用yum安装

 

错误内容:

./redis-trib.rb:24:in `require': no such file to load -- rubygems (LoadError)

       from ./redis-trib.rb:24

yum install rubygems

6.3再次执行第6步的命令,可能还会报错,提示不能加载redis,是因为缺少redisruby的接口,使用gem 安装

错误内容:

/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- redis (LoadError)

       from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'

       from ./redis-trib.rb:25

 

gem install redis

 

6.4 再次执行第6步的命令,正常执行


输入yes,然后配置完成。


至此redis集群即搭建成功!

7:使用redis-cli命令进入集群环境

redis-cli -c -p 7000

 

 

 

Redis3.0集群添加节点

1:首先把需要添加的节点启动

cd /usr/local/cluster/

mkdir 7006

cp /usr/local/cluster/redis.conf  /usr/local/cluster/7006/

cd /usr/local/cluster/7006/

vi redis.conf

##修改redis.conf中的port参数的值为7006

redis-server redis.conf

2:执行以下命令,将这个新节点添加到集群中

cd /usr/local/redis3.0/src/

./redis-trib.rb add-node 192.168.1.160:7006 192.168.1.160:7000


3:执行命令redis-cli -c -p 7000 cluster nodes,查看刚才新增的节点


4:增加了新的节点之后,这个新的节点可以成为主节点或者是从节点

4.1 把这个节点变成主节点,使用redis-trib程序,将集群中的某些哈希槽移动到新节点里面,    这个新节点就成为真正的主节点了。

执行下面的命令对集群中的哈希槽进行移动

cd /usr/local/redis3.0/src

./redis-trib.rb reshard 192.168.1.160:7000

系统会提示我们要移动多少哈希槽,这里移动1000


然后还需要指定把这些哈希槽转移到哪个节点上,


输入我们刚才新增的节点的ID

f32dc088c881a6b930474fc5b52832ba2ff71899

然后需要我们指定转移哪几个几点的哈希槽


输入all 表示从所有的主节点中随机转移,凑够1000个哈希槽

然后再输入yesredis集群就开始分配哈希槽了。

至此,一个新的主节点就添加完成了,执行命令查看现在的集群中节点的状态

redis-cli -c -p 7000 cluster nodes


 

4.2:把这个节点变成从节点

前面我们已经把这个新节点添加到集群中了,现在我们要让新节点成为192.168.1.160:7001的从节点,只需要执行下面的命令就可以了,命令后面的节点ID就是192.168.1.160:7001的节点ID

redis-cli -c -p 7006 cluster replicate 0b00721a509444db793d28448d8f02168b94bd38

使用下面命令来确认一下192.168.1.160:7006是否已经成为192.168.1.160:7001的从节点

 redis-cli -p 7000 cluster nodes | grep slave | grep 0b00721a509444db793d28448d8f02168b94bd38

看到下面图片中的情况就表示添加成功

 

 

Redis3.0集群删除节点

1:如果删除的节点是主节点,这里我们删除192.168.1.160:7006节点,这个节点有1000个哈希槽

首先要把节点中的哈希槽转移到其他节点中,执行下面的命令

cd /usr/local/redis3.0/src

./redis-trib.rb reshard 192.168.1.160:7000

系统会提示我们要移动多少哈希槽,这里移动1000个,因为192.168.1.160:7006节点有1000个哈希槽

然后系统提示我们输入要接收这些哈希槽的节点的ID,这里使用192.168.1.160:7001的节点ID

然后要我们选择从那些节点中转出哈希槽,这里一定要输入192.168.1.160:7006这个节点的ID,最后输入 done  表示输入完毕

最后一步,使用下面的命令把这个节点删除

cd /usr/local/redis3.0/src/

./redis-trib.rb del-node 192.168.1.160:7000  需要删除的节点ID

2:如果节点是从节点的,直接使用下面的命令删除即可。

cd /usr/local/redis3.0/src/

./redis-trib.rb del-node 192.168.1.160:7000 需要删除的节点ID

 

© 著作权归作者所有

ivan-Zhao
粉丝 10
博文 33
码字总数 29110
作品 0
深圳
程序员
私信 提问
加载中

评论(4)

Kungfupeng
Kungfupeng
赞��
ivan-Zhao
ivan-Zhao 博主

引用来自“IamOkay”的评论

42不错,赞一个
谢谢~~~
ivan-Zhao
ivan-Zhao 博主
谢谢~~~
IamOkay
IamOkay
42不错,赞一个
Lind.DDD.Repositories.Redis层介绍

之前已经发生了 大叔之前介绍过关于redis的文章,有缓存,队列,分布式pub/sub,数据集缓存以及仓储redis的实现等等,而今天在Lind.DDD的持久化组件里,redis当然也有一席之地,作为当今最红...

mcy247
2017/12/07
0
0
Redis学习笔记之安装(一)

Redis 下载 1.1 下载地址 http://redis.io/download 1.2 版本 redis-3.2.3.tar.gz 2. Redis 安装 2.1 拷贝安装包 拷贝安装包到Linux系统中的/opt目录下 2.2 解压安装包 /opt目录下,解压命令...

残风vs逝梦
2016/08/07
67
0
redis学习笔记---redis的哨兵Sentinel

一、介绍: redis的sentinel系统用来管理多个redis服务器,可以实现一个功能上实现HA的集群。该系统主要执行三个任务: ①监控(Monitoring):Redis Sentinel实时监控主服务器和从服务器运行...

ivan-Zhao
2015/12/16
320
0
Redis学习笔记(11)——Redis缓存集群方案

由于单台Redis服务器的内存管理能力有限,使用过大内存的Redis又会使得服务器的性能急剧下降,一旦服务器发生故障将会影响更大范围业务,而Redis 3.0 beta1支持的集群功能还不适合生产环境的...

IT特种兵
2015/03/02
444
0
Redis学习笔记~StackExchange.Redis实现分布式Session

对于多WEB的环境现在已经是必须的了,很难想像一台WEB服务器面对百万并发的响应,所以,我们需要多台WEB服务器集群合作,来缓解这种高并发,高吞吐的场景,而对于多WEB的场景又会有个问题出现...

mcy247
2017/12/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Tensorflow 2.0安装

Tensorflow2.0安装环境: Ubuntu 16.04或更高(64位) Windows 7或者更高(64位,且支持python3) 安装Tensorflow 2.0 GPU版本的需要安装NVIDIA相关软件包: NVIDIA驱动 :版本必须410.x或更...

JosiahMg
16分钟前
4
0
TL138/1808/6748F-EasyEVM开发板硬件、CPU、FLASH、RAM

TL138/1808/6748F-EasyEVM是广州创龙基于SOM-TL138/SOM-TL1808/SOM-TL6748F核心板开发的一款开发板。由于SOM-TL138/SOM-TL1808/SOM-TL6748核心板管脚兼容,所以此三个核心板共用同一个底板。...

Tronlong创龙
24分钟前
4
0
百度嵌入式AI解决方案EdgeBoard之内存驱动设计介绍

1. 背景介绍 由于 FPGA 具备可编程和高性能计算的特点,基于FPGA硬件的AI计算加速,正广泛地应用到计算机视觉处理领域。其中极具代表性的部署方式之一就是使用FPGA和CPU组合构成异构计算系统...

AI君
30分钟前
6
0
开放应用模型(OAM):全球首个云原生应用标准定义与架构模型

Kubernetes 项目作为容器编排领域的事实标准, 成功推动了诸如阿里云 Kubernetes (ACK)等云原生服务的迅速增长。但同时我们也关注到,Kubernetes 的核心 API 资源比如 Service、Deploymen...

Mr_zebra
33分钟前
4
0
《Linux操作系统-Exynos4412》编译和安装Busybox

开发环境:Exynos4412-iTOP-4412开发板 现在 Busybox 的配置已经完成了,接下来开始编译 Busybox,在 Ubuntu 的终端输入 “make”命令开始编译 Busybox,如下图。 下图为编译过程中的截图。 ...

书白
36分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部