首页 > 数据库 >Redis(2):四种模式(单机、哨兵、集群、主从复制)部署

Redis(2):四种模式(单机、哨兵、集群、主从复制)部署

时间:2023-08-15 17:56:30浏览次数:53  
标签:主从复制 单机 Redis redis 192.168 哨兵 6379 conf 节点

学习自:Redis 的四种模式 - 何童鞋 - 博客园

深入理解Redis的部署模式四种模式的探索(redis部署四种模式)-数据库运维技术服务

redis部署和运行原理 redis的三种部署方式_小咪咪的技术博客_51CTO博客

上一节:Redis(1):四种模式(单机、哨兵、集群、主从复制)原理

0、所写

m:master,主服务器

s:slave,从服务器

1、单机模式

学习自:redis部署和运行原理 redis的三种部署方式_小咪咪的技术博客_51CTO博客

数据库部署在一台服务器上,只有一个redis服务实例

当安装部署了一个Redis后,默认模式就是单机模式。

redis-server & /usr/local/redis/redis-6.2.13/redis.conf

这种模式下,redis服务器的IP和端口默认为127.0.0.1和6379。

也可以定制IP和端口:

redis-cli -h IP地址 -p 端口

 

此时可以用redis-cli去进行一些指令,验证redis服务器是否连接成功:

ping:检测连接

127.0.0.1:6379> ping // 检测连接是不是好的
PONG
127.0.0.1:6379> ping "hello the world" // 也可以发送指定消息
"hello the world"

set、get:存取K-V对

127.0.0.1:6379> set key1 value1
OK
127.0.0.1:6379> get key1
"value1"
127.0.0.1:6379>  ttl key1
(integer) -1
127.0.0.1:6379> set key1 value1 EX 1000
OK
127.0.0.1:6379> get key1
"value1"
127.0.0.1:6379> ttl key1
(integer) 990
127.0.0.1:6379> ttl key1
(integer) 984
127.0.0.1:6379> del key1
(integer) 1
127.0.0.1:6379> get key1

备注: 其他命令实际操作,可以参考:http://redisdoc.com/

 

2、主从复制模式

学习自:Redis(主从复制、哨兵模式、集群)概述及部署_redis主从模式部署_超级驼鹿️的博客-CSDN博客(主要)

Redis 主从模式部署步骤(参考)

服务器部署在多台服务器上,形成m和s的结构。

m承担所有客户端请求处理所有数据备份的任务;s只负责备份数据不处理客户端请求。

实现

现在有3台机器(为了保证主从,这三台机器必须是同一个网段,相互可以连通):

192.168.10.11 #s
192.168.10.12 #s
192.168.10.20 #m

默认s和m上都已经安装了redis

1、在m上修改配置文件redis.conf

vim /usr/local/redis/conf/redis.conf
bind 0.0.0.0                       #监听地址 0.0.0.0
protected-mode no                    #本机访问保护模式 no
port 6379                            #监听6379端口
daemonize yes                        #设置为守护进程,后台启动
pidfile /usr/local/redis/log/redis_6379.pid     #PID 文件
logfile "/usr/local/redis/log/redis_6379.log"   #日志文件
dir /usr/local/redis/data                       #指定持久化文件所在目录
requirepass Wrt65536                             #可选,设置redis密码
appendonly yes                                  #开启AOF

2、在s上修改redis.conf

vim /usr/local/redis/conf/redis.conf
bind 0.0.0.0                       #监听地址 0.0.0.0
protected-mode no                    #本机访问保护模式 no
port 6379                            #监听6379端口
daemonize yes                        #设置为守护进程,后台启动
pidfile /usr/local/redis/log/redis_6379.pid     #PID 文件
logfile "/usr/local/redis/log/redis_6379.log"   #日志文件
dir /usr/local/redis/data                       #指定持久化文件所在目录
requirepass Wrt65536                            #可选,设置redis密码
appendonly yes                                  #开启AOF
#相比m的附加项
replicaof 192.168.10.20 6379            #指定要同步的m节点的ip和端口
masterauth Wrt65536                  #指定m的密码,仅在m节点设置了requirepass时起作用

3、启动s和m上的redis

sudo redis-server /路径/redis.conf &

4、验证主从关系

在master上添加K-V对

redis-cli -h 192.168.10.20 -p 6379 -a Wrt65536

在两台slave上查看K(这里我为了方便,将三台机器的密码设为统一了)

redis-cli -h 192.168.10.11 -p 6379 -a Wrt65536
redis-cli -h 192.168.10.12 -p 6379 -a Wrt65536

 

3、哨兵模式

学习自:Redis哨兵模式

redis哨兵模式来进行主从替换以及故障恢复_redis 主服务恢复后依然是主服务_Rapig1的博客-CSDN博客

主从复制的基础上,哨兵模式引入了主节点的自动故障转移。

1)实现之前,注意事项

  • m+s数量≥3;
  • 哨兵集群中的机器数量为奇数;

2)实现原理图

3)哨兵模式作用

①监控

监控m和s节点是否正常工作;

②自动故障转移

当m不工作时,哨兵自动开始故障转移,将失效m中的一个s升级为m,并让其他s从新m复制

③通知

将故障转移结果告知client

4)结构

哨兵节点:由一个或多个哨兵节点组成

数据节点:m和s节点

5)故障转移机制

①定期检测,哨兵每1s向m、s、其他哨兵发送一次ping心跳检测。如果m在一段时间内不回复或错误回复,该哨兵会认为这个节点主观下线超半数哨兵认为主观下线,则变为客观下线

②当m故障,哨兵通过Raft算法(选举算法)共同选举出一个哨兵leader,来处理主节点的故障转移和通知。所以哨兵集群中节点≥3。

③由leader执行故障转移:

  • 将某个s升级为m,让其他s指向新m;
  • 若原m恢复,也变为s并指向新m;
  • 通知client更换了m。

注意,下线是单纯针对m才有的概念,对s、哨兵不会有后续。

m的选举

1.过滤掉不健康的(已下线的),没有回复哨兵 ping 响应的从节点。
2.选择配置文件中从节点优先级配置最高的。(replica-priority,默认值为100)
3.选择复制偏移量最大,也就是复制最完整的从节点。

6)实现

哨兵的实现依赖于主从模式,所以在做哨兵模式前要先做主从模式。

①基于第2节的主从复制,已经搭建完3台redis服务器

主机IP地址
Master 192.168.10.20
Slave1 192.168.10.11
Slave2 192.168.10.12

②修改redis配置文件(所有主机)

systemctl stop firewalld #关闭firewalld防火墙
setenforce 0 #关闭selinux防火墙

vim /usr/local/redis/redis-6.2.13/sentinel.conf
protected-mode no                                #17行,关闭保护模式
port 26379                                        #21行,Redis哨兵默认的监听端口
daemonize yes                                    #26行,指定sentinel为后台启动
pidfile /usr/local/redis/log/sentinel.pid
logfile "/usr/local/redis/log/sentinel.log" #36行,指定日志存放路径 dir dir /usr/local/redis/6379 #65行,指定数据库存放路径
#84行,指定该哨兵节点监控192.168.10.20:6379这个主节点,该主节点的名称是mymaster,
#最后的2的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移
sentinel monitor mymaster 192.168.10.20 6379 2

#这两项一开始是注释掉的,需要手动添加
#113行,判定服务器down掉的时间周期,默认3000毫秒(3秒) sentinel down-after-milliseconds mymaster 3000
#146行,故障节点的最大超时时间为1800毫秒(1.8秒) sentinel failover-timeout mymaster 1800

#如果接入外界的网络是NAT,那么还要设置下边两项
sentinel announce-ip 本机ip
sentinel announce-port 26379

要确保这里写的所有目录(比如log,6379)都是存在的,如果不存在需要先去新建

③启动哨兵模式:先m后s

redis-sentinel sentinel.conf &

注意:

  • 这里是哨兵的启动过程,在此之前要先启动m和s上的redis服务
    redis-server redis.conf &
  • 这里是redis-sentinel sentinel.conf而不是redis-server redis.conf
  • 先m后s,共启动3次(有多少台启动多少次)

④故障模拟

在m上执行如下指令:

  • 先用ps -ef查询redis-server的进程号
  • kill该redis-server进程(注意是server不是sentinel)
  • 查看日志 

日志显示切换成功

⑤验证

在已经成为master的主机192.168.10.12上,设置新的K-V对:

在另一台slave上查看结果

 

4、集群模式

本节学习自:三、Redis 集群模式

数据库部署在一组Redis实例,形成一个相互关联的集群。它支持多个客户端同时连接多台服务器,实现真正的分布式系统,可以更好地满足大型系统的高可用性和高吞吐性要求。

redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 15000

 

 5、注意事项

redis启动方式为:redis-server 路径/redis.conf &,符号&必须放在conf文件之后,不然会导致conf文件读取失效

设置了masterauth之后,s在登录时不会用到该密码,登录时的-a密码还是它自己的requirepass

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  [root@localhost bin]# redis-cli -h 192.168.10.12 -p 6379

标签:主从复制,单机,Redis,redis,192.168,哨兵,6379,conf,节点
From: https://www.cnblogs.com/ShineLeBlog/p/17629164.html

相关文章

  • nacos 单机3节点 集群env
     集群中包含3个NacosServer节点,两个Proxy主备节点,Mysql数据库主备这里仅记录Nacos的安装Nacos节点服务器节点IP端口Nacos1172.17.10.218858(默认8848)Nacos1172.17.10.228858(默认8848)Nacos1172.17.10.238858(默认8848)Nacos集群配置安装JAVA环......
  • Linux的Redis安装部署
    简介redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。redis的特点就是:快,可以基于内存存储数据并提供超低延迟、超快的检索速度一般用于在系统中提供快速缓存的能力。安装配置EPEL仓库EPEL的全称叫ExtraPackagesforEnt......
  • redis cluster查询过期key
    redis以前也就部署好没管过,这次用的云上的rediscluster,程序没有设置过期时间,所以要求手动去删除key。按以前的习惯redis-cli登录keys*查询不行,原来cluster下key是存在不同的slot下的,要去每个slot下找#查看cluster信息,特别是cluster_slots_ok的数量clusterinfocluster的slot是从......
  • Redis专题-队列
    Redis专题-队列首先,想一想Redis适合做消息队列吗?1、消息队列的消息存取需求是什么?redis中的解决方案是什么?无非就是下面这几点:0、数据可以顺序读取1、支持阻塞等待拉取消息2、支持发布/订阅模式3、重新消费4、消息不丢失5、消息可堆积那我们来看看redis怎么满足这些需......
  • SpringBoot3集成Redis
    目录一、简介二、工程搭建1、工程结构2、依赖管理3、Redis配置三、Redis用法1、环境搭建2、数据类型3、加锁机制四、Mybatis缓存1、基础配置2、自定义实现五、参考源码标签:Redis.Mybatis.Lock;一、简介缓存在项目开发中,基本上是必选组件之一,Redis作为一个key-value存储系统,具......
  • 虹科干货 | 化身向量数据库的Redis Enterprise——快速、准确、高效的非结构化数据
    用户期望在他们遇到的每一个应用程序和网站都有搜索功能。然而,超过80%的商业数据是非结构化的,以文本、图像、音频、视频或其他格式存储。RedisEnterprise如何实现矢量相似性搜索呢?答案是,将AI驱动的搜索功能集成到RedisEnterprise中,以实现矢量相似性搜索。 RedisEnterprise如何......
  • centos 7安装redis
    您好,这是在CentOS7上安装Redis的详细指南1:安装依赖项:Redis是用C语言开发的,因此在安装之前,您必须确保服务器已经安装了gcc。您可以通过以下命令检查机器是否安装:gcc-v。如果没有安装,您可以通过以下命令安装:yuminstall-ygcc。下载Redis安装包并解压缩:wgethttps://downlo......
  • redis查询 第1个数据库,而不是默认的第0个数据库
    redis查询第1个数据库,而不是默认的第0个数据库 spring.redis.database=1默认:spring.redis.database=0car-test:0>getcar:info:detail:id001NULL##切换数据库car-test:0>select1OKcar-test:1>getcar:info:detail:id001{"id":444186}car-test:1>redis有......
  • redis数据结构字典
    redis数据结构字典数据结构Redis的字典使用哈希表作为底层实现,一个哈希表里面可以有多个哈希表节点,而每个哈希表节点就保存了字典中的一个键值对。哈希表typedefstructdictht{//哈希表数组dictEntry**table;//哈希表大小unsignedlongsize;//哈希表大小掩码,用于......
  • redis数据结构链表
    redis数据结构链表数据结构链表节点typedefstructlistNode{//前置节点structlistNode*prev;//后置节点structlistNode*next;//节点的值void*value;}listNode;多个listNode可以通过prev和next指针组成双端链表链表typedefstructlist{//表头节点......