自己动手搭建redis集群及使用
2016-06-18 18:39
876 查看
redis从3.0版本开始正式支持集群功能,新的集群功能并没有使用之前的一致性哈希原理来分配数据,而是采用哈希槽的方式来分配,默认一共分配16384个哈希槽,那么key是怎么分配到哈希槽的呢,是通过CRC16的算法进行取模来分配对应的哈希槽,具体的算法就是:CRC16(key)% 16384,获取到的值分配到哈希槽对应的节点上。
一、下面开始说下创建集群的过程以及遇到的问题:
1.到http://download.redis.io/releases/下载3.0以后的版本解压,我下载的是3.2.0版本
4.在/opt/work/redis/目录下创建7000-7005的六个文件夹:
8.6个redis服务都启动成功后,可以创建redis集群了,进入bin目录下,执行如下命令:
二、下面开始测试下集群:
1.通过如下命令检查下集群状态:
如上图所示,可以看到有三个主节点,三个从节点。
2.redis集群的特点是去中心化的,连接那一个节点都可以设置数据和获取数据。使用redis-cli这个客户端工具连接上集群,注意需要使用-c参数:
设置一个值:
三、测试集群节点挂掉情况
首先咱们来模拟主节点挂掉的情况,那咱们就让7000这个节点挂掉,先给他kill掉;按照前面所说的,7000主节点有一个7003的从节点,那么最终7003应该会被选举为master,咱们来看下:
咱们重新把7000这个节点起来,看看会出现什么结果:
可以看到7000节点变成了7003的slave了。
四、集群添加节点,移除节点
集群添加节点的时候,如果是master的话,添加完成的时候槽数为0,需要执行reshard命令进行分配槽位数,如果是slave的话就不用管了;同理移除节点的时候,需要首先将所移除节点中的数据移动到其他的节点上,然后才能删除。
OK,就写这些了,有问题的欢迎拍砖奥。。
一、下面开始说下创建集群的过程以及遇到的问题:
1.到http://download.redis.io/releases/下载3.0以后的版本解压,我下载的是3.2.0版本
tar -zxvf redis-3.2.0.tar.gz2.解压后,进入解压出的目录,进行redis_server等的安装
cd redis-3.2.0 make PREFIX=/opt/work/redis make PREFIX=/opt/work/redis install3.安装完成后,进入:/opt/work/redis/,会发现有一个bin的目录,然后把redis-3.2.0/src目录下的redis-trib.rb文件拷贝到/opt/work/redis/bin,bin目录下有如下的文件就OK了:
4.在/opt/work/redis/目录下创建7000-7005的六个文件夹:
mkdir 7000 7001 7002 7003 7004 70055.进入每一个文件夹,创建redis.conf文件,将如下内容拷贝到文件中,端口号要去目录对应:
port 7000 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes6.开始启动redis服务,分别到7000-7005目录下面,执行下面命令,注意:一定要到此目录下执行,否则启动服务会报错
../bin/redis-server ./redis.conf7.出现如下信息就是启动成功了:
8.6个redis服务都启动成功后,可以创建redis集群了,进入bin目录下,执行如下命令:
./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:70059.报:/usr/bin/env: ruby: No such file or directory这个错误的时候,说明没有安装ruby环境,先安装下ruby环境:
yum -y install zlib ruby rubygems gem install redis10.OK了,再执行第8步骤的命令,兴奋的时刻来了,输入yes集群创建成功了:
二、下面开始测试下集群:
1.通过如下命令检查下集群状态:
../bin/redis-trib.rb check 127.0.0.1:7000
如上图所示,可以看到有三个主节点,三个从节点。
2.redis集群的特点是去中心化的,连接那一个节点都可以设置数据和获取数据。使用redis-cli这个客户端工具连接上集群,注意需要使用-c参数:
redis-cli -c -p 7000
设置一个值:
127.0.0.1:7000> set my_name dajun -> Redirected to slot [12803] located at 127.0.0.1:7002 OK 127.0.0.1:7000> get my_name "dajun"
三、测试集群节点挂掉情况
首先咱们来模拟主节点挂掉的情况,那咱们就让7000这个节点挂掉,先给他kill掉;按照前面所说的,7000主节点有一个7003的从节点,那么最终7003应该会被选举为master,咱们来看下:
../bin/redis-trib.rb check 127.0.0.1:7000
[ERR] Sorry, can't connect to node 127.0.0.1:7000
../bin/redis-trib.rb check 127.0.0.1:7001
>>> Performing Cluster Check (using node 127.0.0.1:7001) M: 1ec28165045843602ad5cd22711fe654798c29af 127.0.0.1:7001 slots:5461-10922 (5462 slots) master 1 additional replica(s) M: 2ed7f35880c2c28fa287b7c0d30e5f6d53f3b9ff 127.0.0.1:7002 slots:10923-16383 (5461 slots) master 1 additional replica(s) M: baf55935a7ee1dfd07a484813d78b3520636066b 127.0.0.1:7003 slots:0-5460 (5461 slots) master 0 additional replica(s) S: 84dc74abfc03e8a391fc5b4ff292537d74d23845 127.0.0.1:7005 slots: (0 slots) slave replicates 2ed7f35880c2c28fa287b7c0d30e5f6d53f3b9ff S: bc9fec358a5ae5201193b551698ca1732dbd83e5 127.0.0.1:7004 slots: (0 slots) slave replicates 1ec28165045843602ad5cd22711fe654798c29af [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered.如上所示,通过7000检测状态已经不行了,通过7001检测发现还是三个master,slave变成了两个,7000对应的slave变成了master了,符合期望,而且之前存储在7000上的数据同样也还能查到。
咱们重新把7000这个节点起来,看看会出现什么结果:
>>> Performing Cluster Check (using node 127.0.0.1:7001) M: 1ec28165045843602ad5cd22711fe654798c29af 127.0.0.1:7001 slots:5461-10922 (5462 slots) master 1 additional replica(s) M: 2ed7f35880c2c28fa287b7c0d30e5f6d53f3b9ff 127.0.0.1:7002 slots:10923-16383 (5461 slots) master 1 additional replica(s) M: baf55935a7ee1dfd07a484813d78b3520636066b 127.0.0.1:7003 slots:0-5460 (5461 slots) master 1 additional replica(s) S: e658473a7023f46816cf607754231a9396852f33 127.0.0.1:7000 slots: (0 slots) slave replicates baf55935a7ee1dfd07a484813d78b3520636066b S: 84dc74abfc03e8a391fc5b4ff292537d74d23845 127.0.0.1:7005 slots: (0 slots) slave replicates 2ed7f35880c2c28fa287b7c0d30e5f6d53f3b9ff S: bc9fec358a5ae5201193b551698ca1732dbd83e5 127.0.0.1:7004 slots: (0 slots) slave replicates 1ec28165045843602ad5cd22711fe654798c29af [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered.
可以看到7000节点变成了7003的slave了。
四、集群添加节点,移除节点
集群添加节点的时候,如果是master的话,添加完成的时候槽数为0,需要执行reshard命令进行分配槽位数,如果是slave的话就不用管了;同理移除节点的时候,需要首先将所移除节点中的数据移动到其他的节点上,然后才能删除。
OK,就写这些了,有问题的欢迎拍砖奥。。
相关文章推荐
- 使用spring-data-redis操作redis
- 关于spring session redis共享session的跨子域的处理
- Redis 相关学习
- redis.conf 配置详解
- Windows7下安装搭建redis教程和配置详解
- Redis安装异常解决办法
- Redis学习(一)
- Redis学习手册
- Redis 分区实现原理
- asp.net core 使用 Redis 和 Protobuf 进行 Session 缓存
- redis入门
- Redis单机、集群环境下配置及模板工具类
- Redis异步化组件模型
- redis 介绍
- Redis入门级指南---客户端命令基本操作
- NoSQL之Redis---PUB/SUB(订阅与发布)---JAVA实现
- spring-data整合redis提供通用接口
- Python的Flask框架使用Redis做数据缓存的配置方法
- tomcat-redis-session管理 使用说明
- tomcat-redis-session管理 使用说明