Redis集群以及哨兵

当提到 Redis 时,通常是指一个开源的内存数据库(In-Memory Database),它是一个支持键-值对存储的高性能、持久化的数据库系统。Redis 被广泛用于缓存、会话存储、排行榜、实时分析等场景。

以下是 Redis 的一些关键特性和概念:

  1. 键-值存储: Redis 是一个键-值存储系统,每个键都与一个值关联。这些值可以是字符串、哈希、列表、集合或有序集合等数据结构。

  2. 内存数据库: Redis 将数据存储在内存中,这使得它具有极高的读写性能。然而,为了持久化数据,Redis 也支持将数据定期保存到磁盘上。

  3. 数据结构: Redis 提供多种数据结构,包括字符串、哈希表、列表、集合和有序集合。这些数据结构赋予了 Redis 不同的用途,例如字符串用于缓存、列表用于消息队列、有序集合用于排行榜等。

  4. 持久性: Redis 支持将数据保存到磁盘上,以便在服务器重启时能够恢复数据。可以通过 RDB 快照和 AOF(Append-Only File)两种方式来实现持久化。

  5. 分布式: Redis 支持主从复制,可以配置多个 Redis 实例,其中一个为主服务器,其他为从服务器,从服务器可以复制主服务器上的数据。此外,Redis 还提供了集群模式,支持在多个节点之间进行数据分片。

  6. 事务和原子操作: Redis 支持事务,可以通过 MULTI、EXEC、DISCARD 和 WATCH 等命令实现。Redis 还提供了一些原子操作,确保在并发环境中的一致性。

  7. 发布订阅: Redis 支持发布订阅模式,允许客户端订阅频道并接收实时的消息通知。

  8. 多语言支持: Redis 提供了多种客户端库,支持多种编程语言,包括但不限于 Python、Java、Node.js、Ruby 等。

安装redis

下载地址

https://codeload.github.com/redis/redis/tar.gz/refs/tags/7.2.3

下载完成解压出来

tar zxvf redis.gz 

安装编译工具

yum install make gcc 

进入目录直接make,编译完成后修改配置文件

配置文件类

常规单节点配置文件

bind 0.0.0.0 #这里改为全部地址可以访问
protected-mode no #加密传输关闭
prot 6379 #常规端口号,无需修改
daemonize yes  #开启后台模式将no改为yes
requirepass 1122334 #设置密码
dir ./data #数据目录
logfile "/var/log/redis.log"  #设置日志存放路径与日志名
appendfilename appendonly.aof  #AOF文件名
dbfilename dump.rdb #rdb文件名
appendonli yes #AOF开启
appendfsync everysec  
always     #每次有数据修改发生时都会写入AOF文件。
everysec  #每秒钟同步一次,该策略为AOF的缺省策略
no          #从不同步。高效但是数据不会被持久化

Redis主从复制

修改配置

replicaof 192.168.100.1 6379 #填写需要复制的master机器ip即可

验证

info replication #进入redis终端后

哨兵模式

Redis哨兵模式是一种用于高可用性(High Availability)的解决方案,通过监控和管理Redis主从复制集群,使其在主服务器失效时能够自动进行故障转移。哨兵模式主要有以下几个组成部分:

  • 主服务器(Master):
    主服务器是处理写入操作的节点,它负责接收客户端的写入请求。在哨兵模式中,有一个主服务器,多个从服务器通过主从复制与主服务器同步数据。

  • 从服务器(Replica):
    从服务器是主服务器的复制品,它通过主从复制机制与主服务器同步数据。从服务器可以用于处理读取请求,提高系统的读取性能,并在主服务器失效时被提升为新的主服务器。

  • 哨兵节点(Sentinel):
    哨兵节点是一种特殊的Redis实例,负责监控主服务器和从服务器的健康状况。当主服务器发生故障时,哨兵节点可以自动完成故障检测,并协调执行故障转移操作。多个哨兵节点可以组成哨兵群体,共同协作以确保高可用性。

通过哨兵模式,系统能够实现以下功能:

  • 故障检测: 哨兵节点定期检查主服务器和从服务器的健康状态,发现主服务器故障后会触发故障转移操作。

  • 故障转移: 当主服务器不可用时,哨兵节点会选出一个从服务器作为新的主服务器,继续提供服务。

  • 配置管理: 哨兵节点负责管理配置信息,包括主从服务器的连接信息、故障转移策略等。

  • 通知机制: 哨兵节点可以通过发布/订阅机制通知其他节点有关于故障转移等事件的信息。

**主观下线和客观下线 **

主观下线:Subjectively Down,简称 SDOWN,指的是当前 Sentinel 实例对某个redis服务器做出的下线判断。 
客观下线:Objectively Down, 简称 ODOWN,指的是多个 Sentinel 实例在对Master Server做出 SDOWN  判断,并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后,得出的Master  Server下线判断,然后开启failover

修改配置文件

vim sentinel.conf 

哨兵配置文件

daemonize yes #设置哨兵放后台运行
logfile "/var/log/sentinel.log" #设置哨兵日志
sentinel monitor mymaster 10.0.0.137 6379 2 #当集群中有2个sentinel认为master死了时,才能真正认为该master已经不可用了。 (slave上面写的是master的ip,master写自己ip)
sentinel auth-pass mymaster 1122334 #如果设置了密码那就需要指定密码,否则不需要
sentinel down-after-milliseconds mymaster 3000   #单位毫秒
sentinel failover-timeout mymaster 10000   #若sentinel在该配置值内未能完成failover(故障转移)操作(即故障时master/slave自动切换),则认为本次failover失败。

protected-mode no  #关闭加密模式--新添加到sentinel配置文件中  ----老版本中需需要添加

启动

/src/redis-sentinel sentinel.conf

Redis集群

更改配置文件

cluster-enabled yes #启用集群
cluster-config-file nodes.conf #集群配置文件,由redis自动更新,不需要手动配置,运行多实例时请注修改为对应端口
cluster-node-timeout 5000 #单位毫秒。集群节点超时时间,即集群中主从节点断开连接时间阈值,超过该值则认为主节点不可以,从节点将有可能转为master
cluster-replica-validity-factor 10 #在进行故障转移的时候全部slave都会请求申请为master,但是有些slave可能与master断开连接一段时间了导致数据过于陈旧,不应该被提升为master。该参数就是用来判断slave节点与master断线的时间是否过长。
cluster-migration-barrier 1 #一个主机将保持连接的最小数量的从机,以便另一个从机迁移到不再被任何从机覆盖的主机
cluster-require-full-coverage yes #集群中的所有slot(16384个)全部覆盖,才能提供服务

使用命令创建集群

./redis-cli --cluster create --cluster-replicas 1 192.168.116.172 192.168.116.173 192.168.116.174 192.168.116.175 192.168.116.1746 192.168.116.177

每一个后面跟着一个从节点,然后开始分槽。
掉线恢复后master会改变