Redis 单机、主从、哨兵和集群架构详解和搭建

目录

前言

单机部署

检查安装 gcc 环境

下载安装 Redis

启动 Redis

关闭 Redis

配置Redis

主从部署

整体架构图

主从复制配置

重启 Redis

验证

 主从复制的作⽤

主从复制缺点

哨兵部署(Sentinel)

整体架构图

哨兵模式配置

启动哨兵

 验证

哨兵模式的作用

集群部署(Cluster)

整体架构图

 集群模式配置

启动 Redis

创建集群模式

查看集群信息

总结


前言

本教程将演示在 linux 环境下安装 Redis7,给⼤家最简单,最快捷的安装⽅式,其中包括单机部署、主从部署、哨兵部署、集群 部署的安装以及相应的架构介绍。

单机部署

检查安装 gcc 环境

-- 检查版本
gcc --version
-- 安装 gcc
yum install gcc

下载安装 Redis

-- 创建目录,⽂件归类
mkdir -p /opt/software/redis-- 进⼊redis⽂件夹,使⽤wget下载
cd /opt/software/redis
wget https://download.redis.io/redis-stable.tar.gz-- 解压下载的redis包
tar -xzf redis-stable.tar.gz-- 进⼊redis-stable⽬录,然后使⽤make install 编译并安装,安装完成后 /usr/local/bin 会⽣成相应的服务
cd redis-stable
make install-- 检查是否成功⽣成
ll /usr/local/bin

38da801e7aeb4bf686c88f845cce3cb9.png

 文件介绍:

  • redis-benchmark:性能测试⼯具
  • redis-check-aof:修复有问题的 aof ⽂件
  • redis-check-rdb:修复有问题的rdb⽂件
  • redis-sentinel:Redis集群使⽤
  • redis-server:Redis服务器启动命令
  • redis-cli:客户端,操作⼊⼝

启动 Redis

        在/opt/software/redis/redisstable/src 或者 /usr/local/bin ⽬录下的 redis-server 启动

Redis 服务.
-- Redis 源码路径下启动
./src/redis-server
-- 使⽤usr/local/bin 路径下启动(该⽬录下或者不在该目录下也可以启动)
redis-server

关闭 Redis

-- 退出 redis客户端
quit
或
ctrl + c-- 关闭 redis
redis-cli shutdown

547a62b8e49a4b9b8c1726f1551ebf2b.png

配置Redis

前⾯的启动⽅式⽆法再后台运⾏,退出之后直接关闭了 Redis 服务,所以我们还需要针对 Redis 做⼀些设置。
-- 修改当前Redis⽬录下/opt/software/redis/redis-stable的 Reids.conf ⽂件
vi redis.conf

52a50115733747a6937e3df287cf4e49.png

如果想配置显示出行号,则可以 在打开 vim 后输⼊:“:set number ” 。
9b65c94014db4726838e0fb20354c0be.png

 配置如下:

#88⾏,修改bind 项,* -::* ⽀持远程连接
bind * -::* #310⾏,开启守护进程,后台运⾏
daemonize yes #356⾏,指定⽇志⽂件⽬录
logfile /opt/software/redis/redis-stable/redis.log #516⾏,指定⼯作⽬录
dir /opt/software/redis #1051⾏,给默认⽤户设置密码,主要是使⽤ redis-cli 连接 redis-server时,需要通过密码校验。⾃⾏学习,可以不设置。
#requirepass admin #112⾏,允许远程连接 如果不设置密码必须讲此设置关闭。
protected-mode no 
修改完成后,使⽤配置⽂件启动 Redis,并使⽤ redis-cli 连接测试,需要注意由于前⾯我们配置了安全密码,所以连接后需要先验证密码,否则会报错。
#根据redis配置,启动redis
redis-server redis.conf#连接 redis
redis-cli#如果设置密码,则需要验证权限
auth admin

00884d26bd5547238fbd5deee7b97afe.png

主从部署

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

整体架构图

9a27b3a2c2b9414fa29529e14a047ab2.png

主从复制配置

主节点不需要做任何改变,从节点都需要修改配置加上主节点信息
修改redis 配置文件
vi  redis.conf# 从节点都添加主节点信息
replicaof 192.168.18.201 6379

重启 Redis

#如果启动了,就先关闭
redis-cli shutdown#启动
redis-server redis.conf

验证

验证主从复制是否配置成功,使用以下命令, 查看redis 节点信息.

redis-cli info Replication

6ba8d23aaa0d4060a1006c2aaa31cad1.png

 主从复制的作⽤

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

主从复制缺点

  • 复制延时,信号衰减
由于所有的写操作都是现在master上操作,然后同步更新 到slave上,所以从master同步到slave机器上有⼀定的延迟, 当系统很繁忙的时候,延迟问题会更加严重,slave机器数量的增加也会使这个问题更加严重。
  • master挂了如何办?
默认情况下,不会在slave节点中⾃动重选⼀个master,每 次都要⼈⼯⼲预。

哨兵部署(Sentinel)

       Redis主从复制会遇到一些限制和弊端,主机宕机之后,整个redis服务只能读不能写。为了解决这些问题,Redis引入了哨兵模式。

        Redis 哨兵模式是一种用于构建高可用性 Redis 集群的解决方案。它通过监控 Redis 实例的状态并自动进行故障转移,提供了客户端重定向机制以确保应用程序可以正常访问 Redis。

整体架构图

a8f24d0af82d454fb4828ac4f13e2147.png

哨兵模式配置

3 个机器都需要修改 sentinel.conf 配置,配置完成之后先从主节点开始启动哨兵。
#6⾏,关闭保护模式
protected-mode no #15⾏,指定sentinel为后台启动
daemonize yes #34⾏,指定⽇志存放路径
logfile /opt/software/redis/redis-stable/sentinel.log #73⾏,指定数据库存放路径
dir /opt/software/redis #93⾏,修改 指定该哨兵节点监控20.0.0.20:6379这个主节点,该主节点的名称是mymaster,最后的2的含义#与主节点的故障判定有关:⾄少需要2个哨兵节点同意,才能判定主节点故障并进⾏故障转移
sentinel monitor mymaster 192.168.18.201 6379 2#134⾏,判定服务器down掉的时间周期,默认30000毫秒(30秒)
sentinel down-after-milliseconds mymaster 30000#234⾏,故障节点的最⼤超时时间为180000(180秒)
sentinel failover-timeout mymaster 180000 

注意: 哨兵的端口是 26379 , 防火墙需要开放端口.

启动哨兵

redis-sentinel sentinel.conf 
启动后检查哨兵状态
redis-cli -p 26379 info sentinel

113330a098544e60be5b83074027d885.png

 验证

故障模拟
-- 直接停掉主节点服务
redis-cli shutdown-- 观察哨兵⽇志,主节点下线,重新选举另一个节点为主节点
tail -f sentinel.log

3f76c5cf8b0b4a0092ca8459b4b66912.png

 在另一台以前是从节点的服务器查询, 发现切换成主节点了

redis-cli info replication

41c8dad27e5b45d48adad9bbccb80e01.png

 拓展命令:

-- 停⽌哨兵
redis-cli -p 26379 shutdown

哨兵模式的作用

  •     主从监控:监控reids主从是否正常运行
  •     消息通知:哨兵可以将故障转移的结果发送给客户端
  •     故障转移:如果Master异常,则会进行主从切换,将其中一个Slave作为新的Master
  •     配置中心:客户端通过连接哨兵来获得当前Redis服务的主节点地址

集群部署(Cluster)

        哨兵模式仍然面临内存容量和写入性能的限制,因为这种模式的写入能力仍然局限于单个节点。为了解决这一问题,Redis在3.x版本之后推出了Cluster集群模式。Cluster模式通过数据分片和节点的水平扩展,实现了更高效的内存利用和写入性能。

整体架构图

d71f1933e2324e33b5d6141c6bf149bc.png

 集群模式配置

三主三从模式配置

-- 创建集群配置⽂件夹,另外两个机器重复这个过程
mkdir -p /opt/software/redis/redis-stable/cluster
mkdir -p /opt/software/redis/cluster

6379 配置

vim ./cluster/redis_6379.conf

将下面内容复制进redis_6379.conf文件

# 允许所有的IP地址
bind * -::*
# 后台运⾏
daemonize yes
# 允许远程连接
protected-mode no
# 开启集群模式
cluster-enabled yes
# 集群节点超时时间
cluster-node-timeout 5000
# 配置数据存储⽬录
dir "/opt/software/redis/cluster"
# 开启AOF持久化
appendonly yes
# 端⼝
port 6379
# log⽇志
logfile "/opt/software/redis/redis-stable/cluste
r/redis6379.log"
# 集群配置⽂件
cluster-config-file nodes-6379.conf
# AOF⽂件名
appendfilename "appendonly6379.aof"
# RBD⽂件名
dbfilename "dump6379.rdb"

6380 配置

vim ./cluster/redis_6380.conf

将下面内容复制进redis_6380.conf文件

# 允许所有的IP地址
bind * -::*
# 后台运⾏
daemonize yes
# 允许远程连接
protected-mode no
# 开启集群模式
cluster-enabled yes
# 集群节点超时时间
cluster-node-timeout 5000
# 配置数据存储⽬录
dir "/opt/software/redis/cluster"
# 开启AOF持久化
appendonly yes
# 端⼝
port 6380
# log⽇志
logfile "/opt/software/redis/redis-stable/cluste
r/redis6380.log"
# 集群配置⽂件
cluster-config-file nodes-6380.conf
# AOF⽂件名
appendfilename "appendonly6380.aof"
# RBD⽂件名
dbfilename "dump6380.rdb"

启动 Redis

配置⽂件准备完成之后,启动所有redis服务,⽤cluster配置⽂件
redis-server ./cluster/redis_6379.conf
redis-server ./cluster/redis_6380.conf

其他两台机器重复上面的操作.

注意: 启动 redis 时, 要注意 以前启动的redis和哨兵需要关闭

# 查看运行中的进程信息
netstat -ntlp

86907b29300b433eae5def167d9fd1e4.png

 然后使用kill  pid 命令删除这个进程

#关闭哨兵
kill 29733
#关闭redis
kill 20317

创建集群模式

当三台机器的6台redis都启动完成, 则使用以下命令,创建集群.

-- 创建三主三从集群模式,每⼀个主节点带⼀个从节点
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 info replication
-- 查看集群节点身份信息
redis-cli cluster nodes

注意: 集群用到的端口会加10000,所以16379和16380 端口的防火墙也要开放.

总结

edis主从:可实现高并发(读),典型部署方案:一主二从

redis哨兵:可实现高可用,典型部署方案:一主二从三哨兵

redis集群:可同时支持高可用(读与写)、高并发,典型部署方案:三主三从

三者之间对比:

217df879980a44e5a07a46eb51944a2b.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/56848.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL-32.索引-操作语法

一.语法 二.代码实现 指定某个字段为主键,其实就是建立一个主键索引。而指定某个字段唯一,就是建立一个唯一索引。 -- 索引 -- 创建:为tb_emp表的name字段建立一个索引 create index idx_emp_name on tb_emp(name);-- 查询:查…

【智能大数据分析 | 实验四】Spark实验:Spark Streaming

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘,以提取有价值的信息和洞察。它结合了大数据技术、人工智能(AI)、机器学习(ML&a…

基于java的山区环境监督管理系统(源码+定制+开发)环境数据可视化、环境数据监测、 环境保护管理 、污染防治监测系统 大数据分析

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

《Python游戏编程入门》注-第3章3

《Python游戏编程入门》的“3.2.4 Mad Lib”中介绍了一个名为“Mad Lib”游戏的编写方法。 1 游戏玩法 “Mad Lib”游戏由玩家根据提示输入一些信息,例如男人姓名、女人姓名、喜欢的食物以及太空船的名字等。游戏根据玩家输入的信息编写出一个故事,如图…

Postgresql 配置数据库表添加主键自增id

#1024程序员节|征文# 在 PostgreSQL 数据库中,如果你想创建一个自增的 ID 字段,通常会使用序列(sequence)配合默认值或者使用带有自动递增特性的 SERIAL 类型。以下是两种常见的方法来实现自增 ID: 使用 …

图论BFS

 D1. The Endspeaker (Easy Version) time limit per test 2 seconds memory limit per test 256 megabytes  This is the easy version of this problem. The only difference is that you only need to output the minimum total cost of operations in t…

Docker 部署 Jaeger

Jaeger 的主要作用如下: 分布式追踪 Jaeger 是一个开源的分布式追踪系统,用于监控和排查微服务架构中的复杂问题。它可以跟踪请求在不同服务之间的传播路径,帮助开发者理解系统中各个组件之间的调用关系。 性能分析 通过收集和分析请求的执行…

基于Gin和GORM的在线判题系统后端

项目地址:基于Gin和GORM的在线判题系统后端 一、开发环境与API测试工具 开发环境 Go1.23,VSCode,Gin框架,GORM框架 gin-swagger swagger是一个用于描述和文档化 RESTful API 的开源工具,它可以帮助开发者生成交互式文档,并且…

【C++】—— 模板进阶

【C】—— 模板进阶 1 非类型模板参数1.1 什么是非类型模板参数1.2 非类型模板参数对比宏的优势1.3 array 简单了解 2 模板的特化2.1 引子2.2 函数模板特化2.3 函数模板特化的坑2.4 类模板的特化2.4.1 全特化2.4.2 偏特化(半特化)2.4.3 选择2.4.4 偏特化…

Conda 安装与使用指南

Conda 是一个开源的软件包管理和环境管理系统,主要解决一个系统上同时要使用python2,python3等等多个python环境的切换问题,支持多种编程语言(如 Python、R 等),可以在 Windows、macOS 和 Linux 上运行。它…

Java最全面试题->Java基础面试题->JavaEE面试题->Web应用服务器面试题

文章目录 Web应用服务器面试题Tomcat是什么?Tomcat缺省端口是多少,如何修改?Tomcat 有那几种Connector 运行模式?什么是Servlet?Servlet请求过程?Tomcat执行流程?Tomcat部署方式?什么是JBoss ?在JBoss 7…

C++的const关键字

在 C 中,const 关键字用于声明常量,表示某个变量或对象的值在初始化后不可改变。const 可以应用于多种上下文,包括变量、函数参数、成员函数和指针等。下面详细介绍 const 的各种用法: 1. 常量变量 const 可以用来声明常量变量&…

FPGA搭建PCIE3.0通信架构简单读写测试,基于XDMA中断模式,提供3套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案本博客方案的PCIE2.0版本 3、PCIE基础知识4、工程详细设计方案工程设计原理框图XDMA配置及使用XDMA中断模块数据缓存架构用户逻辑Windows版本XDMA驱动安装Linux版本XDMA驱动安装测试应用程序工程源码架构PCIE上板…

ICM20948 DMP代码详解(100)

接前一篇文章:ICM20948 DMP代码详解(99) 上一回解析到inv_set_hw_smplrt_dmp_odrs函数的以下代码片段: // switch between low power and low noise at 500Hz boundaryif (minDly != 0xFFFF) {// above 500Hz boundary, force LN modeif (minDly==1) {if (s->base_state…

实测体验Claude 3.5升级版:AI首次实现直接操控电脑!

前言 就在10月22日晚上,Anthropic发布重大升级,发布Claude 3.5 Sonnet和Claude 3.5 Haiku新版本。 新的 Claude 3.5 Sonnet 在所有指标上都优于其他模型,包括 OpenAI 的 GPT-4 和谷歌的 Gemini 1.5 Pro。 Claude 3.5 Haiku 与之前的顶级 C…

【C++开篇】

首先初阶的数据结构相信大家已经学习的差不多了,关于初阶数据结构排序的相关内容的总结随后我也会给大家分享出来。C语言和C有许多相同的地方,但也有许多不相同的地方。接下来的C部分,我们主要是针对C与C语言不同的地方来与大家进行分享。其中…

gin入门教程(7): 使用 Logrus + Lumberjack 创建日志中间件

结合 Logrus 和 Lumberjack,可以创建一个高效的日志中间件,用于记录请求和响应。以下是实现步骤: 1. 安装依赖 首先,确保安装了 Logrus 和 Lumberjack: go get github.com/sirupsen/logrus go get gopkg.in/natefin…

基于vite和vue3、 eslint、prettier、stylelint、husky规范

前言 在现代的前端开发中,代码规范非常重要。它可以提高团队的协作效率,减少代码错误,使代码更易于维护。为了实现代码规范化,我们可以使用一些工具来辅助我们的开发流程,包括eslint、prettier、stylelint、husky&am…

数据库表字段插入bug

瀚高数据库 目录 环境 BUG/漏洞编码 症状 触发条件 解决方案 环境 系统平台:Linux x86-64 Red Hat Enterprise Linux 7 版本:4.5.1 BUG/漏洞编码 3355 症状 数据库安全版v4.5.1,安装包为:hgdb4.5.1-see-centos7-x86-64-20210804.…

word中的内容旋转90度

在vsto、Aspose.Words 中,默认没有直接的 API 可以让表格整体旋转 90 度。然而,我们可以通过一些方式来实现类似的效果,具体思路如下: 将表格插入到一个形状(Shape)或文本框中,然后旋转该形状。…