`1.建立磁盘 mkdir redis-cluster 2.复制redis文件 cp redis/bin redis-cluster/redis01 -r 3.进入redis01文件目录 cd redis-cluster/redis01 4.删除dump.rdb 和 appendonly.aof文件 rm -f dump.rdb 5 编辑redis.conf 文件 vim redis.conf 改 port 端口为:7001 打开cluster-enabled yes 6 复制多份redis01文件 并改redis.conf文件的port端口为 7002 。。。。 7 启动redis多个服务器 ./redis-all.sh 8 查看redis启动状况 ps aux|grep redis 9. 进入redis源码目录,复制到redis集群中去 /root/redis-3.0.0/src cp redis-trib.rb /usr/local/redis-cluster/ 10.安装rb 运行环境 10.一、使用ruby脚本搭建集群。须要ruby的运行环境。 安装ruby yum install ruby yum install rubygems 10.2 按alt+p 打开文件传输列表 把redis-3.0.0.gem 传入服务器 cp redis-3.0.0.gem /usr/local/redis-cluster/ cd /usr/local/redis-cluster/ 10.3 安装 redis-3.0.0.gem gem install redis-3.0.0.gem 10.4 启动reids-trib.rb 文件 ./redis-trib.rb create --replicas 1 192.168.36.30:7001 192.168.36.30:7002 192.168.36.30:7003 192.168.36.30:7004 192.168.36.30:7005 192.168.36.30:7006 10.5 而后点击yes 11. 测试redis集群的使用 redis01/redis-cli -p 7004 -c set a 123 get a
redis-cluster投票:容错java
架构细节:node
(1)全部的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.redis
(2)节点的fail是经过集群中超过半数的节点检测失效时才生效.算法
(3)客户端与redis节点直连,不须要中间proxy层.客户端不须要链接集群全部节点,链接集群中任何一个可用节点便可vim
(4)redis-cluster把全部的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->valueruby
Redis 集群中内置了 16384 个哈希槽,当须要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,而后把结果对 16384 求余数,这样每一个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大体均等的将哈希槽映射到不一样的节点服务器
5.2. Redis集群的搭建 Redis集群中至少应该有三个节点。要保证集群的高可用,须要每一个节点有一个备份机。 Redis集群至少须要6台服务器。 搭建伪分布式。可使用一台虚拟机运行6个redis实例。须要修改redis的端口号7001-7006 5.2.1. 集群搭建环境 一、使用ruby脚本搭建集群。须要ruby的运行环境。 安装ruby架构
yum install ruby yum install rubygems
二、安装ruby脚本运行使用的包。app
[root@localhost ~]# gem install redis-3.0.0.gem Successfully installed redis-3.0.0 1 gem installed Installing ri documentation for redis-3.0.0... Installing RDoc documentation for redis-3.0.0... [root@localhost ~]# [root@localhost ~]# cd redis-3.0.0/src [root@localhost src]# ll *.rb -rwxrwxr-x. 1 root root 48141 Apr 1 2015 redis-trib.rb
5.2.2. 搭建步骤 须要6台redis服务器。搭建伪分布式。 须要6个redis实例。 须要运行在不一样的端口7001-7006分布式
第一步:建立6个redis实例,每一个实例运行在不一样的端口。须要修改redis.conf配置文件。配置文件中还须要把cluster-enabled yes前的注释去掉。
第二步:启动每一个redis实例。 第三步:使用ruby脚本搭建集群。
./redis-trib.rb create --replicas 1 192.168.25.153:7001 192.168.25.153:7002 192.168.25.153:7003 192.168.25.153:7004 192.168.25.153:7005 192.168.25.153:7006
建立关闭集群的脚本:
[root@localhost redis-cluster]# vim shutdow-all.sh redis01/redis-cli -p 7001 shutdown redis01/redis-cli -p 7002 shutdown redis01/redis-cli -p 7003 shutdown redis01/redis-cli -p 7004 shutdown redis01/redis-cli -p 7005 shutdown redis01/redis-cli -p 7006 shutdown [root@localhost redis-cluster]# chmod u+x shutdow-all.sh
[root@localhost redis-cluster]# ./redis-trib.rb create --replicas 1 192.168.25.153:7001 192.168.25.153:7002 192.168.25.153:7003 192.168.25.153:7004 192.168.25.153:7005 192.168.25.153:7006
package com.shi.page; import java.util.HashSet; import java.util.Set; import org.junit.Test; import redis.clients.jedis.HostAndPort; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisCluster; import redis.clients.jedis.JedisPool; public class JedisTest { //jedis链接redis的基本使用 @Test public void testJedis()throws Exception{ //1建立一个jedis对象,参数 host,port Jedis jedis=new Jedis("192.168.36.30",6379); //2直接使用jedis操做reids,全部jedis操做都对应一个方法 jedis.set("abc", "zhangsan"); String abc=jedis.get("abc"); System.out.println("abc="+abc); //3 关闭链接 jedis.close(); } //使用JedisPool链接池来链接redis @Test public void testJedisPool()throws Exception{ //1 建立一个链接池对象,俩个参数host,port JedisPool jedisPool=new JedisPool("192.168.36.30",6379); //2 从链接池得到一个链接,就是一个jedis对象 Jedis jedis=jedisPool.getResource(); //3 使用jedis操做redis jedis.set("shi", "shiye"); String shi=jedis.get("shi"); System.out.println("shi="+shi); //4 关闭链接,每次使用完毕以后关闭链接,链接迟回收资源 jedis.close(); //5 关闭链接池 jedisPool.close(); } //使用jedisCluster链接redis集群 @Test public void testJedisCluster()throws Exception{ /*1 建立一个jedisCluster对象,有一个参数nodes是一个set类型, set中包含若干个hostAndPort对像*/ Set<HostAndPort> nodes=new HashSet<HostAndPort>(); nodes.add(new HostAndPort("192.168.36.30", 7001)); nodes.add(new HostAndPort("192.168.36.30", 7002)); nodes.add(new HostAndPort("192.168.36.30", 7003)); nodes.add(new HostAndPort("192.168.36.30", 7004)); nodes.add(new HostAndPort("192.168.36.30", 7005)); nodes.add(new HostAndPort("192.168.36.30", 7006)); JedisCluster jedisCluster=new JedisCluster(nodes); //2 直接使用jedisCluster对象操做reids jedisCluster.set("test", "123"); String test=jedisCluster.get("test"); System.out.println("test="+test); //3 关闭jedisCluster对像 jedisCluster.close(); } }