NoSQL之Redis(四)--- RedisCluster概念以及搭建
NoSQL之Redis(四)--- RedisCluster概念以及搭建
之前已经在博文中介绍了redis以及redis的简单实用,但是在实际的项目中用单机版redis还是很少的基本上都是实用redis集群。 RedisCluster概念
RedisCluster架构架构细节: (1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽. (2)节点的fail是通过集群中超过半数的节点检测失效时才生效. (3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可 (4)Redis Cluster是Redis的集群实现,内置数据自动分片机制,集群内部将所有的key映射到16384个Slot中,集群中的每个Redis Instance负责其中的一部分的Slot的读写。集群客户端连接集群中任一Redis Instance即可发送命令,当Redis Instance收到自己不负责的Slot的请求时,会将负责请求Key所在Slot的Redis Instance地址返回给客户端,客户端收到后自动将原请求重新发往这个地址,对外部透明。一个Key到底属于哪个Slot由crc16(key) % 16384 决定。 例如下图 Key:a 计算a的hash值,例如值为100,100这个slot在server1上,所以a应该放到server1. Key:hello Hash值:10032,此slot在server3上。Hell可以应该存在server3. redis-cluster投票:容错
(1)领着投票过程是集群中所有master参与,如果半数以上节点与节点通信超过(cluster-node-timeout),51)">认为当前节点挂掉. (2):什么时候整个集群不可用(cluster_state:fail)? a:如果集群任意挂掉且当前没有slave.集群进入fail状态也可以理解成集群的slot映射[0-16383]不完成时进入. ps : redis-3.0.0.rc1加入cluster-require-full-coverage参数默认关闭打开集群兼容部分失败 b:如果集群超过半数以上挂掉,无论是否有slave. ps:当集群不可用时,所有对集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)错误 RedisCluster安装安装redis版本说明 本教程使用redis3.0版本。3.0版本主要增加了redis集群功能。同时由于笔者实用的是一台虚拟机所以只是伪集群模式,但是和真集群的安装方法本质上还是类似的。 安装的前提条件: 需要安装gcc:yum install gcc-c++ 下载redis的源码包,把源码包上传到linux服务器 解压源码包 tar -zxvf redis-3.0.0.tar.gz Make Make install make installPREFIX=/usr/local/redis-cluster/redis01 ps:PREFIX必须大写表示redis的安装路径,执行上面几步之后单机版的redis已经安装成功。 集群环境安装搭建集群需要使用到官方提供的ruby脚本,需要安装ruby的环境。 安装ruby yum install ruby yum install rubygems redis集群管理工具redis-trib.rb输入如下依次命令可以找到 cd redis-3.0.0/src ll*.rb 脚本需要的ruby包: 下载地址:http://download.csdn.net/detail/senior_lee/9502524 上传到Linux,并安装ruby包 geminstall redis-3.0.0.gem 集群搭建
第一步:创建6另外5个redis实例,在/usr/local/redis-cluster/文件夹下,复制redis01即可,分别命名为redis02~redis06。 注意:需要分别删除每个redis安装目录里面的dum.rdb文件。 第二步:修改redis配置文件 1将port分别改成7001~7006 2打开cluster-enable前面的注释 3把创建集群的ruby脚本复制到redis-cluster目录下。 4启动6个redis实例
5创建集群 ./redis-trib.rb create --replicas 1 192.168.21.225:7001192.168.21.225:7002 192.168.21.225:7003 192.168.21.225:7004 192.168.21.225:7005192.168.21.225:7006 ps:创建了三个节点主节点,三个从节点。其中—replicas1 表示每个主节点下面有1个从节点,从节点可以是任意多个。 窗口输出结果入下: >>> Creating cluster Connecting to node 192.168.21.225:7001: OK Connecting to node 192.168.21.225:7002: OK Connecting to node 192.168.21.225:7003: OK Connecting to node 192.168.21.225:7004: OK Connecting to node 192.168.21.225:7005: OK Connecting to node 192.168.21.225:7006: OK >>> Performing hash slotsallocation on 6 nodes... Using 3 masters: 192.168.21.225:7001 192.168.21.225:7002 192.168.21.225:7003 Adding replica 192.168.21.225:7004 to 192.168.21.225:7001 Adding replica 192.168.21.225:7005 to 192.168.21.225:7002 Adding replica 192.168.21.225:7006 to 192.168.21.225:7003 M: 5a8523db7e12ca600dc82901ced06741b3010076192.168.21.225:7001 slots:0-5460 (5461 slots) master M: bf6f0929044db485dea9b565bb51e0c917d20a53192.168.21.225:7002 slots:5461-10922 (5462 slots) master M: c5e334dc4a53f655cb98fa3c3bdef8a808a693ca192.168.21.225:7003 slots:10923-16383 (5461 slots) master S: 2a61b87b49e5b1c84092918fa2467dd70fec115f192.168.21.225:7004 replicates 5a8523db7e12ca600dc82901ced06741b3010076 S: 14848b8c813766387cfd77229bd2d1ffd6ac8d65192.168.21.225:7005 replicates bf6f0929044db485dea9b565bb51e0c917d20a53 S: 3192cbe437fe67bbde9062f59d5a77dabcd0d632192.168.21.225:7006 replicates c5e334dc4a53f655cb98fa3c3bdef8a808a693ca Can I set the above configuration? (type'yes' to accept): yes >>> Nodes configuration updated >>> Assign a different configepoch to each node >>> Sending CLUSTER MEET messagesto join the cluster Waiting for the cluster to join..... >>> Performing Cluster Check(using node 192.168.21.225:7001) M: 5a8523db7e12ca600dc82901ced06741b3010076192.168.21.225:7001 slots:0-5460 (5461 slots) master M: bf6f0929044db485dea9b565bb51e0c917d20a53192.168.21.225:7002 slots:5461-10922 (5462 slots) master M: c5e334dc4a53f655cb98fa3c3bdef8a808a693ca192.168.21.225:7003 slots:10923-16383 (5461 slots) master M: 2a61b87b49e5b1c84092918fa2467dd70fec115f192.168.21.225:7004 slots: (0 slots) master replicates 5a8523db7e12ca600dc82901ced06741b3010076 M: 14848b8c813766387cfd77229bd2d1ffd6ac8d65192.168.21.225:7005 slots: (0 slots) master replicates bf6f0929044db485dea9b565bb51e0c917d20a53 M: 3192cbe437fe67bbde9062f59d5a77dabcd0d632192.168.21.225:7006 slots: (0 slots) master replicates c5e334dc4a53f655cb98fa3c3bdef8a808a693ca [OK] All nodes agree about slotsconfiguration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. 测试集群
依次输入如下命令 cd/usr/local/redis-cluster/ redis01/bin/redis-cli-h 192.168.21.225 -p 7002 –c ps:-c表示连接集群 集群就这样愉快的搭建完了,接下的文章里面会依次介绍如何使用jedis操作单机和集群版redis,jedis如何同spring集成以及如何编写jedis的工具类。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |