1.Redis服务搭建

这个教程会演示Redis7在Linux服务器上安装,包括

单机部署,主从部署,哨兵部署,集群部署的安装以及相应的架构介绍

单机部署

检查安装gcc环境

Redis是由C语言编写的,它需要C环境

复制代码

# 关闭防火墙 systemctl stop firewalld.service # 查看防火墙状态 firewall-cmd --state # 卸载防火墙 yum remove firewalld # 检查 gcc 版本 gcc --version # 安装 gcc yum install gcc

下载安装Redis

复制代码

# 创建安装目录 mkdir -p /opt/software/redis # 进入目录并下载 cd /opt/software/redis wget https://download.redis.io/redis-stable.tar.gz # 解压 tar -xzf redis-stable.tar.gz # 编译安装 cd redis-stable make install # 检查安装结果 ll /usr/local/bin

文件介绍:

  • redis-benchmark:性能测试工具

  • redis-check-aof:修复有问题的aof文件

  • redis-check-rab:修复有问题的rab文件

  • redis-sentinel:Redis集群使用

  • redis-server:Redis服务器启动命令

  • reids-cli:客户端,操作路口

启动Redis

我们可以在/opt/software/redis/redis-stable/src或者/user/local/bin目录下的redis-server启动Redis服务

复制代码

# 源码路径启动 ./src/redis-server # 系统路径直接启动 redis-server

配置Redis

前面的启动方式无法在后台运行,退出后直接关闭了Redis服务,所以我们还需要对Redis进行一些配置

复制代码

# 修改当前Redis目录下的Redis.config文件 vim redis.conf

输入这个指令":set number",打开行号

复制代码

bind * -::* #87行,修改bind项,* -::* 支持远程连接 daemonize yes #309行,开启守护进程,后台运行 logfile /opt/software/redis/redis-stable/redis.log #355行,指定日志文件目录 dir /opt/software/redis #510行,指定工作目录 requirepass guslegend@666 #1044行,给默认用户设置密码,主要是使用 redis‑cli 连接 redis‑server 时,需要通过密码校验。自行学习,可以不设置。 protected‑mode no #111行,允许远程连接 如果不设置密码必须将此设置关闭。

修改完成后,使用配置文件启动Redis,并使用redis-cli连接测试

复制代码

redis-server redis.conf redis-cli auth guslegend@666

退出OR关闭redis

复制代码

# 退出redis quit # 关闭redis redis-cli shutdown

主从部署

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(Slave);数据复制是单向的,只能从主节点到从节点。默认情况下。每台服务器都是主节点;且一个主节点可以有多个从节点,但一个从节点只能有一个主节点。

主从复制的作用

  1. 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式

  2. 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余

  3. 负载均衡:在主从复杂的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务,分担服务器负载;尤其是在写少读多情况下,通过多个从节点分担读负载,可以大大提高Redis服务器并发量

  4. 高可用基石:主从复制还是哨兵和集群能够实施的基础,因此说主从复制时Redis高可用的基础

主从复制部署

主节点不需要改变任何,而从节点都需要修改配置上加上主节点的信息,配置完成后,可以在主库检查重节点的信息

复制代码

# 添加主节点信息 replicaof 192.168.75.129 6379

复制代码

# 主节点查看从节点信息 info Replication

主从复制缺点

复制时,信号减弱:由于所有的写操作都是到主节点上操作,而同步更新到从节点上,所以从主节点同步到从节点,机器上有一定的延迟。当系统很繁忙时,延迟问题会加重,从节点机器数量的增加,也会导致这个问题更加严重。

主题点挂了怎么办?默认情况下,不会在从节点中自动选一个主节点,每次都要人工干预

哨兵部署

Redis的组成复制主要用于实现数据的备份和读分担,并不是为了提高高可用性。因此,在系统高可用方面,单纯的主从架构无法很好的保持整个系统的高可用

哨兵模式的原理

Redis哨兵模式是通过独立的哨兵节点上运行特定的哨兵进程来实现的。这些哨兵进程监控主从节点的状态,并在发现故障时自动完成故障,发现和转移并通知应用方实现高可用性

哨兵

在启动时,每个哨兵节点会执行选举过程,其中一个哨兵节点被选为leader,负责协调其他哨兵节点

选举过程:

每个在线的哨兵节点都可能成为leader。每个哨兵节点会向其他的哨兵发送is-master-down-by-addr,征求判断,并要求将自己设为leader,当其他哨兵收到此命令时,可以同意或者拒绝他成为leader,如果邵兵发现自己在选举的票数大于等于num/2+1,将成为leader,如果没有超过继续选举

监控主从节点:

哨兵节点通过发送命令周期性检查主从节点的健康状态,包括主节点是否在线,重节点是否同步的。如果哨兵节点发现主节点不可用,它会触发一次故障转移

故障转移:

一旦主节点被判定为不可用,哨兵节点会执行故障转移操作,它会从当前的从节点中选取一个新的主节点,并将其他的重节点切换到新的主节点,这样系统就可以继续提供服务,而不需要人工介入

故障转移过程:

Sentinel节点定期监控发现主节点是否出现了故障,Sentinel会向主节点发动心跳PING来确定主节点是否存活。如果一个主节点,在一定时间范围内都不回应PONG或者回复了一个错误消息。那么这个Sentinel就会主观的认为这个主节点已经不可用了

确认主节点:

  • 过滤掉不健康的,没有回复过哨兵ping响应的从结点

  • 选择从节点优先级最高的

  • 选择复制偏移量最大的,直至复制完整的从节点

  • 当主节点出现故障,由领导者负责处理主节点的故障转移

客户端重定向:

邵兵节点会通知客户端新的主节点的位置,使其能够与新的主节点建立连接并发送请求。这确保了客户端可以无缝切换到新的主节点继续进行操作

此外,哨兵节点还负责监控从节点的状态。如果重节点出现了故障,哨兵节点可以将其下键,并在从节点恢复正常后重新将其加入集群

哨兵模式部署

修改 sentinel.conf

复制代码

protected-mode no daemonize yes logfile /opt/software/redis/redis-stable/sentinel.log dir /opt/software/redis sentinel monitor mymaster 192.168.75.129 6379 2 sentinel down-after-milliseconds mymaster 30000 sentinel failover-timeout mymaster 180000

启动与查看

复制代码

redis-sentinel sentinel.conf redis-cli -p 26379 info sentinel

故障模拟

复制代码

# 关闭主节点 redis-cli shutdown# 查看日志tail -f sentinel.log # 重启原主节点 redis-server redis.conf

哨兵模式并不能保证数据零丢失

  1. 复制延迟:在主从复制中,同节点的数据是异步复制主节点的。这意味着主节点故障时,从节点可能还没有完全同步最新的数据,从而导致数据丢失

  2. 故障检查和转移时间:Sentinel检查到主节点故障并执行故障转移需要一定的时间,这段时间内,主节点可能已经接收了一些写操作,但是这些操作尚未被复制到从节点

  3. 网络分区:在发生网络分区的情况下,一部分节点可能与主节点失去联系。如果此时主节点继续处理操作,那么在网络恢复之前,这些操作可能不会被复制到从节点

  4. 多个从节点同时故障:如果所有的从节点同时故障或者故障转移之前与主节点失联,那么从节点故障时,将没有可用的从节点来提升为主节点

集群部署

三主三从架构

  1. 创建集群目录
复制代码

mkdir -p /opt/software/redis/redis-stable/cluster mkdir -p /opt/software/redis/cluster

  1. 集群配置(redis_6379.conf/redis_6380.conf)
复制代码

bind * -::* daemonize yes protected-mode no port 6379 cluster-enabled yes cluster-node-timeout 5000dir "/opt/software/redis/cluster" appendonly yes logfile "/opt/software/redis/redis-stable/cluster/redis6379.log" cluster-config-file nodes-6379.conf appendfilename "appendonly6379.aof" dbfilename "dump6379.rdb"

  1. 启动节点
复制代码

redis-server ./cluster/redis_6379.conf redis-server ./cluster/redis_6380.conf

  1. 创建集群
复制代码

redis-cli --cluster create --cluster-replicas 1 \192.168.75.129:6379 192.168.75.129:6380 \192.168.75.131:6379 192.168.75.131:6380 \192.168.75.132:6379 192.168.75.132:6380

  1. 集群操作
复制代码

# 查看集群信息 redis-cli cluster info # 查看节点 redis-cli cluster nodes # 带路由连接 redis-cli -c

  1. 故障转移模拟
复制代码

# 关闭主节点 redis-cli -p 6379 shutdown# 查看节点状态 redis-cli cluster nodes # 重启节点,自动变为从节点 redis-server ./cluster/redis_6379.conf

相关推荐
半夜修仙10 小时前
Redis中ZSet数据类型的常见命令
数据库·redis·缓存
毋语天10 小时前
FastAPI 终极实战:ORM 数据库、RESTful 设计、中间件与依赖注入
数据库·中间件·restful·fastapi
shuair10 小时前
redis红锁Redlock
数据库·redis·bootstrap
小新同学^O^10 小时前
简单学习 --> 限流和熔断
数据库·python·学习
专注API从业者10 小时前
用 Open Claw + 淘宝商品接口,快速实现电商商品监控与智能选品(附完整代码)
大数据·前端·数据结构·数据库
步十人10 小时前
【JWT】验证令牌的使用
前端·bootstrap·html
TDengine (老段)10 小时前
TDengine 虚拟表实现原理
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
吃好睡好便好10 小时前
用if…elseif…end语句输出成绩等级
开发语言·前端·javascript·数据库·学习·matlab·信息可视化
努力努力再努力wz10 小时前
【Redis入门系列】:Redis 内部编码机制与 String 深度解析:SDS 底层实现、三种编码与核心命令详解
c语言·开发语言·数据结构·数据库·c++·redis·缓存