文档章节

分布式缓存redis-cluster环境搭建及wishstack调用Jedis

tantexian
 tantexian
发布于 2016/08/05 09:59
字数 1686
阅读 86
收藏 2
redis集群三种方式
1、Redis官方提供的集群解决方案-Redis-cluster (刚发布差不多一年)
2、 Twemproxy ( twitter贡献的) 使用时间比较长,比较成熟,但是有些功能不支持
3、豌豆尖针对Twemproxy 进行改良优化后的解决方案codis
 
更多分布式缓存方案级别选型请参考博文:http://my.oschina.net/tantexian/blog/685620
 
redis应用场景:任何需要用到缓存的地方,解决本地缓存数据量太小问题。分布式缓存能有效防止本地缓存失效数据库雪崩现象。 解决分布式应用中缓存不能共用(分布式session保存)。云计算中为客户提供缓存分布式缓存redis服务(青云、UnitedStack等厂商已经具有了)
 
接下来主要讲解如何搭建Redis-cluster集群环境及wishstack如何使用Jedis调用Redis集群:
mkdir cluster-test
cd cluster-test
mkdir 7000 7001 7002 7003 7004 7005
 
 
yum install gcc wget -y
wget http://download.redis.io/releases/redis-3.0.5.tar.gz
 
tar xzvf redis-3.0.5.tar.gz
cd redis-3.0.5
make(直接make报错则使用make MALLOC=libc)
 
yum install tcl -y
make test
make install
安装完毕redis-*常规操作命令脚本即被copy到linux bin下面,可以直接使用(当然也可以使用编译完的源码包./redis-3.0.5/src/下面的脚本)
 
将redis源码包的配置文件复制到7000/
 
cp redis-3.0.5/redis.conf 7000/
 

vi 7000/redis.conf

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

port 7000

daemonize yes

cluster-enabled yes

cluster-config-file nodes-7000.conf

cluster-node-timeout 5000

appendonly yes

将修改好的7000/redis.conf文件复制到其他文件夹(修改redis.conf 端口port为对于的port)
cp 7000/redis.conf 7001/
 
cp 7000/redis.conf 7002/
 
cp 7000/redis.conf 7003/
 
cp 7000/redis.conf 7004/
 
cp 7000/redis.conf 7005/

注:7001文件夹下面的redis.conf将端口修改为7001,其他依次类推。

 

分别启动6个redis实例:

redis-server ./7000/redis.conf

redis-server ./7001/redis.conf

redis-server ./7002/redis.conf

redis-server ./7003/redis.conf

redis-server ./7004/redis.conf

redis-server ./7005/redis.conf

 

redis-server ./7000/redis.conf && redis-server ./7001/redis.conf && redis-server ./7002/redis.conf && redis-server ./7003/redis.conf && redis-server ./7004/redis.conf&& redis-server ./7005/redis.conf

 

 

 

使用ruby脚本redis-trib.rb执行redis的创建集群命令创建集群

 

#redis3.0.5源码包中的redis-trib.rb的create子命令构建集群

其中参数--replicas

则指定了Redis Cluster中的每个Master节点配备几个Slave节点

其中节点角色由顺序决定,先master之后是slave

 

使用redis-trib.rb脚本必须有ruby环境,及redis的ruby接口。

yum -y install ruby ruby-devel rubygems rpm-build

gem install redis(网速不行则使用淘宝的gem源:gem sources --add https://ruby.taobao.org/ --remove https://rubygems.org/)

 

创建redis集群:

./redis-3.0.5/src/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:7005
./redis-3.0.5/src/redis-trib.rb create --replicas 1 172.31.2.32:7000 172.31.2.32:7001 172.31.2.32:7002 172.31.2.32:7003 172.31.2.32:7004 172.31.2.32:7005
 
 

./redis-3.0.5/src/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:7005

这个命令在这里用于创建一个新的集群, 选项--replicas 1 表示我们希望为集群中的每个主节点创建一个从节点。

之后跟着的其他参数则是这个集群实例的地址列表,3个master3个slave

redis-trib 会打印出一份预想中的配置给你看, 如果你觉得没问题的话, 就可以输入 yes , redis-trib 就会将这份配置应用到集群当中,让各个节点开始互相通讯,最后可以得到如下信息:

[OK] All 16384 slots covered

这表示集群中的 16384 个槽都有至少一个主节点在处理, 集群运作正常。

 


 

测试redis-cluster:

 

 

 

 

slaveof配置项。

./redis-trib.rb create --replicas添加主从节点???

 

 

注:若报上述错误,则使用redis-cli -c -p 7000端口连接,使用dbsize命令,如果不为零,则使用flushall命令清零。如果报是slave不能清零,

则找到该slave对应的master,执行上述操作。知道dbsize为0.

redis-cli -c -p 7000 shutdown && redis-cli -c -p 7001 shutdown && redis-cli -c -p 7002 shutdown && redis-cli -c -p 7003 shutdown && redis-cli -c -p 7004 shutdown &&redis-cli -c -p 7005 shutdown

 

redis-server ./7000/redis.conf && redis-server ./7001/redis.conf && redis-server ./7002/redis.conf && redis-server ./7003/redis.conf && redis-server ./7004/redis.conf&& redis-server ./7005/redis.conf

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

 

 

注:del-node之前需要将该节点./redis-trib.rb reshard 127.0.0.1:7003到其他节点,只有空的实例才能被删除。

如果使用keys * 查询到结果为空,说明当前实例保存数据为空,能够使用del-node命令移除。

 

 

 

 

将127.0.0.1::7000关掉:redis-cli -c -p 7000 shutdown

更多关于redis-cli操作请参考:http://blog.csdn.net/tantexian/article/details/49924873

 

接下来再172.31.2.33上面重新启动redis-server来讲该节点添加到上述创建好的172.31.2.32的redis集群中。

第一步还是跟上述步骤一样,安装redis基础环境。

 

 

将172.31.2.33上面新跑的实例*:8000 及*:8001加入到集群中来。

 

cluster集群相关命令,更多redis相关命令见文档:http://redis.readthedocs.org/en/latest/

 

  1. 集群
  2. CLUSTER INFO 打印集群的信息
  3. CLUSTER NODES 列出集群当前已知的所有节点(node),以及这些节点的相关信息。
  4. 节点
  5. CLUSTER MEET <ip> <port> 将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。
  6. CLUSTER FORGET <node_id> 从集群中移除 node_id 指定的节点。
  7. CLUSTER REPLICATE <node_id> 将当前节点设置为 node_id 指定的节点的从节点。
  8. CLUSTER SAVECONFIG 将节点的配置文件保存到硬盘里面。
  9. 槽(slot)
  10. CLUSTER ADDSLOTS <slot> [slot ...] 将一个或多个槽(slot)指派(assign)给当前节点。
  11. CLUSTER DELSLOTS <slot> [slot ...] 移除一个或多个槽对当前节点的指派。
  12. CLUSTER FLUSHSLOTS 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。
  13. CLUSTER SETSLOT <slot> NODE <node_id> 将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽>,然后再进行指派。
  14. CLUSTER SETSLOT <slot> MIGRATING <node_id> 将本节点的槽 slot 迁移到 node_id 指定的节点中。
  15. CLUSTER SETSLOT <slot> IMPORTING <node_id> 从 node_id 指定的节点中导入槽 slot 到本节点。
  16. CLUSTER SETSLOT <slot> STABLE 取消对槽 slot 的导入(import)或者迁移(migrate)。
  17. CLUSTER KEYSLOT <key> 计算键 key 应该被放置在哪个槽上。
  18. CLUSTER COUNTKEYSINSLOT <slot> 返回槽 slot 目前包含的键值对数量。
  19. CLUSTER GETKEYSINSLOT <slot> <count> 返回 count 个 slot 槽中的键。

 

 

真是场景的redis集群环境部署:

建议至少三台机器:(其实redis.server服务时PING-PONG无中心架构,且,可以在同一台机器上面启动多个master及slave)

node1:172.31.2.31

node2:172.31.2.32

node3:172.31.2.33

 

三组一主两从设计:

172.31.2.31:7000(主) 172.31.2.32:7000(从) 172.31.2.33:7000(从) 

172.31.2.32:7001(主) 172.31.2.31:7001(从) 172.31.2.33:7001(从) 

172.31.2.33:7002(主) 172.31.2.31:7002(从) 172.31.2.32:7002(从) 

 

这样就达到了比较高的稳定性。

 

 

 

 

jedis使用:

https://github.com/xetorthio/jedis

 

 

 

 

 

 

关于redis性能测试:

http://www.runoob.com/redis/redis-benchmarks.html

 

redis主从复制:

http://www.cnblogs.com/zhaoguihua/p/redis-004.html

 

 

 

© 著作权归作者所有

tantexian
粉丝 225
博文 527
码字总数 746616
作品 0
成都
架构师
私信 提问
Redis笔记1-redis的搭建和使用

1. Redis的安装 1.1. Redis的安装 Redis是c语言开发的。 安装redis需要c语言的编译环境。如果没有gcc需要在线安装。yum install gcc-c++ 安装步骤: 第一步:redis的源码包上传到linux系统。...

狂小白
2017/12/17
0
0
redis 一二事 - 搭建集群缓存服务器

在如今并发的环境下,对大数据量的查询采用缓存是最好不过的了,本文使用redis搭建集群 (个人喜欢redis,对memcache不感冒) redis是3.0后增加的集群功能,非常强大 集群中应该至少有三个节...

风间影月
2016/04/28
0
0
Jedis cluster集群初始化源码剖析

在项目中我们经常使用spring-data-redis来操作Redis,它封装了Jedis客户端来与Redis服务器进行各种命令操作。由于最近用到了Redis Cluster集群功能,这里就分析总结一下Jedis cluster集群初始...

九州暮云
2017/10/30
1K
0
Redis从单机到集群,一步步教你环境部署以及使用

Redis作为缓存系统来说还是很有价值的,在大数据方向里,也是需要有缓存系统的。一般可以考虑tachyon或者redis,由于redis安装以及使用更简单,所以还是优先考虑了它。那么在一些场景下为了保...

青夜之衫
2017/12/04
0
0
Redis笔记整理(二):Java API使用与Redis分布式集群环境搭建

[TOC] Redis Java API使用(一):单机版本Redis API使用 Redis的Java API通过Jedis来进行操作,因此首先需要Jedis的第三方库,因为使用的是Maven工程,所以先给出Jedis的依赖: 基本代码示例...

xpleaf
2018/06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

代理模式之JDK动态代理 — “JDK Dynamic Proxy“

动态代理的原理是什么? 所谓的动态代理,他是一个代理机制,代理机制可以看作是对调用目标的一个包装,这样我们对目标代码的调用不是直接发生的,而是通过代理完成,通过代理可以有效的让调...

code-ortaerc
23分钟前
4
0
学习记录(day05-标签操作、属性绑定、语句控制、数据绑定、事件绑定、案例用户登录)

[TOC] 1.1.1标签操作v-text&v-html v-text:会把data中绑定的数据值原样输出。 v-html:会把data中值输出,且会自动解析html代码 <!--可以将指定的内容显示到标签体中--><标签 v-text=""></......

庭前云落
55分钟前
7
0
VMware vSphere的两种RDM磁盘

在VMware vSphere vCenter中创建虚拟机时,可以添加一种叫RDM的磁盘。 RDM - Raw Device Mapping,原始设备映射,那么,RDM磁盘是不是就可以称作为“原始设备映射磁盘”呢?这也是一种可以热...

大别阿郎
今天
10
0
【AngularJS学习笔记】02 小杂烩及学习总结

本文转载于:专业的前端网站☞【AngularJS学习笔记】02 小杂烩及学习总结 表格示例 <div ng-app="myApp" ng-controller="customersCtrl"> <table> <tr ng-repeat="x in names | orderBy ......

前端老手
昨天
14
0
Linux 内核的五大创新

在科技行业,创新这个词几乎和革命一样到处泛滥,所以很难将那些夸张的东西与真正令人振奋的东西区分开来。Linux内核被称为创新,但它又被称为现代计算中最大的奇迹,一个微观世界中的庞然大...

阮鹏
昨天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部