Redis 集群搭建与连接

一时失言乱红尘 2022-08-21 07:51 279阅读 0赞

1.Redis 安装

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

2.Redis 集群介绍

2.1 redis-cluster架构图

Center

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

Center 1

  1. Key:a
  2. 计算ahash值,例如值为100100这个槽在server1上,所以a应该放到server1.
  3. Key:hello
  4. Hash值:10032,此槽在server2上。Hell可以应该存在server2.

2.2 redis-cluster投票:容错

Center 2

  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 我的集群结构

  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,那么 在搭建集群的时候会报如图所示的错误

  1. /usr/bin/env: ruby: No such file or directory

如果系统没有Redis接口,那么在搭建的时候会报这样的错误

  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….以此类推)

Center 3

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

Center 4

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

Center 5

创建集群

  1. ./redis-trib.rb create --replicas 1 192.168.25.153:7001 192.168.25.153:7002 192.168.25.153:7003
  2. 192.168.25.153:7004 192.168.25.153:7005 192.168.25.153:7006

192.168.25.103 为虚拟机Ip.
如果没安装Rub 会报错

  1. /usr/bin/env: ruby: No such file or directory

解决方式见上文

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

vim start.sh

输入以下内容

  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

输入以下内容

  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 发现没有启动后的内容,则说明停止成功

Center 6

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 给做个参考

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

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

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

发表评论

表情:
评论列表 (有 0 条评论,279人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Redis--

    集群概述 redis是一个开源的key value存储系统,受到了广大互联网公司的青睐。redis3.0版本之前只支持单例模式,在3.0版本及以后才支持集群,我这里