Redis集群搭建


Redis集群搭建

介绍

上一篇博客介绍了主从复制的配置,接下来介绍如何使用 redis-trib.rb 搭建一个 Redis集群。

redis-trib.rb是一款由 Redis 官方提供的集群管理工具,能够大量减少集群搭建的时间。除此之外,还能够简化集群的检查、槽迁徙、负载均衡等常见的运维操作。

在新版Redis中,redis-trib.rb工具的功能都被集成在了redis-cli里。

安装

我们使用 redis-trib.rb 前需要安装ruby环境

  1. 使用yum安装ruby

    yum install -y rubygems
  2. 默认的ruby包管理工具镜像源在国外,将国外源删除添加国内源

    gem sources --remove https://rubygems.org/
    gem sources -a http://mirrors.aliyun.com/rubygems/
    gem update --system
  3. 使用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 &

自动化

现在我们还有两个步骤没有做

  1. 对集群进行分槽工作
  2. 构建主从关系

通过 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.

Redis 超详细自动管理Cluster集群工具上手 redis-trib.rb


文章作者: 我若为侠
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 我若为侠 !
 上一篇
Redis的三种集群方式及原理 Redis的三种集群方式及原理
Redis的三种集群方式及原理主从复制原理 从服务器连接主服务器,发送SYNC命令 主服务器接收到SYNC命令后,开始执行BGSAVE命令生成RDB文件,并使用缓冲区记录此后执行的所有写命令 主服务器BGSAVE执行完后,向所有从服务器发送
下一篇 
Redis主从复制配置 Redis主从复制配置
Redis主从复制配置背景当我们的应用出现高流量高并发的情况下,通常会使用缓存来提高系统的吞吐量,如果当流量超过了缓存的性能瓶颈后,我们需要对缓存进行水平扩容来提高他的并发能力,那么这就需要搭建Redis主从集群,实现读写分离。 使用Red
  目录