Redis集群搭建
介绍
上一篇博客介绍了主从复制的配置,接下来介绍如何使用 redis-trib.rb
搭建一个 Redis
集群。
redis-trib.rb
是一款由 Redis
官方提供的集群管理工具,能够大量减少集群搭建的时间。除此之外,还能够简化集群的检查、槽迁徙、负载均衡等常见的运维操作。
在新版Redis中,redis-trib.rb工具的功能都被集成在了redis-cli里。
安装
我们使用 redis-trib.rb
前需要安装ruby环境
使用yum安装ruby
yum install -y rubygems
默认的ruby包管理工具镜像源在国外,将国外源删除添加国内源
gem sources --remove https://rubygems.org/ gem sources -a http://mirrors.aliyun.com/rubygems/ gem update --system
使用ruby的包管理工具下载依赖包
gem install redis
集群准备
因为集群最少需要6个节点,所以我们准备配置6份不同配置文件和工作目录的redis
mkdir 7001 7002 7003 7004 7005 7006
准备集群配置文件
$ vim /home/test/redis-cluster/7001/redis.cnf
# 守护进行模式启动
daemonize yes
# 设置数据库数量,默认数据库为0
databases 16
# 绑定地址,需要修改
bind 192.168.0.120
# 绑定端口,需要修改
port 6379
# pid文件存储位置,文件名需要修改
pidfile /home/test/redis-cluster/7001/pid/redis_6379.pid
# log文件存储位置,文件名需要修改
logfile /home/test/redis-cluster/7001/logs/redis_6379.log
# RDB快照备份文件名,文件名需要修改
dbfilename redis_6379.rdb
# 本地数据库存储目录,需要修改
dir /home/test/redis-cluster/7001/
# 集群相关配置
# 是否以集群模式启动
cluster-enabled yes
# 集群节点回应最长时间,超过该时间被认为下线
cluster-node-timeout 15000
# 生成的集群节点配置文件名,文件名需要修改
cluster-config-file nodes_6379.conf
启动集群
后台启动所有的redis服务
$ nohup redis-server /home/test/redis-cluster/7001/redis.conf &
$ nohup redis-server /home/test/redis-cluster/7002/redis.conf &
$ nohup redis-server /home/test/redis-cluster/7003/redis.conf &
$ nohup redis-server /home/test/redis-cluster/7004/redis.conf &
$ nohup redis-server /home/test/redis-cluster/7005/redis.conf &
$ nohup redis-server /home/test/redis-cluster/7006/redis.conf &
自动化
现在我们还有两个步骤没有做
- 对集群进行分槽工作
- 构建主从关系
通过 redis-trib.rb
工具,这个步骤将会变得异常简单,只需要执行下面命令
# 旧版Redis这里以脚本名开头 redis-trib.rb 跟上后面参数即可
$ redis-cli --cluster create 192.168.0.120:6379 192.168.0.140:6380 192.168.0.130:6379 192.168.0.120:6380 192.168.0.140:6379 192.168.0.130:6380 --cluster-replicas 1
–cluster-replicas:指定的副本数,其实这一条命令的语法规则是如果副本数为1,第一个ip:port与它后面的1个ip:port建立1主1从关系,如果副本数是2,第一个ip:port与它后面的2个ip:port建立1主2从关系,以此类推。
执行完这条命令后,输入yes,会看到以下信息:
# 主从相关
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.0.140:6379 to 192.168.0.120:6379
Adding replica 192.168.0.130:6380 to 192.168.0.140:6380
Adding replica 192.168.0.120:6380 to 192.168.0.130:6379
M: c71b52f728ab58fedb6e05a525ce00b453fd2f6b 192.168.0.120:6379
slots:[0-5460] (5461 slots) master
M: 6a627cedaa4576b1580806ae0094be59c32fa391 192.168.0.140:6380
slots:[5461-10922] (5462 slots) master
M: 282358c2fb0c7c16ec60f2c4043b52a0eb91e19f 192.168.0.130:6379
slots:[10923-16383] (5461 slots) master
S: d645d06708e1eddb126a6c3c4e38810c188d0906 192.168.0.120:6380
replicates 282358c2fb0c7c16ec60f2c4043b52a0eb91e19f
S: 7a7392cb66bea30da401d2cb9768a42bbdefc5db 192.168.0.140:6379
replicates c71b52f728ab58fedb6e05a525ce00b453fd2f6b
S: ff53e43f9404981a51d4e744de38004a5c22b090 192.168.0.130:6380
replicates 6a627cedaa4576b1580806ae0094be59c32fa391
# 询问是否保存配置?输入yes
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 192.168.0.120:6379)
M: c71b52f728ab58fedb6e05a525ce00b453fd2f6b 192.168.0.120:6379
slots:[0-5460] (5461 slots) master
1 additional replica(s)
M: 282358c2fb0c7c16ec60f2c4043b52a0eb91e19f 192.168.0.130:6379
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
M: 6a627cedaa4576b1580806ae0094be59c32fa391 192.168.0.140:6380
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
S: d645d06708e1eddb126a6c3c4e38810c188d0906 192.168.0.120:6380
slots: (0 slots) slave
replicates 282358c2fb0c7c16ec60f2c4043b52a0eb91e19f
S: 7a7392cb66bea30da401d2cb9768a42bbdefc5db 192.168.0.140:6379
slots: (0 slots) slave
replicates c71b52f728ab58fedb6e05a525ce00b453fd2f6b
S: ff53e43f9404981a51d4e744de38004a5c22b090 192.168.0.130:6380
slots: (0 slots) slave
replicates 6a627cedaa4576b1580806ae0094be59c32fa391
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.