Redis的集群搭建

集群引言:

Redis 的哨兵模式基本已经可以实现高可用,读写分离 ,但是在这种模式下仍存在如下的问题:

1、单个redis主节点的写并发有限

2、单个redis接收所有的数据,最终回导致内存太大,内存太大回导致rdb文件过大,从很大的rdb文件中同步恢复数据会很慢

为此,Redis提供了Redis Cluster(集群)来解决这些问题。集群实现了 Redis 的分布式存储,也就是说每台 Redis 节点上存储不同的内容,Redis中多个节点共同担起存储数据的任务。

Redis Cluster 中整个数据库被划分为 16384 个slots(槽),数据库中每一个键都属于这16384中的一个,集群中的每个节点负责其中一部分槽位。

当 Redis Cluster 的客户端来连接集群时,它也会得到一份集群的槽位配置信息。这样当客户端要查找某个 key 时,可以直接定位到目标节点。

可以认为Redis 集群是一个提供在多个Redis间节点间共享数据的程序集。

Redis集群&Redis主从复制&Redis哨兵模式区别:

1. Redis 集群 (Cluster)

特点:

  • 自动分片:数据被分片存储在多个节点上,每个节点负责一部分数据。
  • 高可用性:每个分片有主节点和从节点,支持自动故障转移。
  • 横向扩展:可以动态增加或减少节点,实现水平扩展。

适用场景:

  • 大规模数据存储和高可用性需求
  • 需要动态扩展和自动分片的应用场景

 

2. 主从复制 (Master-Slave Replication)

特点:

  • 简单配置:只需要配置一个主节点(Master)和多个从节点(Slave)。
  • 数据同步:主节点负责写操作,从节点负责读操作,并从主节点复制数据。
  • 读写分离:可以减轻主节点的读负载,提高读性能。

适用场景:

  • 读多写少的应用场景
  • 需要简单的读写分离和高可用性解决方案

3. 哨兵模式 (Sentinel)

特点:

  • 监控:哨兵节点(Sentinel)监控主节点和从节点的健康状态。
  • 自动故障转移:当主节点宕机时,哨兵会自动将从节点提升为主节点。
  • 多哨兵协作:多个哨兵节点协同工作,通过投票机制决定是否进行故障转移。

适用场景:

  • 需要自动故障转移的高可用性解决方案
  • 适用于中小规模的应用场景

配置:

  • 当你使用哨兵模式时,需要配置哨兵节点,并指定监控的主节点。

搭建步骤:

为了配置一个redis cluster,官方建议我们我们需要准备至少6台redis.其中至少3个主节点:既然有3个主节点,而一个主节点搭配至少一个从节点,因此至少得6台redis

1、克隆6台机器,并关闭防火墙和selinux

2、配置6个节点:都是编辑redis.conf

主节点1:192.168.146.31
bind 当前机器ip
cluster-enabled yes 

主节点2:192.168.146.32
bind 当前机器ip
cluster-enabled yes 

主节点3:192.168.146.33
bind 当前机器ip
cluster-enabled yes 

从节点1:192.168.146.34
bind 当前机器ip
cluster-enabled yes

从节点2:192.168.146.35
bind 当前机器ip
cluster-enabled yes

从节点3:192.168.146.36
bind 当前机器ip
cluster-enabled yes

3、启动6台Redis,并在每个节点上执行flushall命令(目的是清空redis中原有的数据)

4、执行以下命令,创建Redis集群  

# --cluster-replicas 1  表示从节点的个数,每个主节点配置1个从节点
[root@localhost opt]#redis-cli --cluster create 192.168.146.31:6379 192.168.146.32:6379 192.168.146.33:6379 192.168.146.34:6379 192.168.146.35:6379 192.168.146.36:6379 --cluster-replicas 1

redis-cli --cluster create 192.168.252.31:6379 192.168.252.32:6379 192.168.252.33:6379 192.168.252.34:6379 192.168.252.35:6379 192.168.252.36:6379 --cluster-replicas 1

如果出现以下错误
>>> Creating cluster
[ERR] Node 192.168.146.31:6379 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
解决方案: 在每台机器上执行 flushall 命令
另外可以通过:cluster reset命令重置集群

>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.146.31:6379
192.168.146.32:6379
192.168.146.33:6379
Adding replica 192.168.146.34:6379 to 192.168.146.31:6379
Adding replica 192.168.146.35:6379 to 192.168.146.32:6379
Adding replica 192.168.146.36:6379 to 192.168.146.33:6379
M: 3c8b6b84a16516c6fcccdcc2025fa656420d5c6c 192.168.146.31:6379
   slots:0-5460,5798,6257,11921 (5464 slots) master
M: e98a7244dac95763902b11ad5a2689cfd0231350 192.168.146.32:6379
   slots:741,5461-10922,11921 (5464 slots) master
M: f9efde9fbe682281602331c523d670e0a2d4c659 192.168.146.33:6379
   slots:741,5798,6257,10923-16383 (5464 slots) master
S: d02eb5f1f321520104197eb3b4cc7ffa74a843af 192.168.146.34:6379
   replicates 3c8b6b84a16516c6fcccdcc2025fa656420d5c6c
S: e9d037bdddfe4a9f0f29d7d28727f09d6d07c550 192.168.146.35:6379
   replicates e98a7244dac95763902b11ad5a2689cfd0231350
S: 1bc1c56b3260469b8c3ddb13eb5f6e25f88abb7c 192.168.146.36:6379
   replicates f9efde9fbe682281602331c523d670e0a2d4c659
Can I set the above configuration? (type 'yes' to accept):  输入yes


最终看到如下输出:
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
[OK] All 16384 slots covered.

5、链接集群

redis-cli -c (进集群,使用集群)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值