redis cluster集群配置

按照redis官方说明进行安装

下载redis最新安装包redis-3.2.3.tar.gz,解压,根目录下make&&make install,会在src编译出redis-server、redis-cli等文件

下面是一个最少选项的集群的配置文件:

port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

要让集群正常运作至少需要三个主节点,不过在刚开始试用集群功能时, 强烈建议使用六个节点: 其中三个为主节点, 而其余三个则是各个主节点的从节点。

首先, 让我们进入一个新目录, 并创建六个以端口号为名字的子目录, 稍后我们在将每个目录中运行一个 Redis 实例:命令如下:

mkdir cluster-test
cd cluster-test
mkdir 7000 7001 7002 7003 7004 7005
在文件夹 7000 至 7005 中, 各创建一个 redis.conf 文件, 文件的内容可以使用上面的示例配置文件, 但记得将配置中的端口号从 7000 改为与文件夹名字相同的号码。

现在我们已经有了六个正在运行中的 Redis 实例, 接下来我们需要使用这些实例来创建集群, 并为每个节点编写配置文件。

通过使用 Redis 集群命令行工具 redis-trib , 编写节点配置文件的工作可以非常容易地完成: redis-trib 位于 Redis 源码的 src 文件夹中, 它是一个 Ruby 程序, 这个程序通过向实例发送特殊命令来完成创建新集群, 检查集群, 或者对集群进行重新分片(reshared)等工作。

进入解压的redis包的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

这个命令在这里用于创建一个新的集群, 选项–replicas 1 表示我们希望为集群中的每个主节点创建一个从节点。

之后跟着的其他参数则是这个集群实例的地址列表,3个master3个slaveredis-trib 会打印出一份预想中的配置给你看, 如果你觉得没问题的话, 就可以输入 yes。

可实际上,如果是第一次执行命令,会出现错误内容:/usr/bin/env: ruby: No such file or directory

那么要安装ruby。。。。可以直接使用yum install ruby

然后再次执行创建集群命令,还是会报错:no such file to load -- rubygems (LoadError)

那就需要安装rubygems ,同ruby,可以下载安装包安装,也可以直接yum install rubygems

然后再次执行创建集群命令,还是会报错:no such file to load -- redis (LoadError)

那就又需要使用gem来安装redis,执行命令:

gem install redis

然后再次执行创建集群命令,成功,输入yes同意它的方案,集群成功。

使用redis客户端连接集群任意节点:redis-cli -c -p 7002

输入:cluster nodes:

d133522e1024eacc4b24e96f50549f2d570ce43b 127.0.0.1:7004 slave ddc8d8ada90d6f8948a3cbd4907fe2978d8ba331 0 1473859326406 5 connected
ddc8d8ada90d6f8948a3cbd4907fe2978d8ba331 127.0.0.1:7001 master - 0 1473859322400 2 connected 5461-10922
bf913592b5008fbff626f9d80636269cb16c62b7 127.0.0.1:7005 slave 1a68a9d0af68a51c4315210b213473c34700b00e 0 1473859322400 6 connected
87c641bd0096c398b7764363755091c22593cbe8 127.0.0.1:7003 slave 60a5fba0ce5b7277cc3ec32b84458ff864912624 0 1473859325405 4 connected
60a5fba0ce5b7277cc3ec32b84458ff864912624 127.0.0.1:7000 master - 0 1473859323402 1 connected 0-5460
1a68a9d0af68a51c4315210b213473c34700b00e 127.0.0.1:7002 myself,master - 0 0 3 connected 10923-16383

三个master和3个slave,没啥问题。

ok,redis集群是部署在192.168.8.7上,使用Java的redis集群客户端连接192.168.8.7:7000、192.168.8.7:7001、……192.168.8.7:7005等六个节点。
好,问题来了,当程序连接redis的时候,会抛出Too many Cluster redirections

打开抛出异常附近代码会发现,原因是因为redirections: 节点调转次数(实际可以看做是重试次数),原因有下:

   1. 超时比较多,默认超时时间是2秒。

       (1). 网络原因:比如是否存在跨机房、网络割接等等。
       (2). 慢查询,因为redis是单线程,如果有慢查询的话,会阻塞住之后的操作。 
       (3). value值过大?
       (4). aof 重写/rdb fork发生?
    2. 节点之间关系发生变化,会发生JedisMovedDataException
    3. 数据在节点之间迁移,会发生JedisAskDataException
而大部分原因一般是因为,连接不上,或者说是连接被拒绝。
然后检查防火墙是否开启,服务是否开启,本机能否连接,跨机命令能否连接,如果都没有问题,那可以考虑redis.conf中bind参数了。
bind 默认127.0.0.1,即使用127.0.0.1来连接redis可以。例如:redis-cli -c -h 127.0.0.1 -p 7001  也即redis-cli -c -p 7001
当用本地或者跨机使用命令连接时,redis-cli -c -h 192.168.8.7 -p 7001 发现连接不上,好了,答案有点留出水面了。
那我把bind设置为0.0.0.0,这样,不管怎样来连接redis,都是可以的了吧?试试看。。。
好,那修改完redis.conf重新创建集群。
再次跨机使用命令连接:
redis-cli -c -h 192.168.8.7 -p 7001
连接成功,可以存取数据。
测试程序,却发现,还是会抛出Too many Cluster redirections异常。
命令连接redis集群后查看集群信息cluster nodes:
d133522e1024eacc4b24e96f50549f2d570ce43b 127.0.0.1:7004 slave ddc8d8ada90d6f8948a3cbd4907fe2978d8ba331 0 1473859326406 5 connected
ddc8d8ada90d6f8948a3cbd4907fe2978d8ba331 127.0.0.1:7001 master - 0 1473859322400 2 connected 5461-10922
bf913592b5008fbff626f9d80636269cb16c62b7 127.0.0.1:7005 slave 1a68a9d0af68a51c4315210b213473c34700b00e 0 1473859322400 6 connected
87c641bd0096c398b7764363755091c22593cbe8 127.0.0.1:7003 slave 60a5fba0ce5b7277cc3ec32b84458ff864912624 0 1473859325405 4 connected
60a5fba0ce5b7277cc3ec32b84458ff864912624 127.0.0.1:7000 master - 0 1473859323402 1 connected 0-5460
1a68a9d0af68a51c4315210b213473c34700b00e 127.0.0.1:7002 myself,master - 0 0 3 connected 10923-16383
结果发现集群中的绑定地址还是127.0.0.1
那,会不会是这里的问题呢???
再次把redis.conf中的bind设置为192.168.8.7,然后重新创建集群,,,,哎呀,卧槽,麻烦死了。。。。
先看看集群信息cluster nodes:
d133522e1024eacc4b24e96f50549f2d570ce43b 192.168.8.7:7004 slave ddc8d8ada90d6f8948a3cbd4907fe2978d8ba331 0 1473859326406 5 connected
ddc8d8ada90d6f8948a3cbd4907fe2978d8ba331 192.168.8.7:7001 master - 0 1473859322400 2 connected 5461-10922
bf913592b5008fbff626f9d80636269cb16c62b7 192.168.8.7:7005 slave 1a68a9d0af68a51c4315210b213473c34700b00e 0 1473859322400 6 connected
87c641bd0096c398b7764363755091c22593cbe8 192.168.8.7:7003 slave 60a5fba0ce5b7277cc3ec32b84458ff864912624 0 1473859325405 4 connected
60a5fba0ce5b7277cc3ec32b84458ff864912624 192.168.8.7:7000 master - 0 1473859323402 1 connected 0-5460
1a68a9d0af68a51c4315210b213473c34700b00e 192.168.8.7:7002 myself,master - 0 0 3 connected 10923-16383
好,那现在先跨机测试下,
redis-cli -c -h 192.168.8.7 -p 7001
连接成功,存取正常。
程序测试,程序连接redis集群,,。
成功!
那是不是意味着如果我用它的外网地址连接又会异常了呢??嗯,可能吧。。。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值