redis cluster管理工具redis-trib.rb详解
本次使用的redis版本是:4.0.9
Redis安装过程这里不再讲解,网上有很多教程.这里主要讲解如何搭建集群.
本次使用一机(Ubantu)搭建6个服务端.一主配一从.
修改配置文件
1.创建6个文件夹:7000-7005
2.分别放入以下文件
//客户端运行文件
redis-cli
//配置文件
redis.conf
//服务端运行文件
redis-server
3.修改每个文件夹中的配置文件redis.conf
//端口,相应地修改为7000-7005
port 7000
//使能集群
cluster-enable yes
//集群会将当前节点 记录的集群状态持久化到这个文件中
cluster-config-file nodes.conf
配置完成
创建脚本
1.创建启动脚本 start-all.sh
cd 7000
./redis-server redis.conf
cd ..
cd 7001
./redis-server redis.conf
cd ..
cd 7002
./redis-server redis.conf
cd ..
cd 7003
./redis-server redis.conf
cd ..
cd 7004
./redis-server redis.conf
cd ..
cd 7005
./redis-server redis.conf
cd ..
2.创建关闭脚本 stop-all.sh
cd 7000
./redis-cli -p 7000 shutdown
./redis-cli -p 7001 shutdown
./redis-cli -p 7002 shutdown
./redis-cli -p 7003 shutdown
./redis-cli -p 7004 shutdown
./redis-cli -p 7005 shutdown
注意:这两个脚本文件需要放在7000-7005同级的目录里.
3.执行脚本启动和关闭redis
./start-all.sh
./stop-all.sh
4.登录客户端查看集群状态
//登录
redis-cli -p 7000
//查看状态
info cluster
组成集群
1.安装ruby工具
//安装ruby
sudo apt-get install ruby
//安装ruby连接接接口
gem install redis
如果不安装接口,后续操作 会报错
/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- redis (LoadError)
from /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from ./redis-trib.rb:25:in `<main>'
2.初始化集群
cluster_enabled为1表示集群可以正常使用了.现在每个节点都是独立的.需要将他们加入到同一个集群中.
Redis的src文件夹里提供了一个辅助工具redis-trib.rb.使用ruby编写的.
将其复制到7000-7005同级的目录下.并创建初始化脚本init-cluster.sh
init-cluster.sh
./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:表示每个数据库都有一个从数据库,因此整个集群一共有三个主数据库和是三个从数据库.
执行脚本
./init-cluster.sh
有可能会报错 Node 127.0.0.1:7001 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
解决办法:
1.把目录下的dump.rdb和nodes-700x.conf删除掉.
2. 登录客户端,执行flushdb
再次执行脚本,报警告Trying to optimize slaves allocation for anti-affinity [WARNING] Some slaves are in the same host as their master
这个无所谓,只是建议不要主从数据库放在同个机器上,这样子宕机时会不安全.
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
127.0.0.1:7000
127.0.0.1:7001
127.0.0.1:7002
Adding replica 127.0.0.1:7004 to 127.0.0.1:7000
Adding replica 127.0.0.1:7005 to 127.0.0.1:7001
Adding replica 127.0.0.1:7003 to 127.0.0.1:7002
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 77bde185502595509d9aa000cb67b0aa55a9439f 127.0.0.1:7000
slots:0-5460,5474,9494,9499,9842,11037,12291,12933,13310,14635 (5470 slots) master
M: daea47a8df47877859078837ca88d8b39f62c41b 127.0.0.1:7001
slots:5282,5461-10922,11037,12291,12933,13310,14635 (5468 slots) master
M: a4d6171872e7393180441031bdfd5b5f00809a45 127.0.0.1:7002
slots:5282,5474,9494,9499,9842,10923-16383 (5466 slots) master
S: 7fbccf4b2c6b614784c2943eb4775834fe9ebcfd 127.0.0.1:7003
replicates a4d6171872e7393180441031bdfd5b5f00809a45
S: 174f0b1128f479578db4c51c448cb8f6c31d0a84 127.0.0.1:7004
replicates 77bde185502595509d9aa000cb67b0aa55a9439f
S: b26dd23a6c2f21d3cbc4df1e846e373b4749b9cc 127.0.0.1:7005
replicates daea47a8df47877859078837ca88d8b39f62c41b
Can I set the above configuration? (type 'yes' to accept):
输入:yes,出现以下内容说明创建成功.
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER