安装redis集群的机器如下:
10.0.0.1
10.0.0.2
10.0.0.3
1,下载redis-3.0.0-rc1.tar.gz(目前的最新版)上传到以上三台机器的/data目录;
2,分别解压redis-3.0.0-rc1.tar.gz,命令:tar xzvf redis-3.0.0-rc1.tar.gz
3,分别:cd redis-3.0.0-rc1
4,make
5,make install
6,在/data下创建文件夹:mkdir dcp
在dcp下创建文件夹:mkdir rediscluster
在rediscluster下创建:
conf----------存放redis配置文件
data----------存放redis数据文件
log-----------存放日志文件
pid-----------存放pid文件
script--------存放启动停止脚本
7,把redis.conf_32001文件上传到conf目录下,然后:
-rw-r--r-- 1 root root 1236 Oct 14 15:14 redis.conf_32001
[root@hz_bjcm133 conf]# cp redis.conf_32001 redis.conf_32002
[root@hz_bjcm133 conf]# cp redis.conf_32001 redis.conf_32003
[root@hz_bjcm133 conf]# cp redis.conf_32001 redis.conf_32004
[root@hz_bjcm133 conf]# cp redis.conf_32001 redis.conf_32005
8,sed -i 's/192.168.7.198/10.0.0.1/g' redis.conf_*
9,sed -i 's/\/data\/dmap\/rediscluster/\/data\/dcp\/rediscluster/g' redis.conf_*
10,sed -i 's/32001/32005/g' redis.conf_32005
sed -i 's/32001/32004/g' redis.conf_32004
sed -i 's/32001/32003/g' redis.conf_32003
sed -i 's/32001/32002/g' redis.conf_32002
11,启动redis
[root@hz_bjcm133 conf]# /data/redis-3.0.0-rc1/src/redis-server /data/dcp/rediscluster/conf/redis.conf_32001
[root@hz_bjcm133 conf]# /data/redis-3.0.0-rc1/src/redis-server /data/dcp/rediscluster/conf/redis.conf_32002
[root@hz_bjcm133 conf]# /data/redis-3.0.0-rc1/src/redis-server /data/dcp/rediscluster/conf/redis.conf_32003
[root@hz_bjcm133 conf]# /data/redis-3.0.0-rc1/src/redis-server /data/dcp/rediscluster/conf/redis.conf_32004
[root@hz_bjcm133 conf]# /data/redis-3.0.0-rc1/src/redis-server /data/dcp/rediscluster/conf/redis.conf_32005
12,查看进程:ps aux|grep redis
root 22225 0.0 0.0 137408 7456 ? Ssl 14:27 0:00 /data/redis-3.0.0-rc1/src/redis-server 10.0.0.1:32001 [cluster]
root 22230 0.0 0.0 137408 7456 ? Ssl 14:27 0:00 /data/redis-3.0.0-rc1/src/redis-server 10.0.0.1:32002 [cluster]
root 22235 0.0 0.0 137408 7456 ? Ssl 14:27 0:00 /data/redis-3.0.0-rc1/src/redis-server 10.0.0.1:32003 [cluster]
root 22239 0.0 0.0 137408 7456 ? Ssl 14:27 0:00 /data/redis-3.0.0-rc1/src/redis-server 10.0.0.1:32004 [cluster]
root 22265 0.0 0.0 137408 7456 ? Ssl 14:27 0:00 /data/redis-3.0.0-rc1/src/redis-server 10.0.0.1:32005 [cluster]
13,在其它机器上也执行同样的操作;
14,把启动脚本(start.sh)和停止脚本(stop.sh)上传到各个机器的script目录下;
15,下载ruby,我下载的是ruby-2.1.3.tar.gz这个版本(ruby:程序员最要好的朋友 O(∩_∩)O~)
下载地址:https://www.ruby-lang.org/zh_cn/downloads/
以上三台机器只要安装一台就行,这里我选择的是:10.0.0.3
把ruby-2.1.3.tar.gz上传到137/data目录下,解压:tar xzvf ruby-2.1.3.tar.gz
ruby的安装参考:http://www.shangxueba.com/jingyan/97915.html
a,进入ruby-2.1.3执行:./configure
b,make
c,make install
OK,现在敲:ruby -v
是不是出现了ruby的版本号了,恭喜,您已经成功安装了ruby!
如果出现如下问题:
-bash: ruby: command not found
解决方法如下:
ln -s /usr/local/bin/ruby /bin
16,把所有节点加到redis集群
./redis-trib.rb create --replicas 1 10.0.0.1:32001 10.0.0.1:32002 10.0.0.1:32003 10.0.0.1:32004 10.0.0.1:32005 10.0.0.2:32001 10.0.0.2:32002 10.0.0.2:32003 10.0.0.2:32004 10.0.0.2:32005 10.0.0.3:32001 10.0.0.3:32002 10.0.0.3:32003 10.0.0.3:32004 10.0.0.3:32005
./redis-trib.rb create --replicas 1 118.26.150.166:32001 118.26.150.166:32002 118.26.150.166:32003 118.26.150.166:32004 118.26.150.166:32005 118.26.148.125:32001 118.26.148.125:32002 118.26.148.125:32003 118.26.148.125:32004 118.26.148.125:32005 118.26.150.165:32001 118.26.150.165:32002 118.26.150.165:32003 118.26.150.165:32004 118.26.150.165:32005
17,执行报错
/usr/local/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- redis (LoadError)
from /usr/local/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from ./redis-trib.rb:25:in `<main>'
那么说明Ruby的redis接口没有安装,可以通过sudo gem install redis或者gem install redis 进行安装。
gem install redis 可能由于网络原因下载失败
可以手动下载:
download地址:http://rubygems.org/gems/redis/versions/3.0.0
gem install -l /data/soft/redis-3.0.0.gem
18,重新执行16:
>>> Creating cluster
Connecting to node 10.0.0.1:32001: OK
Connecting to node 10.0.0.1:32002: OK
Connecting to node 10.0.0.1:32003: OK
Connecting to node 10.0.0.1:32004: OK
Connecting to node 10.0.0.1:32005: OK
Connecting to node 10.0.0.2:32001: OK
Connecting to node 10.0.0.2:32002: OK
Connecting to node 10.0.0.2:32003: OK
Connecting to node 10.0.0.2:32004: OK
Connecting to node 10.0.0.2:32005: OK
Connecting to node 10.0.0.3:32001: OK
Connecting to node 10.0.0.3:32002: OK
Connecting to node 10.0.0.3:32003: OK
Connecting to node 10.0.0.3:32004: OK
Connecting to node 10.0.0.3:32005: OK
>>> Performing hash slots allocation on 15 nodes...
Using 7 masters:
10.0.0.1:32001
10.0.0.2:32001
10.0.0.3:32001
10.0.0.1:32002
10.0.0.2:32002
10.0.0.3:32002
10.0.0.1:32003
Adding replica 10.0.0.2:32003 to 10.0.0.1:32001
Adding replica 10.0.0.1:32004 to 10.0.0.2:32001
Adding replica 10.0.0.1:32005 to 10.0.0.3:32001
Adding replica 10.0.0.2:32004 to 10.0.0.1:32002
Adding replica 10.0.0.3:32003 to 10.0.0.2:32002
Adding replica 10.0.0.2:32005 to 10.0.0.3:32002
Adding replica 10.0.0.3:32004 to 10.0.0.1:32003
Adding replica 10.0.0.3:32005 to 10.0.0.1:32001
M: bca6171f8e6a53ca95e487b3e07d3e27e8d588c6 10.0.0.1:32001
slots:0-2340 (2341 slots) master
M: ae44168e433c4b58f15f03987100eb95742892da 10.0.0.1:32002
slots:7022-9361 (2340 slots) master
M: 0939b70560b2ece64642ba021cfaec8be621c17a 10.0.0.1:32003
slots:14043-16383 (2341 slots) master
S: fa99bfc99d7e678ceeedd28242b69cd9e61ff05b 10.0.0.1:32004
replicates e364a7fb06fe9922ea81e7fc41c2891370d5a2af
S: 7acdaa82e5d52db1ac1ba209324c30ea62b3b5c3 10.0.0.1:32005
replicates f307234110ca4246c273f5a4eff3749eee6bd9b6
M: e364a7fb06fe9922ea81e7fc41c2891370d5a2af 10.0.0.2:32001
slots:2341-4680 (2340 slots) master
M: a6182636a6dc7ba2339a425d85b7eabacdb55ed0 10.0.0.2:32002
slots:9362-11702 (2341 slots) master
S: 2243eec692146889d850b153e6e54458085c49b9 10.0.0.2:32003
replicates bca6171f8e6a53ca95e487b3e07d3e27e8d588c6
S: b4ef9345520868fa8a5b00355b3ef85a32821d56 10.0.0.2:32004
replicates ae44168e433c4b58f15f03987100eb95742892da
S: ad224ac0015c2280a651443e5f780d19e0873db1 10.0.0.2:32005
replicates f5fc306ac3e541e1539ca4345aa2fbdb493db787
M: f307234110ca4246c273f5a4eff3749eee6bd9b6 10.0.0.3:32001
slots:4681-7021 (2341 slots) master
M: f5fc306ac3e541e1539ca4345aa2fbdb493db787 10.0.0.3:32002
slots:11703-14042 (2340 slots) master
S: 937ddb1c9854a0168ca66b36d3fba0c9ef392024 10.0.0.3:32003
replicates a6182636a6dc7ba2339a425d85b7eabacdb55ed0
S: e56edb5eb3b00c4192b49696722c850d44c8888b 10.0.0.3:32004
replicates 0939b70560b2ece64642ba021cfaec8be621c17a
S: 5db54925bdfd92a2ac06a5e5326be82247e37b2a 10.0.0.3:32005
replicates bca6171f8e6a53ca95e487b3e07d3e27e8d588c6
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 10.0.0.1:32001)
M: bca6171f8e6a53ca95e487b3e07d3e27e8d588c6 10.0.0.1:32001
slots:0-2340 (2341 slots) master
M: ae44168e433c4b58f15f03987100eb95742892da 10.0.0.1:32002
slots:7022-9361 (2340 slots) master
M: 0939b70560b2ece64642ba021cfaec8be621c17a 10.0.0.1:32003
slots:14043-16383 (2341 slots) master
M: fa99bfc99d7e678ceeedd28242b69cd9e61ff05b 10.0.0.1:32004
slots: (0 slots) master
replicates e364a7fb06fe9922ea81e7fc41c2891370d5a2af
M: 7acdaa82e5d52db1ac1ba209324c30ea62b3b5c3 10.0.0.1:32005
slots: (0 slots) master
replicates f307234110ca4246c273f5a4eff3749eee6bd9b6
M: e364a7fb06fe9922ea81e7fc41c2891370d5a2af 10.0.0.2:32001
slots:2341-4680 (2340 slots) master
M: a6182636a6dc7ba2339a425d85b7eabacdb55ed0 10.0.0.2:32002
slots:9362-11702 (2341 slots) master
M: 2243eec692146889d850b153e6e54458085c49b9 10.0.0.2:32003
slots: (0 slots) master
replicates bca6171f8e6a53ca95e487b3e07d3e27e8d588c6
M: b4ef9345520868fa8a5b00355b3ef85a32821d56 10.0.0.2:32004
slots: (0 slots) master
replicates ae44168e433c4b58f15f03987100eb95742892da
M: ad224ac0015c2280a651443e5f780d19e0873db1 10.0.0.2:32005
slots: (0 slots) master
replicates f5fc306ac3e541e1539ca4345aa2fbdb493db787
M: f307234110ca4246c273f5a4eff3749eee6bd9b6 10.0.0.3:32001
slots:4681-7021 (2341 slots) master
M: f5fc306ac3e541e1539ca4345aa2fbdb493db787 10.0.0.3:32002
slots:11703-14042 (2340 slots) master
M: 937ddb1c9854a0168ca66b36d3fba0c9ef392024 10.0.0.3:32003
slots: (0 slots) master
replicates a6182636a6dc7ba2339a425d85b7eabacdb55ed0
M: e56edb5eb3b00c4192b49696722c850d44c8888b 10.0.0.3:32004
slots: (0 slots) master
replicates 0939b70560b2ece64642ba021cfaec8be621c17a
M: 5db54925bdfd92a2ac06a5e5326be82247e37b2a 10.0.0.3:32005
slots: (0 slots) master
replicates bca6171f8e6a53ca95e487b3e07d3e27e8d588c6
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
恭喜!安装成功!
测试集群:
链接某一个节点:
redis-cli -c -p 32001 -h 192.168.7.166
./redis-trib.rb check 10.0.0.3:32001
删除数据
redis-cli keys '*u_2548_*' | xargs -i redis-cli del {}
查看节点分布信息
127.0.0.1:7000> cluster nodes
查看 slots 分布信息
127.0.0.1:7000> cluster slots
高级应用
eval "return redis.call('get',KEYS[1])" 1 u_11_5016_1408421658769317078330
redis-cli -p 32001 -h 118.26.148.125 EVAL "local msg = redis.call('get', KEYS[1]) return msg" 1 u_11_5016_1408421658769317078330
redis-cli -c -p 32001 -h 118.26.150.166 EVAL "$(cat hello.lua)" 0
Lua: 给 Redis 用户的入门指导
http://www.oschina.net/translate/intro-to-lua-for-redis-programmers?print
http://www.redis.cn/commands/hset.html
Redis 命令参考
http://redis.readthedocs.org/en/latest/index.html
Linux Shell之sed命令
http://blog.sina.com.cn/s/blog_a56ef5490101cgn2.html
通过Keepalived实现Redis Failover自动故障切换功能[实践分享]
http://heylinux.com/archives/1942.html
Redis主从自动failover
http://ylw6006.blog.51cto.com/470441/1086455
redis数据批量导入导出
http://my.oschina.net/u/937153/blog/133526
[root@host166 src]# redis-cli -c -p 32001 -h 118.26.150.166 cluster nodes |grep master
c735262a2e9867fe33b6cb4aa5ea9f0eec8ff8c3 118.26.150.166:32003 master - 0 1415591724660 3 connected 14043-16383
919374abb9cbe900554197abd29ffcdd71ee801c 118.26.150.166:32005 master - 0 1415591724660 17 connected 4681-7021
a7527428e82fb8c4c7d36012da5a1fe279e88c0f 118.26.150.166:32004 master - 0 1415591724660 22 connected 2341-4680
1f26d53ad0a3aa211367d0855b591ef84ab9f6b5 118.26.150.166:32002 master - 0 1415591724660 2 connected 7022-9361
8719792b7998042d699077d34d92b8c01cdce625 118.26.150.165:32002 master - 0 1415591724560 21 connected 11703-14042
803f32a027257aac4e598aee5e7075582a71292f 118.26.150.166:32001 myself,master - 0 0 1 connected 0-2340
516efe05a3067e6c1e81573b30300767c60e63c1 118.26.150.165:32003 master - 0 1415591724660 20 connected 9362-11702
[root@hz_bj137 src]# ./redis-cli -c -p 32001 -h 10.0.0.3 cluster nodes | grep master
0939b70560b2ece64642ba021cfaec8be621c17a 10.0.0.1:32003 master - 0 1415591951366 3 connected 14043-16383
bca6171f8e6a53ca95e487b3e07d3e27e8d588c6 10.0.0.1:32001 master - 0 1415591951466 1 connected 0-2340
f307234110ca4246c273f5a4eff3749eee6bd9b6 10.0.0.3:32001 myself,master - 0 0 11 connected 4681-7021
ae44168e433c4b58f15f03987100eb95742892da 10.0.0.1:32002 master - 0 1415591951366 2 connected 7022-9361
a6182636a6dc7ba2339a425d85b7eabacdb55ed0 10.0.0.2:32002 master - 0 1415591951366 7 connected 9362-11702
e364a7fb06fe9922ea81e7fc41c2891370d5a2af 10.0.0.2:32001 master - 0 1415591951466 6 connected 2341-4680
f5fc306ac3e541e1539ca4345aa2fbdb493db787 10.0.0.3:32002 master - 0 1415591951466 12 connected 11703-14042
[root@yz_dtcy125 src]# redis-cli -c -p 32001 -h 118.26.150.166 cluster nodes |grep slave
ee6c25030712b6f6aa5c944975cdb059d196e1a4 118.26.150.165:32001 slave 919374abb9cbe900554197abd29ffcdd71ee801c 0 1417770765560 17 connected
3adc8bdd0d3474cf44485b3b4e26bcf1dc1a4e1a 118.26.150.165:32004 slave c735262a2e9867fe33b6cb4aa5ea9f0eec8ff8c3 0 1417770765660 14 connected
3bdba65d8f1581a0859c1bad50abe3387ffb567f 118.26.148.125:32004 slave 1f26d53ad0a3aa211367d0855b591ef84ab9f6b5 0 1417770765660 9 connected
701e0048c0fca1cc26f8dbc0f62e25f80ed2b1ad 118.26.148.125:32002 slave 516efe05a3067e6c1e81573b30300767c60e63c1 0 1417770765660 20 connected
2ac966c31ac61f2f1c516a284a8e8f41c889bc2b 118.26.148.125:32005 slave 8719792b7998042d699077d34d92b8c01cdce625 0 1417770765660 21 connected
a7190177b6a8aa63eefd1c6076c6623513833362 118.26.150.165:32005 slave 803f32a027257aac4e598aee5e7075582a71292f 0 1417770765559 15 connected
a00aeb722f7c2f03b0d2c8d37c20afca0359fb71 118.26.148.125:32003 slave a7527428e82fb8c4c7d36012da5a1fe279e88c0f 0 1417770765560 22 connected
911f0440b08f6b8605331122344382c163a5e1ed 118.26.148.125:32001 slave a7527428e82fb8c4c7d36012da5a1fe279e88c0f 0 1417770765560 22 connected
while read line; do ip=`echo $line |awk -F":" '{print $1}'`; port=`echo $line |awk -F":" '{print $2}'`; redis-cli -c -p $port -h $ip dbsize; done < /tmp/cluster_master.137
redis-cli -c -h 10.0.0.3 -p 32001 cluster nodes |grep master |awk '{print $2}' > /tmp/cluster_master.137
先执行下面这个,生成master文件
[root@hz_bj137 src]# pwd
/data/redis-3.0.0-rc1/src
You have mail in /var/spool/mail/root
[root@hz_bj137 src]# while read line; do ip=`echo $line |awk -F":" '{print $1}'`; port=`echo $line |awk -F":" '{print $2}'`; ./redis-cli -c -p $port -h $ip dbsize; done < /tmp/cluster_master.137
redis-cli -c -p 32001 -h 118.26.148.125 cluster nodes | grep fail
./redis-cli -c -p 33001 -h 192.168.7.228 cluster nodes | grep fail
no reachable node in cluster
此问题为应用程序连不上redis集群中的cluster,因为系统部的人把redis集群机器的防火墙开了,
导致应用程序大量报这个错误
./redis-cli -c -p 33061 -h 118.26.150.231 cluster nodes |grep master