大数据学习初级入门教程(六) —— Redis 3.x 伪分布式集群的安装、配置、启动和测试

在上一篇文章《大数据学习初级入门教程(二) —— 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

cd redis01
./redis-server redis.conf
cd ..
cd redis02
./redis-server redis.conf
cd ..
cd redis03
./redis-server redis.conf
cd ..
cd redis04
./redis-server redis.conf
cd ..
cd redis05
./redis-server redis.conf
cd ..
cd redis06
./redis-server redis.conf
cd ..
echo "所有redis服务均已启动,进程信息如下:"
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

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

[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
>>> Creating cluster
[ERR] Sorry, can't connect to node 127.0.0.1:7000
[root@node100 redis-cluster]# cd /
[root@node100 /]# find -name client.rb
./usr/lib/ruby/1.8/xmlrpc/client.rb
./usr/lib/ruby/gems/1.8/gems/redis-3.2.1/lib/redis/client.rb
[root@node100 /]# vi /usr/lib/ruby/gems/1.8/gems/redis-3.2.1/lib/redis/client.rb 
require "redis/errors"
require "socket"
require "cgi"

class Redis
  class Client

    DEFAULTS = {
      :url => lambda { ENV["REDIS_URL"] },
      :scheme => "redis",
      :host => "127.0.0.1",
      :port => 6379,
      :path => nil,
      :timeout => 5.0,
      :connect_timeout => 5.0,
      :password => "123456",
      :db => 0,
      :driver => nil,
      :id => nil,
      :tcp_keepalive => 0,
<ib/ruby/gems/1.8/gems/redis-3.2.1/lib/redis/client.rb" 574L, 14334C written
[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
[root@node100 /]# cd /usr/redis-cluster/
[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
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
127.0.0.1:7000
127.0.0.1:7001
127.0.0.1:7002
Adding replica 127.0.0.1:7003 to 127.0.0.1:7000
Adding replica 127.0.0.1:7004 to 127.0.0.1:7001
Adding replica 127.0.0.1:7005 to 127.0.0.1:7002
M: f23b3418e4a454c8336c662a5d6022130f38ff30 127.0.0.1:7000
   slots:0-5460 (5461 slots) master
M: 100079aaff82a2eb6bb3967c8649deea63aceb08 127.0.0.1:7001
   slots:5461-10922 (5462 slots) master
M: d600b4a56d1e92261d163aac266754d14a44a703 127.0.0.1:7002
   slots:10923-16383 (5461 slots) master
S: 0a2306e861fb268b3ce5600323b76b992d8769f5 127.0.0.1:7003
   replicates f23b3418e4a454c8336c662a5d6022130f38ff30
S: e35e98e6c061fc80c85ba02f9d1de6dccba91f7f 127.0.0.1:7004
   replicates 100079aaff82a2eb6bb3967c8649deea63aceb08
S: 34210a92160dc1994f02dc50a656ed9f52515329 127.0.0.1:7005
   replicates d600b4a56d1e92261d163aac266754d14a44a703
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join.....
>>> Performing Cluster Check (using node 127.0.0.1:7000)
M: f23b3418e4a454c8336c662a5d6022130f38ff30 127.0.0.1:7000
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
S: e35e98e6c061fc80c85ba02f9d1de6dccba91f7f 127.0.0.1:7004
   slots: (0 slots) slave
   replicates 100079aaff82a2eb6bb3967c8649deea63aceb08
S: 0a2306e861fb268b3ce5600323b76b992d8769f5 127.0.0.1:7003
   slots: (0 slots) slave
   replicates f23b3418e4a454c8336c662a5d6022130f38ff30
S: 34210a92160dc1994f02dc50a656ed9f52515329 127.0.0.1:7005
   slots: (0 slots) slave
   replicates d600b4a56d1e92261d163aac266754d14a44a703
M: 100079aaff82a2eb6bb3967c8649deea63aceb08 127.0.0.1:7001
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
M: d600b4a56d1e92261d163aac266754d14a44a703 127.0.0.1:7002
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[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

127.0.0.1:7002> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:3
cluster_stats_messages_sent:2920
cluster_stats_messages_received:2920
127.0.0.1:7002> cluster nodes
e35e98e6c061fc80c85ba02f9d1de6dccba91f7f 127.0.0.1:7004 slave 100079aaff82a2eb6bb3967c8649deea63aceb08 0 1576308662000 5 connected
34210a92160dc1994f02dc50a656ed9f52515329 127.0.0.1:7005 slave d600b4a56d1e92261d163aac266754d14a44a703 0 1576308662504 6 connected
f23b3418e4a454c8336c662a5d6022130f38ff30 127.0.0.1:7000 master - 0 1576308659988 1 connected 0-5460
0a2306e861fb268b3ce5600323b76b992d8769f5 127.0.0.1:7003 slave f23b3418e4a454c8336c662a5d6022130f38ff30 0 1576308660994 4 connected
d600b4a56d1e92261d163aac266754d14a44a703 127.0.0.1:7002 myself,master - 0 0 3 connected 10923-16383
100079aaff82a2eb6bb3967c8649deea63aceb08 127.0.0.1:7001 master - 0 1576308663007 2 connected 5461-10922
127.0.0.1:7002> 

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

常见错误解答

报错信息:[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 删除即可。

其它错误待补充。。。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值