现在位置: 首页 > 博客文章 > 电脑相关 > IT开发 > 大数据 > Redis > 正文
大数据学习初级入门教程(六) —— Redis 3.x 伪分布式集群的安装、配置、启动和测试
2019年12月15日 13:46:24 Redis ⁄ 共 8286字 暂无评论 ⁄ 被围观 3,434次

在上一篇文章《大数据学习初级入门教程(二) —— Redis 3.x 单节点的安装、启动和测试》中,介绍了如何在工作需要时,临时安装一个单节点的 Redis 库,便于进行测试。

这一篇主要说说如何搭建 Redis 伪分布式集群,就是说机器不够的情况下,模拟搭建 Redis 集群。

集群搭建条件:

Redis 集群至少需要 3 个节点;

每个集群节点都需要有从节点,即备份节点,保证集群的高可用性,所以还需要 3 个备份节点;

服务器需要安装 ruby 环境。

集群搭建环境:

服务器:

CentOS release 6.9 (Final) x64

Java 环境:

java version "1.8.0_172"
Java(TM) SE Runtime Environment (build 1.8.0_172-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.172-b11, mixed mode)

Redis 版本:

redis-3.2.9.tar.gz

Ruby 版本:

ruby 1.8.7 (2013-06-27 patchlevel 374) [x86_64-linux]

Gem 版本:

1.3.7

Redis 和 Ruby 的接口包:

redis-3.2.1.gem

开始伪分布式集群部署:

由于在上篇文章中,已经安装了 Redis 单节点,所以这里不再需要上传安装包、解压、编译、安装等。

第一步,创建存放集群环境的目录文件夹。

第二步,复制已经安装的 redis。

把 redis 目录下 的 bin 目录下的所有文件复制到 redis-cluster/redis01 目录下,redis01 会自动创建。

命令:cp -R redis/bin/ redis-cluster/redis01

第三步,删除原 redis 目录下的数据文件 dump.rdb。

命令:rm -f redis-cluster/redis01/dump.rdb 

第四步,修改 redis.conf 配置文件。

命令:vi redis-cluster/redis01/redis.conf 

修改两个地方,首先修改端口号,原来默认为 6379,现修改为 7000。

另外需要打开集群创建模式,原来默认是注释掉的,直接去掉注释即可。

修改 pid 进程文件名,默认为 redis_6379.pid,按照端口号修改为 redis_7000.pid。

修改 log 文件名,默认为空,按照端口号修改为 redis_7000.log,注意如果没有对应的文件夹,需要提前创建。

第五步,复制出其它 5 个模拟节点。

将 redis-cluster/redis01 文件夹复制 5 份,分别为 redis02-redis06,都在目录 redis-cluster 下,模拟 Redis 集群的 6 个节点。并且需要将其余 5 个文件夹下的 redis.conf 里面的端口号分别修改为7001-7005。

第六步,分别启动 6 个节点。

如果启动麻烦,可以写个 shell 脚本。

命令:vi redis-cluster/startAllRedis.sh 

#! /bin/bash

for((i=0;i<6;i++));do
  j=$[$i+1];
  cd redis0$j;
  ./redis-server redis.conf
  cd ..
done
echo "所有 redis [cluster] 服务均已启动,进程信息如下:"
ps -ef |grep redis

exit 0

保存后,需要赋予脚本执行权限。

命令:chmod +x redis-cluster/startAllRedis.sh 

运行脚本,启动 redis 节点。

命令:cd redis-cluster/

sh startAllRedis.sh 

第七步,安装 ruby 运行环境。

要搭建集群的话,需要使用一个工具(脚本文件 redis-trib.rb),这个工具在 redis 解压文件的源代码里。因为这个工具是一个 ruby 脚本文件,所以这个工具的运行需要 ruby 的运行环境,所以需要安装ruby。

命令:yum install ruby

第八步,拷贝集群搭建的脚本文件。

拷贝第七步中提到的脚本文件,直接放到 redis-cluster 目录下。

命令:cp ~/redis/redis-3.2.9/src/redis-trib.rb redis-cluster/

第九步,执行搭建集群脚本,搭建集群。

命令:cd redis-cluster/

./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005

有错误,错误信息如下:

./redis-trib.rb:24:in `require': no such file to load -- rubygems (LoadError)
        from ./redis-trib.rb:24

是因为缺少 rubygems 组件导致的,使用 yum 安装。

命令:yum install rubygems

再次执行创建集群的命令。

又有出现报错,信息如下:

/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- redis (LoadError)
        from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
        from ./redis-trib.rb:25

提示不能加载 redis,是因为缺少 redis 和 ruby 的接口,使用 gem 安装。

命令:gem install redis

如果该命令下载不了接口包,可以手动下载并上传服务器,安装即可。

命令:gem install redis-3.2.1.gem

再次执行创建集群的命令即可创建集群成功,如果仍有错误,可以参考文章最后的常见错误解答。

  1. [root@node100 redis-cluster]# ./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005  
  2. >>> Creating cluster  
  3. [ERR] Sorry, can't connect to node 127.0.0.1:7000  
  4. [root@node100 redis-cluster]# cd /  
  5. [root@node100 /]# find -name client.rb  
  6. ./usr/lib/ruby/1.8/xmlrpc/client.rb  
  7. ./usr/lib/ruby/gems/1.8/gems/redis-3.2.1/lib/redis/client.rb  
  8. [root@node100 /]# vi /usr/lib/ruby/gems/1.8/gems/redis-3.2.1/lib/redis/client.rb   
  9. require "redis/errors"  
  10. require "socket"  
  11. require "cgi"  
  12.   
  13. class Redis  
  14.   class Client  
  15.   
  16.     DEFAULTS = {  
  17.       :url => lambda { ENV["REDIS_URL"] },  
  18.       :scheme => "redis",  
  19.       :host => "127.0.0.1",  
  20.       :port => 6379,  
  21.       :path => nil,  
  22.       :timeout => 5.0,  
  23.       :connect_timeout => 5.0,  
  24.       :password => "123456",  
  25.       :db => 0,  
  26.       :driver => nil,  
  27.       :id => nil,  
  28.       :tcp_keepalive => 0,  
  29. <ib/ruby/gems/1.8/gems/redis-3.2.1/lib/redis/client.rb" 574L, 14334C written  
  30. [root@node100 /]# ./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005-bash: ./redis-trib.rb: No such file or directory  
  31. [root@node100 /]# cd /usr/redis-cluster/  
  32. [root@node100 redis-cluster]# ./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005  
  33. >>> Creating cluster  
  34. >>> Performing hash slots allocation on 6 nodes...  
  35. Using 3 masters:  
  36. 127.0.0.1:7000  
  37. 127.0.0.1:7001  
  38. 127.0.0.1:7002  
  39. Adding replica 127.0.0.1:7003 to 127.0.0.1:7000  
  40. Adding replica 127.0.0.1:7004 to 127.0.0.1:7001  
  41. Adding replica 127.0.0.1:7005 to 127.0.0.1:7002  
  42. M: f23b3418e4a454c8336c662a5d6022130f38ff30 127.0.0.1:7000  
  43.    slots:0-5460 (5461 slots) master  
  44. M: 100079aaff82a2eb6bb3967c8649deea63aceb08 127.0.0.1:7001  
  45.    slots:5461-10922 (5462 slots) master  
  46. M: d600b4a56d1e92261d163aac266754d14a44a703 127.0.0.1:7002  
  47.    slots:10923-16383 (5461 slots) master  
  48. S: 0a2306e861fb268b3ce5600323b76b992d8769f5 127.0.0.1:7003  
  49.    replicates f23b3418e4a454c8336c662a5d6022130f38ff30  
  50. S: e35e98e6c061fc80c85ba02f9d1de6dccba91f7f 127.0.0.1:7004  
  51.    replicates 100079aaff82a2eb6bb3967c8649deea63aceb08  
  52. S: 34210a92160dc1994f02dc50a656ed9f52515329 127.0.0.1:7005  
  53.    replicates d600b4a56d1e92261d163aac266754d14a44a703  
  54. Can I set the above configuration? (type 'yes' to accept): yes  
  55. >>> Nodes configuration updated  
  56. >>> Assign a different config epoch to each node  
  57. >>> Sending CLUSTER MEET messages to join the cluster  
  58. Waiting for the cluster to join.....  
  59. >>> Performing Cluster Check (using node 127.0.0.1:7000)  
  60. M: f23b3418e4a454c8336c662a5d6022130f38ff30 127.0.0.1:7000  
  61.    slots:0-5460 (5461 slots) master  
  62.    1 additional replica(s)  
  63. S: e35e98e6c061fc80c85ba02f9d1de6dccba91f7f 127.0.0.1:7004  
  64.    slots: (0 slots) slave  
  65.    replicates 100079aaff82a2eb6bb3967c8649deea63aceb08  
  66. S: 0a2306e861fb268b3ce5600323b76b992d8769f5 127.0.0.1:7003  
  67.    slots: (0 slots) slave  
  68.    replicates f23b3418e4a454c8336c662a5d6022130f38ff30  
  69. S: 34210a92160dc1994f02dc50a656ed9f52515329 127.0.0.1:7005  
  70.    slots: (0 slots) slave  
  71.    replicates d600b4a56d1e92261d163aac266754d14a44a703  
  72. M: 100079aaff82a2eb6bb3967c8649deea63aceb08 127.0.0.1:7001  
  73.    slots:5461-10922 (5462 slots) master  
  74.    1 additional replica(s)  
  75. M: d600b4a56d1e92261d163aac266754d14a44a703 127.0.0.1:7002  
  76.    slots:10923-16383 (5461 slots) master  
  77.    1 additional replica(s)  
  78. [OK] All nodes agree about slots configuration.  
  79. >>> Check for open slots...  
  80. >>> Check slots coverage...  
  81. [OK] All 16384 slots covered.  
  82. [root@node100 redis-cluster]#   

可以看到 7000、7001、7002 为 Master,7003、7004、7005 为 Slave。信息同时显示了每个节点所分配的 slots(哈希槽),3 个主节点分别映射了 0-5460、5461-10922、10923-16383 solts。

第十步,使用集群。

要使用搭建的集群,连接集群中任意一个节点即可,比如这里连接 7002。

命令:./redis-cli -p 7002 -c

  1. 127.0.0.1:7002> cluster info  
  2. cluster_state:ok  
  3. cluster_slots_assigned:16384  
  4. cluster_slots_ok:16384  
  5. cluster_slots_pfail:0  
  6. cluster_slots_fail:0  
  7. cluster_known_nodes:6  
  8. cluster_size:3  
  9. cluster_current_epoch:6  
  10. cluster_my_epoch:3  
  11. cluster_stats_messages_sent:2920  
  12. cluster_stats_messages_received:2920  
  13. 127.0.0.1:7002> cluster nodes  
  14. e35e98e6c061fc80c85ba02f9d1de6dccba91f7f 127.0.0.1:7004 slave 100079aaff82a2eb6bb3967c8649deea63aceb08 0 1576308662000 5 connected  
  15. 34210a92160dc1994f02dc50a656ed9f52515329 127.0.0.1:7005 slave d600b4a56d1e92261d163aac266754d14a44a703 0 1576308662504 6 connected  
  16. f23b3418e4a454c8336c662a5d6022130f38ff30 127.0.0.1:7000 master - 0 1576308659988 1 connected 0-5460  
  17. 0a2306e861fb268b3ce5600323b76b992d8769f5 127.0.0.1:7003 slave f23b3418e4a454c8336c662a5d6022130f38ff30 0 1576308660994 4 connected  
  18. d600b4a56d1e92261d163aac266754d14a44a703 127.0.0.1:7002 myself,master - 0 0 3 connected 10923-16383  
  19. 100079aaff82a2eb6bb3967c8649deea63aceb08 127.0.0.1:7001 master - 0 1576308663007 2 connected 5461-10922  
  20. 127.0.0.1:7002>   

到此,redis 伪分布式集群搭建完成了。

脚本文件

stopAllRedis.sh:

#! /bin/bash

for((i=0;i<6;i++));do
  j=$[$i+1];
  cd redis0$j
  ./redis-cli -c -h 127.0.0.1 -p 700$i -a 123456 shutdown;
  cd ..
done
echo "所有 redis [cluster] 服务均已关闭。"
ps -ef |grep redis

exit 0

delAllRedisFile.sh:

#! /bin/bash

for((i=0;i<6;i++));do
  j=$[$i+1];
  cd redis0$j;
  rm -f $1
  cd ..
done
echo "所有 redis [cluster] 安装目录下的 "$1" 文件均已删除。"

exit 0

常见错误解答

报错信息:[ERR] Sorry, can't connect to node 127.0.0.1:7000

可能原因:

1)redis 服务没启动。。。(这个最坑!!!)

2)由于配置文件 redis.conf 中设置了密码导致。

解决方法:

方法一:可以删除节点配置文件中的密码,再次创建集群则无报错。

当这种方法会导致 redis 没有密码,不安全。如果仍想配置密码,还要搭建集群,则看方法二。

方法二:配置文件中还是配置密码,如果要执行创建集群的命令,则需要修改 client.rb 文件中的配置信息。client.rb 的路径不固定,可以通过 find 命令查找该文件。

命令:find -name client.rb

编辑配置信息中的密码部分:

报错信息:(error) MOVED 14041 127.0.0.1:7002

可能原因:这种情况一般是因为启动 redis-cli 时没有设置集群模式所导致的。

解决方法:

启动客户端时使用 -c 参数来启动集群模式:

命令:./redis-cli -p 7000 -a 123456 -c

报错信息:/usr/lib/ruby/gems/1.8/gems/redis-3.2.1/lib/redis/client.rb:113:in `call': ERR Slot 4648 is already busy (Redis::CommandError)

可能原因:运行 rb,点击 yes 后就报错了,一般和 nodes-conf 文件有关。

解决方法:只要把全部的 redis 节点目录下的 nodes.conf 删除即可。

其它错误待补充。。。

原文链接:https://blog.csdn.net/tzhuwb/article/details/103546913

给我留言

留言无头像?