Redis Cluster--安装配置

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 背景本篇主要讲Redis Cluster的安装,让我们先用起来,感受一下到底是怎么回事,后面再继续学习有关如何Cluster如何failover,添加节点,删除节点,迁移slots等功能。

背景

本篇主要讲Redis Cluster的安装,让我们先用起来,感受一下到底是怎么回事,后面再继续学习有关如何Cluster如何failover,添加节点,删除节点,迁移slots等功能。


Redis Cluster特点

(1)Redis Cluster 共有16384(0-16383)个hash slots,数据写入时,根据CRC16('key')%16384 hash slots分配到不同的节点上;

(2)当整个集群部分节点crash不影响继续使用,如有A,B,C三个master和A1,B1,C1三个slave组成的cluster,如果B宕机,则B1会自动提成为master,当B恢复之后,也会自动成为B1的slave,保证集群的高可用性;

(3)当集群负载比较高,不足以支撑现在的业务,可以添加空节点,然后rebalance slot或者reshard slot;


安装Redis Cluster

(1)环境准备

Redis版本都是3.2.9,有6个redis实例分别在6台不同的主机上运行,其中3个作为Master,另外3个分别作为它们的Slave存在,端口统一使用默认的端口6379;



blob.png

Master1: sht-sgmhadoopcm-01(172.16.101.54)

Slave1: sht-sgmhadoopdn-01(172.16.101.58)


Master2: sht-sgmhadoopnn-01(172.16.101.55)

Slave2: sht-sgmhadoopdn-02(172.16.101.59)


Master3: sht-sgmhadoopnn-02(172.16.101.56)

Slave3: sht-sgmhadoopdn-03(172.16.101.60)


修改配置文件,每个节点都需要执行,修改其他节点对应的IP地址

[root@sht-sgmhadoopcm-01 redis]# vim redis.conf
port 6379
bind 172.16.101.54  
appendonly yes
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000

(2)在需要ruby的节点上安装ruby

[root@sht-sgmhadoopcm-01 redis]# yum install ruby -y


下面这一步可能报错,因为CentOS7.3默认安装的ruby2.0.0,版本太低

[root@sht-sgmhadoopcm-01 redis]# gem install redis
Fetching: redis-4.0.1.gem (100%)
Successfully installed redis-4.0.1
Parsing documentation for redis-4.0.1
Installing ri documentation for redis-4.0.1
Done installing documentation for redis after 2 seconds
1 gem installed

(3)启动所有节点

[root@sht-sgmhadoopcm-01 redis]# src/redis-server redis.conf
[root@sht-sgmhadoopnn-02 redis]# src/redis-server redis.conf
[root@sht-sgmhadoopnn-01 redis]# src/redis-server redis.conf
[root@sht-sgmhadoopdn-01 redis]# src/redis-server redis.conf
[root@sht-sgmhadoopdn-02 redis]# src/redis-server redis.conf
[root@sht-sgmhadoopdn-03 redis]# src/redis-server redis.conf
[root@sht-sgmhadoopnn-02 redis]# ps -ef|grep redis
root      1716     1  0 12:40 ?        00:00:00 src/redis-server 172.16.101.56:6379 [cluster]
root      1720  1504  0 12:41 pts/2    00:00:00 grep --color=auto redis


(4)使用redis-trib.rb脚本创建cluster

Create的过程中已经给三个master分配好了hash slots,并且制定好Slave;

选项--replicas 1 表示为每个创建的主服务器节点创建一个从服务器节点;

[root@sht-sgmhadoopcm-01 redis]# ruby src/redis-trib.rb create --replicas 1 172.16.101.54:6379 172.16.101.55:6379 172.16.101.56:6379 172.16.101.58:6379 172.16.101.59:6379 172.16.101.60:6379
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
172.16.101.54:6379
172.16.101.55:6379
172.16.101.56:6379
Adding replica 172.16.101.58:6379 to 172.16.101.54:6379
Adding replica 172.16.101.59:6379 to 172.16.101.55:6379
Adding replica 172.16.101.60:6379 to 172.16.101.56:6379
M: 610aa83831404be545b25cc7f7322e987da1dd33 172.16.101.54:6379
   slots:0-5460 (5461 slots) master
M: 4c7348ac575a1a3bd4357e937a8f94f1654193cf 172.16.101.55:6379
   slots:5461-10922 (5462 slots) master
M: ece3a80f6989fa7f8316d73ee30ceea84340f24e 172.16.101.56:6379
   slots:10923-16383 (5461 slots) master
S: 28e8d5c8fd12533622d8110f8d262cb50120ca02 172.16.101.58:6379
   replicates 610aa83831404be545b25cc7f7322e987da1dd33
S: b50ba506525ee547823b3d9a7e5a095933e3ff42 172.16.101.59:6379
   replicates 4c7348ac575a1a3bd4357e937a8f94f1654193cf
S: c79de1092011ed395ee772969274c0567c2b5dd1 172.16.101.60:6379
   replicates ece3a80f6989fa7f8316d73ee30ceea84340f24e
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 172.16.101.54:6379)
M: 610aa83831404be545b25cc7f7322e987da1dd33 172.16.101.54:6379
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
S: b50ba506525ee547823b3d9a7e5a095933e3ff42 172.16.101.59:6379
   slots: (0 slots) slave
   replicates 4c7348ac575a1a3bd4357e937a8f94f1654193cf
S: 28e8d5c8fd12533622d8110f8d262cb50120ca02 172.16.101.58:6379
   slots: (0 slots) slave
   replicates 610aa83831404be545b25cc7f7322e987da1dd33
M: 4c7348ac575a1a3bd4357e937a8f94f1654193cf 172.16.101.55:6379
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
M: ece3a80f6989fa7f8316d73ee30ceea84340f24e 172.16.101.56:6379
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
S: c79de1092011ed395ee772969274c0567c2b5dd1 172.16.101.60:6379
   slots: (0 slots) slave
   replicates ece3a80f6989fa7f8316d73ee30ceea84340f24e
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

(5)查看Cluster基本信息

[root@sht-sgmhadoopcm-01 redis]# src/redis-cli -c -h 172.16.101.54 -p 6379
172.16.101.54:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=172.16.101.58,port=6379,state=online,offset=2591,lag=0
master_repl_offset:2591
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:2590
172.16.101.54:6379> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_sent:4462
cluster_stats_messages_received:4462

172.16.101.54:6379> cluster nodes
b50ba506525ee547823b3d9a7e5a095933e3ff42 172.16.101.59:6379 slave 4c7348ac575a1a3bd4357e937a8f94f1654193cf 0 1532497136876 5 connected
610aa83831404be545b25cc7f7322e987da1dd33 172.16.101.54:6379 myself,master - 0 0 1 connected 0-5460
28e8d5c8fd12533622d8110f8d262cb50120ca02 172.16.101.58:6379 slave 610aa83831404be545b25cc7f7322e987da1dd33 0 1532497135872 4 connected
4c7348ac575a1a3bd4357e937a8f94f1654193cf 172.16.101.55:6379 master - 0 1532497133867 2 connected 5461-10922
ece3a80f6989fa7f8316d73ee30ceea84340f24e 172.16.101.56:6379 master - 0 1532497134870 3 connected 10923-16383
c79de1092011ed395ee772969274c0567c2b5dd1 172.16.101.60:6379 slave ece3a80f6989fa7f8316d73ee30ceea84340f24e 0 1532497137878 6 connected

[root@sht-sgmhadoopcm-01 redis]# cat nodes-6379.conf
b50ba506525ee547823b3d9a7e5a095933e3ff42 172.16.101.59:6379 slave 4c7348ac575a1a3bd4357e937a8f94f1654193cf 0 1532493960094 5 connected
610aa83831404be545b25cc7f7322e987da1dd33 172.16.101.54:6379 myself,master - 0 0 1 connected 0-5460
28e8d5c8fd12533622d8110f8d262cb50120ca02 172.16.101.58:6379 slave 610aa83831404be545b25cc7f7322e987da1dd33 0 1532493955077 4 connected
4c7348ac575a1a3bd4357e937a8f94f1654193cf 172.16.101.55:6379 master - 0 1532493958087 2 connected 5461-10922
ece3a80f6989fa7f8316d73ee30ceea84340f24e 172.16.101.56:6379 master - 0 1532493956080 3 connected 10923-16383
c79de1092011ed395ee772969274c0567c2b5dd1 172.16.101.60:6379 slave ece3a80f6989fa7f8316d73ee30ceea84340f24e 0 1532493959091 6 connected
vars currentEpoch 6 lastVoteEpoch 0


FAQ

Error1: ruby2.0.0版本太低

[root@sht-sgmhadoopcm-01 redis]# gem install redis
Fetching: redis-4.0.1.gem (100%)
ERROR:  Error installing redis:
    redis requires Ruby version >= 2.2.2.


解决方法:

[root@sht-sgmhadoopcm-01 redis]# ruby --version
ruby 2.0.0p648 (2015-12-16) [x86_64-linux]

[root@sht-sgmhadoopcm-01 redis]# gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB

[root@sht-sgmhadoopcm-01 redis]# curl -sSLhttps://get.rvm.io | bash -s stable

[root@sht-sgmhadoopcm-01 redis]# find / -name rvm -print
/usr/local/rvm
/usr/local/rvm/src/rvm
/usr/local/rvm/src/rvm/bin/rvm
/usr/local/rvm/src/rvm/lib/rvm
/usr/local/rvm/src/rvm/scripts/rvm
/usr/local/rvm/bin/rvm
/usr/local/rvm/lib/rvm
/usr/local/rvm/scripts/rvm

[root@sht-sgmhadoopcm-01 redis]# source /usr/local/rvm/scripts/rvm
[root@sht-sgmhadoopcm-01 redis]# rvm list known
[root@sht-sgmhadoopcm-01 redis]# rvm install 2.4.1
[root@sht-sgmhadoopcm-01 redis]# rvm use 2.4.1
Using /usr/local/rvm/gems/ruby-2.4.1

[root@sht-sgmhadoopcm-01 redis]# rvm use 2.4.1 --default
Using /usr/local/rvm/gems/ruby-2.4.1

[root@sht-sgmhadoopcm-01 redis]# rvm remove 2.3.4
ruby-2.3.4 - #already gone
Using /usr/local/rvm/gems/ruby-2.4.1

[root@sht-sgmhadoopcm-01 redis]# ruby --version
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]



Error2:添加节点数据不为空

[root@sht-sgmhadoopcm-01 redis]# src/redis-trib.rb add-node 172.16.101.66:6379 172.16.101.54:6379
......
[ERR] Node 172.16.101.66:6379 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.


解决方法:

(1)删除aof和rdb文件

(2)删除nodes-6379.conf配置文件

(3)执行flushdb and flushall


参考链接

https://redis.io/topics/cluster-tutorial


目录
相关文章
|
4月前
|
存储 负载均衡 NoSQL
【赵渝强老师】Redis Cluster分布式集群
Redis Cluster是Redis的分布式存储解决方案,通过哈希槽(slot)实现数据分片,支持水平扩展,具备高可用性和负载均衡能力,适用于大规模数据场景。
361 2
|
2月前
|
NoSQL Java 网络安全
SpringBoot启动时连接Redis报错:ERR This instance has cluster support disabled - 如何解决?
通过以上步骤一般可以解决由于配置不匹配造成的连接错误。在调试问题时,一定要确保服务端和客户端的Redis配置保持同步一致。这能够确保SpringBoot应用顺利连接到正确配置的Redis服务,无论是单机模式还是集群模式。
242 5
|
2月前
|
缓存 负载均衡 监控
135_负载均衡:Redis缓存 - 提高缓存命中率的配置与最佳实践
在现代大型语言模型(LLM)部署架构中,缓存系统扮演着至关重要的角色。随着LLM应用规模的不断扩大和用户需求的持续增长,如何构建高效、可靠的缓存架构成为系统性能优化的核心挑战。Redis作为业界领先的内存数据库,因其高性能、丰富的数据结构和灵活的配置选项,已成为LLM部署中首选的缓存解决方案。
|
5月前
|
NoSQL 安全 Linux
设置Redis在CentOS7上的自启动配置
这些步骤总结了在CentOS 7系统上设置Redis服务自启动的过程。这些命令提供了一个直接且明了的方式,确保Redis作为关键组件在系统启动时能自动运行,保障了依赖于Redis服务的应用的稳定性和可用性。
479 9
|
9月前
|
NoSQL Ubuntu 网络安全
在 Ubuntu 20.04 上安装和配置 Redis
在 Ubuntu 20.04 上安装和配置 Redis 的步骤如下:首先更新系统包,然后通过 `apt` 安装 Redis。安装后,启用并启动 Redis 服务,检查其运行状态。可选配置包括修改绑定 IP、端口等,并确保防火墙设置允许外部访问。最后,使用 `redis-cli` 测试 Redis 功能,如设置和获取键值对。
414 1
|
11月前
|
存储 监控 NoSQL
NoSQL与Redis配置与优化
通过合理配置和优化Redis,可以显著提高其性能和可靠性。选择合适的数据结构、优化内存使用、合理设置持久化策略、使用Pipeline批量执行命令、以及采用分布式集群方案,都是提升Redis性能的重要手段。同时,定期监控和维护Redis实例,及时调整配置,能够确保系统的稳定运行。希望本文对您在Redis的配置与优化方面有所帮助。
192 23
|
11月前
|
存储 监控 NoSQL
NoSQL与Redis配置与优化
通过合理配置和优化Redis,可以显著提高其性能和可靠性。选择合适的数据结构、优化内存使用、合理设置持久化策略、使用Pipeline批量执行命令、以及采用分布式集群方案,都是提升Redis性能的重要手段。
218 7
|
存储 SQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(1)作者——LJS[含MySQL的下载、安装、配置详解步骤及报错对应解决方法]
Mysql And Redis基础与进阶操作系列(1)之[MySQL的下载、安装、配置详解步骤及报错对应解决方法]
|
存储 NoSQL Redis
Redis 配置
10月更文挑战第14天
228 1
|
存储 缓存 NoSQL
大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点
大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点
309 1