带密码的redis集群搭建


这里记录下心路历程,踩了很多坑之后终于搭建完毕;

环境

LSB Version: :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description: CentOS Linux release 7.2.1511 (Core)
Release: 7.2.1511
Codename: Core

redis版本

3.2.8

历程

集群刚开始是同事搭建的,后来其中一台机器迁移,导致集群不可用,然后就再也起不来了

 

由于项目时间紧迫(也有个人的好胜心在里面),特连夜解决此问题;

 

按照网上搜索到步骤安装,所有的都进行完了,到最后一步的时候,

./redis-trib.rb create --replicas 1 192.168.1.3:7001 192.168.1.7:7001 192.168.1.45:7001 192.168.1.7:7002 192.168.1.45:7002 192.168.1.3:7002

 

老是报错:

[ERR] Sorry, can't connect to node *.*.*.*:7001

 

然后重新检查所有的配置,没有问题啊,怎么会报这个错呢,于是查找原因:

1. 是机器之间不能互通?

于是打算telnet一下,发现此工具没有安装,然后迅速的安装:

sudo yum install telnet

测试:

Trying 192.168.1.3...
Connected to 192.168.1.3.
Escape character is '^]'.

没有问题啊,怎么会不通呢

2. 是这个教程不好使?于是又搜了一个教程,按照教程配上,结果费了半天劲,还是这个错误! 崩溃。。。

 

配置文件哪里写错了?重新挨个检查配置,特别是bind,没错啊,IP写的就是 192.168.1.3啊,怎么会连不上呢

 

3. 既然连不上,那我试试单个节点是不是能连上,分别登录各个机器,发现单台都是能连的,但

set wst_test wst_value_success

 报了slot的错误(具体的错误信息记不清了);

既然工具(redis-trib.rb)不好用,那我就不用它了,忽然看到可以直接在redis命令行里 使用集群的相关命令:

cluster meet -- 于是手动把所有节点都加进去,但是主从关系怎么办,往下找,

cluster replicate --- 赶紧登陆每台机器的7002节点设置主从关系,心想这次应该OK了吧

再测  set wst_test wst_value_success, 还是报错!

希望再一次破灭。。。。。。

 

4. 到底是哪里的原因呢?于是查看 redis-trib.rb 的源码

看不懂啊,赶紧的搜索个ruby的教程(http://www.runoob.com/ruby/ruby-tutorial.html),撸一把基础。学到输出变量的方法puts

然后就一步一步跟踪代码,最后发现这一行:

@r = Redis.new(:host => @info[:host], :port => @info[:port], :timeout => 60)

咦!连接redis怎么不用密码,我明明设置了密码,难道ruby要比别的语言高级,拿出来单独测下:

#!/usr/bin/ruby
require "redis"
redis = Redis.new(:host => "192.168.1.3", :port =>7001 , :password => "******")
redis.ping

发现没有报错,说明密码还是要加的,于是修改源码为:

@r = Redis.new(:host => @info[:host], :port => @info[:port], :timeout => 60, :password => "你的密码") 

虽然这里把密码硬编码到这里不好,但是对ruby不是很熟,就先这样了!

 

赶紧再运行下最后的那个命令,感觉应该能行

由于窗口已关,问题不能重现,正确的样子大概如下:

./redis-trib.rb create 172.0.0.188:6379 172.0.0.180:6379 172.0.0.199:6379 172.0.0.154:6379
>>> Creating cluster
>>> Performing hash slots allocation on 4 nodes...
Using 4 masters:
172.0.0.188:6379
172.0.0.180:6379
172.0.0.199:6379
172.0.0.154:6379
M: 182daf01e924e405c9337f093c764c8bbc76b19d 172.0.0.188:6379
   slots:0-4095 (4096 slots) master
M: d5f61c3df20b7b344a3bdbc7ebff48291dc45fbe 172.0.0.180:6379
   slots:4096-8191 (4096 slots) master
M: 53bc0b32ef7f1906bb0fdde463b8be077ed981e3 172.0.0.199:6379
   slots:8192-12287 (4096 slots) master
M: f5aa21b39c76b20af5f2ac4912b22ccf8c9916b8 172.0.0.154:6379
   slots:12288-16383 (4096 slots) master
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

终于出现了正确的提示,好激动,问题终于解决了!!!

 

赶紧的测试下:

192.168.1.3:7001> 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:1
cluster_stats_messages_sent:13675
cluster_stats_messages_received:13675

192.168.1.3:7001> keys *
(empty list or set)
192.168.1.3:7001> set wst_test wst_value_success
OK
192.168.1.3:7001> keys *
1) "wst_test"
192.168.1.3:7001> get wst_test
"wst_value_success"

 

太好了!问题解决完毕!可以去睡觉了!


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM