环境准备
- centos6.7
- redis3.2.8
安装步骤
- 第一步:下载redis3.2.8安装包https://redis.io/download
- 第二步: 解压压缩包到中/inner_dev_env/redis-3.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)
gem_original_require’: no such file to load – redis (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
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>
总结
- 第一:本教程基本参考官网文档安装对应链接如下
https://redis.io/topics/cluster-tutorial#creating-a-redis-cluster-using-the-create-cluster-script - 第二:本教程遇到了如下几个问题,下面给出了问题列表和对应链接
1 远程连接不上redis :可能是防火墙没关闭,或者设置了只能127.0.0.1访问
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