redis三种集群方式配置方式及介绍

主从复制模式

主从复制的作用:

  • 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
  • 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
  • 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
  • 高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。

需要注意,主从复制的开启,完全是在从节点发起的;不需要我们在主节点做任何事情。

从节点开启主从复制,有3种方式:

主从复制配置

配置文件

在从服务器的配置文件中加入:slaveof

启动命令

redis-server启动命令后加入 --slaveof

客户端命令

Redis服务器启动后,直接通过客户端执行命令:slaveof ,则该Redis实例成为从节点。

上述3种方式是等效的,下面以客户端命令的方式为例,看一下当执行了slaveof后,Redis主节点和从节点的变化。

哨兵模式

  1. Sentinel(哨兵) 进程是用于监控 Redis 集群中 Master 主服务器工作的状态
  2. 在 Master 主服务器发生故障的时候,可以实现 Master 和 Slave 服务器的切换,保证系统的高可用(High Availability)

因为哨兵需要选举主节点,因此防止脑裂发生,最好哨兵集群个数为2n+1个

哨兵进程的作用

  • 监控(Monitoring):哨兵(sentinel) 会不断地检查你的 Master 和 Slave 是否运作正常。
  • 提醒(Notification):当被监控的某个Redis节点出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他应用程序发送通知。(使用较少)
  • 自动故障迁移(Automatic failover):当一个 Master 不能正常工作时,哨兵(sentinel) 会开始一次自动故障迁移操作。具体操作如下:
  1. 它会将失效 Master 的其中一个 Slave 升级为新的 Master, 并让失效 Master 的其他Slave 改为复制新的 Master。
  2. 当客户端试图连接失效的 Master 时,集群也会向客户端返回新 Master 的地址,使得集群可以使用现在的 Master 替换失效 Master。
  3. Master 和 Slave 服务器切换后,Master 的 redis.conf、Slave 的 redis.conf 和sentinel.conf 的配置文件的内容都会发生相应的改变,即 Master 主服务器的 redis.conf 配置文件中会多一行 slaveof 的配置,sentinel.conf 的监控目标会随之调换。

配置哨兵

sentinel.conf

port 26381
daemonize yes
pidfile "/var/run/redis-sentinel.pid"
#1.配置主节点 ip 2.选举2个哨兵节点同意即升级为主节点
sentinel monitor mymaster 172.16.1.105 6379 2
sentinel config-epoch mymaster 18

配置集群节点

配置方式为主从复制模式,主从复制模式为哨兵模式与集群模式的基石

Redis-cluster 集群模式

redis集群是一个由多个主从节点群组成的分布式服务器群,它具有复制、高可用和分片特性。Redis集群不需要sentinel哨兵也能完成节点移除和故障转移的功能。需要将每个节点设置成集群模式,这种集群模式没有中心节点,可水平扩展,据官方文档称可以线性扩展到上万个节点(官方推荐不超过1000个节点)。redis集群的性能和高可用性均优于之前版本的哨兵模式,且集群配置非常简单。

集群模式为去中心化模式,一些在哨兵模式与主从复制模式下可以使用的api在集群模式中无法使用,所以集群模式不支持处理多个keys的命令

优点

  • 在哨兵模式中,仍然只有一个Master节点。当并发写请求较大时,哨兵模式并不能缓解写压力。 我们知道只有主节点才具有写能力,那如果在一个集群中,能够配置多个主节点,缓解写压力,redis-cluster集群模式能达到此类要求。

注意

  • 在网络分裂出现期间, 客户端 Z1 可以向主节点 B 发送写命令的最大时间是有限制的, 这一时间限制称为节点超时时间(node timeout), 是 Redis 集群的一个重要的配置选项

Redis-cluster集群概念

  • 由多个Redis服务器组成的分布式网络服务集群;
  • 集群之中有多个Master主节点,每一个主节点都可读可写;
  • 节点之间会互相通信,两两相连;
  • Redis集群无中心节点。

集群节点复制

  • 在Redis-Cluster集群中,可以给每一个主节点添加从节点,主节点和从节点直接遵循主从模型的特性。
  • 当用户需要处理更多读请求的时候,添加从节点可以扩展系统的读性能。

故障转移

  • Redis集群的主节点内置了类似Redis Sentinel的节点故障检测和自动故障转移功能,当集群中的某个主节点下线时,集群中的其他在线主节点会注意到这一点,并对已下线的主节点进行故障转移。
  • 集群进行故障转移的方法和Redis Sentinel进行故障转移的方法基本一样,不同的是,在集群里面,故障转移是由集群中其他在线的主节点负责进行的,所以集群不必另外使用Redis Sentinel。

集群分片策略

  • Redis-cluster分片策略,是用来解决key存储位置的。
  • 集群将整个数据库分为16384个槽位slot,所有key-value数据都存储在这些slot中的某一个上。一个slot槽位可以存放多个数据,key的槽位计算公式为:slot_number=crc16(key)%16384,其中crc16为16位的循环冗余校验和函数。
  • 集群中的每个主节点都可以处理0个至16383个槽,当16384个槽都有某个节点在负责处理时,集群进入上线状态,并开始处理客户端发送的数据命令请求。

集群redirect转向

  • 由于Redis集群无中心节点,请求会随机发给任意主节点;
  • 主节点只会处理自己负责槽位的命令请求,其它槽位的命令请求,该主节点会返回客户端一个转向错误;
  • 客户端根据错误中包含的地址和端口重新向正确的负责的主节点发起命令请求。

redis-cluster集群配置

port 6384
cluster-enabled yes
cluster-config-file nodes-6384.conf
cluster-node-timeout 15000
pidfile “/var/run/redis_6384.pid”

如果配置了RDB 和 AOF,需要修改对应名称

dbfilename “dump6384.rdb”
appendfilename “appendonly6384.aof”

启动

  • redis5.0以上启动模式
./redis-cli --cluster create 172.16.1.105:6379 172.16.1.105:6380 172.16.1.105:6381 172.16.1.105:6382 172.16.1.105:6383 172.16.1.105:6384  --cluster-replicas 1
  • 需要ruby环境
./redis-trib.rb create --replicas 1 172.16.1.105:6379 172.16.1.105:6380 172.16.1.105:6381 172.16.1.105:6382 172.16.1.105:6383 172.16.1.105:6384

错误信息

Node XXXXX is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.

分别删除appendonly.aof dump.rdb nodes.conf,或者查看是否配置的aof rdb文件是否存放在一个文件夹里面文件命名冲突了。

redis cluster 一直在等待 Waiting for the cluster to join
  1. 是端口号+10000 的端口没有打开 例如6379 为16379 为集群端口
  2. 是需要在集群里输入 cluster meet 127.0.0.1 7000
  3. 是绑定ip顺序,如果绑定两个ip ,要通过将绑定ip 127.0.0.1 放置到后面实现的。
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值