Redis 集群搭建

转载:http://blog.csdn.net/jlh912008548/article/details/51226380

1.Redis 安装

在安装Redis 集群前。应该安装Redis.Redis 的详细安装,请浏览 http://blog.csdn.net/jlh912008548/article/details/51225057

2.Redis 集群介绍

2.1 redis-cluster架构图


[plain]  view plain  copy
  1. edis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value  
  2. Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点  


[plain]  view plain  copy
  1. Key:a  
  2. 计算a的hash值,例如值为100,100这个槽在server1上,所以a应该放到server1.  
  3.   
  4. Key:hello  
  5. Hash值:10032,此槽在server2上。Hell可以应该存在server2.  

2.2  redis-cluster投票:容错


[plain]  view plain  copy
  1. (1)领着投票过程是集群中所有master参与,如果半数以上master节点与master节点通信超过(cluster-node-timeout),认为当前master节点挂掉.  
  2. (2):什么时候整个集群不可用(cluster_state:fail)?   
  3.     a:如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成集群的slot映射[0-16383]不完成时进入fail状态. ps : redis-3.0.0.rc1加入cluster-require-full-coverage参数,默认关闭,打开集群兼容部分失败.  
  4.     b:如果集群超过半数以上master挂掉,无论是否有slave集群进入fail状态.  
  5.   ps:当集群不可用时,所有对集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)错误  

3 Redis集群搭建

3.1 我的集群结构

[plain]  view plain  copy
  1. <span style="font-size:14px;font-weight: normal;">集群中有三个节点的集群,每个节点有一主一备。需要6台虚拟机。  
  2. 搭建一个伪分布式的集群,使用6个redis实例来模拟。  
  3. 所有redis  都安装在一个虚拟机里,即共用一个Ip,端口不同。(端口分别为6379,7001,7002,7003,7004,7005,7006)</span>  

3.2搭建集群需要的环境

搭建集群需要安装Ruby 和Redis的接口
如果系统没有Ruby,那么 在搭建集群的时候会报如图所示的错误
[plain]  view plain  copy
  1. /usr/bin/env: ruby: No such file or directory  
如果系统没有Redis接口,那么在搭建的时候会报这样的错误
[plain]  view plain  copy
  1. /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- redis (LoadError)  
  2. from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'  
  3. from ./redis-trib.rb:25  

3.2.1Ruby 安装

yum install ruby

yum install rubygems

使用gcc编译安装请见: http://www.showerlee.com/archives/1123

3.2.2 Redis接口安装

方法一: 使用命令 gem install redis 。使用gem直接安装可能会出现网络不通,无法安装的情况,故推荐方法二。

方法二:离线安装

下载 redis-3.2.1.gem  这里给一个CSDN 里的资源地址,免积分的:http://download.csdn.net/detail/lihcc/8722699

将redis-3.2.1.gem 包拷贝至 /usr/local 目录下

使用gem命令安装: gem install redis-3.0.0.gem 

3.2 Redis集群搭建

3.2.1 创建Redis实例

在Redis 安装目录下拷贝如下文件到一个新的文件夹(我命名为redis01,redis02....以此类推)


修改每个redis下的redis.conf  将 cluster-enabled 后的值设为 yes ,如图所示


在Redis 安装目录下拷贝ruby脚本(redis-trib.rb)拷贝到 redis01 的同级目录下


创建集群

[plain]  view plain  copy
  1. ./redis-trib.rb create --replicas 1 192.168.25.153:7001 192.168.25.153:7002 192.168.25.153:7003   
[plain]  view plain  copy
  1. 192.168.25.153:7004 192.168.25.153:7005  192.168.25.153:7006  
192.168.25.103 为虚拟机Ip.
如果没安装Rub 会报错 
[plain]  view plain  copy
  1. /usr/bin/env: ruby: No such file or directory  

解决方式见上文

创建Redis集群启动与停止文件

vim start.sh

输入以下内容

[plain]  view plain  copy
  1. cd redis01  
  2. ./redis-server redis.conf  
  3. cd ../redis02  
  4. ./redis-server redis.conf  
  5. cd ../redis03  
  6. ./redis-server redis.conf  
  7. cd ../redis04  
  8. ./redis-server redis.conf  
  9. cd ../redis05  
  10. ./redis-server redis.conf  
  11. cd ../redis06  
  12. ./redis-server redis.conf  
  13. cd ..  
vim shutdown.sh

输入以下内容

[plain]  view plain  copy
  1. redis01/redis-cli -p 7001 shutdown  
  2. redis02/redis-cli -p 7002 shutdown  
  3. redis03/redis-cli -p 7003 shutdown  
  4. redis04/redis-cli -p 7004 shutdown  
  5. redis05/redis-cli -p 7005 shutdown  
  6. redis06/redis-cli -p 7006 shutdown  
启动  ./start.sh

查看是否启动  命令 ps aux|grep redis 发现有

root      64055  0.0  0.9 137436  9464 ?        Ssl  12:44   0:08 ./redis-server *:7001 [cluster]

....

停止 ./shutdown.sh

查看是否停止 命令 ps aux|grep redis 发现没有启动后的内容,则说明停止成功



4 连接Redis

4.1图形化界面客户端   --  RedisDesktopManager

缺点:不能连接集群,智能连接一个单独的

4.2 redis-cli

使用Redis 自带的 redis-cli 连接

连接一个单独的Redis   :cd 到一个Redis 目录下 使用命令 ./redis-cli -h 192.168.204.131 -p 6379

连接集群则在其后加入一个 -c 即 ./redis-cli -h 192.168.204.131 -p 6379 -c


4.3 Jedis 连接(Java连接)

新建java项目 , 导入jedis.jar 包 下载地址:http://download.csdn.net/detail/teamlet/8914387

然后就是编写代码。这里我写一个小demo 给做个参考

[java]  view plain  copy
  1. import java.util.HashSet;  
  2. import java.util.Set;  
  3.   
  4. import org.junit.Test;  
  5.   
  6. import redis.clients.jedis.HostAndPort;  
  7. import redis.clients.jedis.Jedis;  
  8. import redis.clients.jedis.JedisCluster;  
  9. import redis.clients.jedis.JedisPool;  
  10.   
  11. public class JedisTest {  
  12.   
  13.     @Test  
  14.     public void testJedisSingle() {  
  15.         //创建jedis对象  
  16.         Jedis jedis = new Jedis("192.168.204.131"6379);  
  17.         //调用jedis对象的方法,方法名称和redis 的命令一致  
  18.         jedis.set("key2""jedis test2");  
  19.         String string = jedis.get("key1");  
  20.         System.out.println(string);  
  21.         //关闭jedis  
  22.         jedis.close();  
  23.     }  
  24.       
  25.       
  26.     /** 
  27.      *使用jedis连接池  
  28.      */  
  29.     @Test  
  30.     public void testJedisPool(){  
  31.         JedisPool jedisPool = new JedisPool("192.168.204.131"6379);  
  32.         //获得jedis 连接对象  
  33.         Jedis jedis = jedisPool.getResource();  
  34.         System.out.println(jedis.get("key1"));  
  35.         jedis.close();  
  36.     }  
  37.     /** 
  38.      * 集群连接测试 
  39.      */  
  40.     @Test  
  41.     public void testJedisCluster(){  
  42.         Set<HostAndPort> nodes = new HashSet<>();  
  43.         nodes.add(new HostAndPort("192.168.204.131"7001));  
  44.         nodes.add(new HostAndPort("192.168.204.131"7002));  
  45.         nodes.add(new HostAndPort("192.168.204.131"7003));  
  46.         nodes.add(new HostAndPort("192.168.204.131"7004));  
  47.         nodes.add(new HostAndPort("192.168.204.131"7005));  
  48.         nodes.add(new HostAndPort("192.168.204.131"7006));  
  49.         JedisCluster cluster = new JedisCluster(nodes );  
  50.         cluster.set("key1""1000");  
  51.         System.out.println(cluster.get("key1"));  
  52.     }  
  53. }  

至此,Redis 集群安装测试完结,感谢阅读。



以上为个人在安装配置Redis 时的经验,如有重复,望见谅。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值