这个教程会演示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);数据复制是单向的,只能从主节点到从节点。默认情况下。每台服务器都是主节点;且一个主节点可以有多个从节点,但一个从节点只能有一个主节点。
主从复制的作用
-
数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式
-
故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余
-
负载均衡:在主从复杂的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务,分担服务器负载;尤其是在写少读多情况下,通过多个从节点分担读负载,可以大大提高Redis服务器并发量
-
高可用基石:主从复制还是哨兵和集群能够实施的基础,因此说主从复制时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
哨兵模式并不能保证数据零丢失
-
复制延迟:在主从复制中,同节点的数据是异步复制主节点的。这意味着主节点故障时,从节点可能还没有完全同步最新的数据,从而导致数据丢失
-
故障检查和转移时间:Sentinel检查到主节点故障并执行故障转移需要一定的时间,这段时间内,主节点可能已经接收了一些写操作,但是这些操作尚未被复制到从节点
-
网络分区:在发生网络分区的情况下,一部分节点可能与主节点失去联系。如果此时主节点继续处理操作,那么在网络恢复之前,这些操作可能不会被复制到从节点
-
多个从节点同时故障:如果所有的从节点同时故障或者故障转移之前与主节点失联,那么从节点故障时,将没有可用的从节点来提升为主节点
集群部署

三主三从架构
- 创建集群目录
mkdir -p /opt/software/redis/redis-stable/cluster mkdir -p /opt/software/redis/cluster
- 集群配置(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"
- 启动节点
redis-server ./cluster/redis_6379.conf redis-server ./cluster/redis_6380.conf
- 创建集群
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
- 集群操作
# 查看集群信息 redis-cli cluster info # 查看节点 redis-cli cluster nodes # 带路由连接 redis-cli -c
- 故障转移模拟
# 关闭主节点 redis-cli -p 6379 shutdown# 查看节点状态 redis-cli cluster nodes # 重启节点,自动变为从节点 redis-server ./cluster/redis_6379.conf