环境准备

  1. centos6.7
  2. redis3.2.8

安装步骤

[root@allere /inner_dev_env/redis-3.2.8]# pwd
/inner_dev_env/redis-3.2.8
  • 第三步: 新建一个目录:redis-3.2.8-cluster(名称随意,位置任意)。然后再该目录下新建集群运行目录(名称任意)
mkdir redis-3.2.8-cluster
cd redis-3.2.8-cluster
mkdir 7000 7001 7002 7003 7004 7005
[root@allere /inner_dev_env/redis-3.2.8-cluster]# pwd
/inner_dev_env/redis-3.2.8-cluster
[root@allere /inner_dev_env/redis-3.2.8-cluster]# ls
7000  7001  7002  7003  7004  7005
  • 第四步:修改redis的配置文件redis.conf
[root@allere /inner_dev_env/redis-3.2.8-cluster]# vi /inner_dev_env/redis-3.2.8/redis.conf

让一个集群跑起来,只需以下五个参数
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

由于默认的redis.conf文件已经启动了以下三个参数
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
因此只需要修改port为对应的启动端口和启动cluser-enable即可。

82 # Accept connections on the specified port, default is 6379 (IANA #815344).
  83 # If port 0 is specified Redis will not listen on a TCP socket.
  84 port 7000
  717 # Normal Redis instances can't be part of a Redis Cluster; only nodes that are
  718 # started as cluster nodes can. In order to start a Redis instance as a
  719 # cluster node enable the cluster support uncommenting the following:
  720 #
  721 cluster-enabled yes
  • 第五步:redis.conf文件拷贝到对应的端口的文件夹下,并且修改port这个参数为对应的端口号
[root@allere /inner_dev_env/redis-3.2.8]# cp ./redis.conf /inner_dev_env/redis-3.2.8-cluster/7000

[root@allere /inner_dev_env/redis-3.2.8]# cp ./redis.conf /inner_dev_env/redis-3.2.8-cluster/7001

[root@allere /inner_dev_env/redis-3.2.8]# cp ./redis.conf /inner_dev_env/redis-3.2.8-cluster/7002

[root@allere /inner_dev_env/redis-3.2.8]# cp ./redis.conf /inner_dev_env/redis-3.2.8-cluster/7003

[root@allere /inner_dev_env/redis-3.2.8]# cp ./redis.conf /inner_dev_env/redis-3.2.8-cluster/7004

[root@allere /inner_dev_env/redis-3.2.8]# cp ./redis.conf /inner_dev_env/redis-3.2.8-cluster/7005
  • 第六步:将可执行文件redis-server拷贝到redis-3.2.8-cluster文件夹下,用于执行每个redis实例。
[root@allere /inner_dev_env/redis-3.2.8]# cp ./src/redis-server /inner_dev_env/redis-3.2.8-cluster/
  • 第七步:切换到对应文件下启动每个redis实例
[root@allere /inner_dev_env/redis-3.2.8-cluster]# cd 7000
[root@allere /inner_dev_env/redis-3.2.8-cluster/7000]# ../redis-server ./redis.conf
[root@allere /inner_dev_env/redis-3.2.8-cluster]# cd 7001
[root@allere /inner_dev_env/redis-3.2.8-cluster/7000]# ../redis-server ./redis.con
[root@allere /inner_dev_env/redis-3.2.8-cluster]# cd 7002
[root@allere /inner_dev_env/redis-3.2.8-cluster/7000]# ../redis-server ./redis.con
[root@allere /inner_dev_env/redis-3.2.8-cluster]# cd 7003
[root@allere /inner_dev_env/redis-3.2.8-cluster/7000]# ../redis-server ./redis.con
[root@allere /inner_dev_env/redis-3.2.8-cluster]# cd 7004
[root@allere /inner_dev_env/redis-3.2.8-cluster/7000]# ../redis-server ./redis.con
[root@allere /inner_dev_env/redis-3.2.8-cluster]# cd 7005
[root@allere /inner_dev_env/redis-3.2.8-cluster/7000]# ../redis-server ./redis.con
  • 第八步:创建集群。
    将跑起来的所有redis实例,组成集群是通过src/包下面的redis-trib.rb这个工具完成的。但是redis-trib.rb需要ruby环境,所以先要安装ruby环境(安装ruby环境可能会报错,本文附录给出了解决方法),然后再执行redis-trib命令创建集群。
[root@allere /inner_dev_env/redis-3.2.8/src]# ./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

8.1执行上面的命令的时候会报错,因为是执行的ruby的脚本,需要ruby的环境
错误内容:/usr/bin/env: ruby: No such file or directory
所以需要安装ruby的环境,这里推荐使用yum install ruby安装
yum install ruby

8.2然后再执行第八步的创建集群命令,还会报错,提示缺少rubygems组件,使用yum安装

错误内容:
./redis-trib.rb:24:in require': no such file to load -- rubygems (LoadError)
from ./redis-trib.rb:24
yum install rubygems
8.3再次执行第八步的命令,还会报错,提示不能加载redis,是因为缺少redis和ruby的接口,使用gem 安装
错误内容:
/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

gem install redis
注意:gem install redis 失败的话,需要修改一下gem的源
gem sources –remove https://rubygems.org/
gem sources -a https://ruby.taobao.org/

8.4执行第八步的时候,弹出提示输入yes既可以,至此完成安装。

测试

  • 第一步:连接上集群。注意需要加上-c参数
[root@allere /inner_dev_env/redis-3.2.8]# src/redis-cli -p 7000 -c
127.0.0.1:7000>
  • 第二步:进行一些简单操作,查看集群状态等…
127.0.0.1:7000> set key1 value1
-> Redirected to slot [9189] located at 192.168.0.102:7001
OK
192.168.0.102:7001> get key1
"value1"
192.168.0.102:7001> cluster nodes
99e6b250fd5c3622b6753cd8a3c5ef6ab946a5ec 192.168.0.102:7002 master - 0 1494483809589 3 connected 10923-16383
d13a6d014297d7164347f6ff07ceb50bce0fabdc 192.168.0.102:7004 slave 8ea553e0f9f502c01fc9565128085756ed2988e7 0 1494483811190 5 connected
1e51d8a6704e3c07276ba33c28d379f94b5544b7 192.168.0.102:7005 slave 99e6b250fd5c3622b6753cd8a3c5ef6ab946a5ec 0 1494483810088 6 connected
42b2c7f7afc2850199dee632bc02dc19e3d6c268 192.168.0.102:7003 slave a65d71bce6ea49032410378eb527973bc2249398 0 1494483810588 4 connected
a65d71bce6ea49032410378eb527973bc2249398 192.168.0.102:7000 master - 0 1494483809088 1 connected 0-5460
8ea553e0f9f502c01fc9565128085756ed2988e7 192.168.0.102:7001 myself,master - 0 0 2 connected 5461-10922
192.168.0.102:7001>
  • 第三步:这6个节点的集群搭建在一个独立的主机上的(本例子主机ip是192.168.0.102),如果你从另外的一台主机(我本地电脑的ip是192.168.0.36)访问该集群,进行操作需要进行额外的配置。登录每一个redis实例,进行类似如下的操作
[root@allere /inner_dev_env/redis-3.2.8]# src/redis-cli -p 7000 -c
127.0.0.1:7000> cluster meet 192.168.0.102 7001
OK
127.0.0.1:7000> cluster meet 192.168.0.102 7002
OK
127.0.0.1:7000> cluster meet 192.168.0.102 7003
OK
127.0.0.1:7000> cluster meet 192.168.0.102 7004
OK
127.0.0.1:7000> cluster meet 192.168.0.102 7005
OK
127.0.0.1:7000>

总结

linux开放服务端口的设置

/etc/sysconfig/iptables

vi iptables

加入如下内容

 -A INPUT -p tcp -m tcp --dport 6001 -j ACCEPT 
然后保存退出,重启服务
/etc/init.d/iptables restarts

2 安装ruby环境报错 :执行gem install redis无法成功

8.1执行上面的命令的时候会报错,因为是执行的ruby的脚本,需要ruby的环境
错误内容:/usr/bin/env: ruby: No such file or directory
所以需要安装ruby的环境,这里推荐使用yum install ruby安装
yum install ruby

8.2然后再执行第八步的创建集群命令,还会报错,提示缺少rubygems组件,使用yum安装

错误内容:
./redis-trib.rb:24:in `require': no such file to load -- rubygems (LoadError)
from ./redis-trib.rb:24
yum install rubygems
8.3再次执行第八步的命令,还会报错,提示不能加载redis,是因为缺少redis和ruby的接口,使用gem 安装
错误内容:
/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

gem install  redis 
注意:gem install redis 失败的话,需要修改一下gem的源
gem sources --remove https://rubygems.org/
gem sources -a https://ruby.taobao.org/

3 远程连接上了redis但不能够使用:
程序一直卡在了如下所示的地方

E:\software\Redis>redis-cli.exe -c -h 192.168.0.102 -p
192.168.0.102:7000> get name
-> Redirected to slot [5798] located at 127.0.0.1:7001

解决方法

[root@allere /inner_dev_env/redis-3.2.8]# src/redis-cli -p 7000 -c
127.0.0.1:7000> cluster meet 192.168.0.102 7001
OK

附录

redis-cli redirected to 127.0.0.1 http://stackoverflow.com/questions/37341646/redis-cli-redirected-to-127-0-0-1