博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
redis(9)、redis集群之redis Cluster使用
阅读量:6372 次
发布时间:2019-06-23

本文共 2290 字,大约阅读时间需要 7 分钟。

hot3.png

前提:redis集群分片,目前redis有两类方案

  • 哈希槽(hash slot),代表方案:redis cluster
  • 一致性哈希,代表方案:twemproxy、codis

  本篇是针对redis cluster配置实现,原理会在另一个文章在解析。By haoran-10.iteye.com

 

 

先理解几个关键词:

节点:单个redis运行时,是孤立的,一旦出现故障,最多主从复制时,数据不会丢失,但是造成了redis不可用。redis单机,一个节点。

集群:很多节点通过某种方案联系起来,一起提供redis服务,称为redis集群。单个节点出现故障时,数据会转移(不保证强一致性)到安全的备份节点,提供高可用的redis服务,缺点是不可以使用不支持处理多个              键的命令

分片:redis数据很多时,单个redis放不下,此时redis集群通过分片技术,把数据平均分配到不同的节点。

哈希槽:redis集群通过哈希槽的方式,把数据分配到不同的节点。Redis集群有16384个哈希槽,我们只是使用键的CRC16编码对16384取模来计算一个指定键所属的哈希槽。 

 

 

1、redis节点关键配置

daemonize yespidfile /mytest/redis_dev/9001/redis.pidport 9001appendonly yesappendfsync everyseccluster-enabled yescluster-config-file nodes.conf  cluster-node-timeout 15000

 

 首次配置,强烈建议使用6个节点,这样更能直观的理解redis集群的配置以及优点所在。

 复制成6分,9001,9002,9003,9004,9005,9006(注意改成不同的端口,不同的pid文件,nodes.conf不要理会,redis会自动创建,自动管理)

2、启动各个节点

 

3、使用redis-trib工具 创建集群 

启动成功之后,使用redis自带的工具创建集群

注,这里要安装ruby等工具

(1)、安装ruby

(2)、安装ruby gem

(3)、安装gem redis

安装过程比较简单,略过。

 

 输入"yes",继续

 

哈希槽已经分配到9001,9002,9003节点中。 

4、使用redis-cli测试

 

注意:这里是使用src/redis-cli -c 命令,才能启动客户端集群操作模式

获取操作测试:

 

从数据中可以看到,客户端是从9002端口进入,当输入set age 27 时,是自动转存到9001节点上,

当输入get age 时,也是从9001节点获取数据

 

5、容错处理测试

手动把9001节点给kill 掉

 
 
 

此时继续操作redis集群

 

自动从原先的9001的从节点9004节点(9001为主节点,9004是9001的从节点)中获取数据,说明9004自动转为主节点

 

 

6、增加节点测试

创建9007节点,启动9007

 

并且把9007节点设为9004的从节点

src/redis-trib.rb add-node --slave 127.0.0.1:9007 127.0.0.1:9004

 

从输出结果中,可以看到9007做为9004的一个复制节点,也就是从节点。

 

 

7、增加一个主节点,重新分片集群

redis-trib.rb reshard 127.0.0.1:9008

 主要是把哈希槽重新分配 

 

8、java 客户端 

貌似只有使用sharedjedis 才可以,spring-data-redis还不支持redis新的集群特性,不知道是不是姿势不对。

package wang.conge.init;import java.util.HashSet;import java.util.Set;import redis.clients.jedis.HostAndPort;import redis.clients.jedis.JedisCluster;public class SharedRedisClient {	public static void main(String[] args) {		Set
jedisClusterNodes = new HashSet
(); jedisClusterNodes.add(new HostAndPort("127.0.0.1", 9001)); JedisCluster jedis = new JedisCluster(jedisClusterNodes); jedis.set("nginx", "yes"); jedis.set("tomcat", "yes"); jedis.set("keepalived", "yes"); jedis.set("vip", "yes"); jedis.set("redis", "yes"); jedis.set("mysql", "yes"); String key = jedis.get("redis"); System.out.println(key); }}

 

9、小结

redis官方提供的集群方案配置太繁琐了,不过性能上也比较强悍,公司还没用到生产,拭目以待吧。

 

转载于:https://my.oschina.net/haoran100/blog/712525

你可能感兴趣的文章
腾讯最大规模裁撤中层干部,让贤年轻人
查看>>
如何:强化 TCP/IP 堆栈安全
查看>>
Spring3 MVC中使用Swagger生成API文档
查看>>
FastCGI PHP on Windows Server 2003
查看>>
LimeSDR Getting Started Quickly | LimeSDR上手指南
查看>>
JSP标签JSTL的使用(1)--表达式操作
查看>>
SAP顾问的人脉比技术更为重要
查看>>
FI/CO PA考试试卷
查看>>
汽车介质应用非常严苛?没关系,新技术带来的高精度传感器十分适应!
查看>>
天合光能 - 用计算捕捉“光的能量”
查看>>
使用sysbench压力测试MySQL(一)(r11笔记第3天)
查看>>
css知多少(11)——position
查看>>
【Spring】定时任务详解实例-@Scheduled
查看>>
先有的资源,能看的速度看,不能看的,抽时间看。说不定那天就真的打不开了(转)...
查看>>
哪些领域适合开发微信小程序
查看>>
谁说数据库防火墙风险大?可能你还不知道应用关联防护
查看>>
ASP.NET Core应用针对静态文件请求的处理[2]: 条件请求与区间请求
查看>>
怎样做一个企业?尤其是在这个互联网时代
查看>>
DVNA:Node.js打造的开源攻防平台
查看>>
17个案例带你3分钟搞定Linux正则表达式
查看>>