Redis(主从复制、哨兵模式、集群)概述及部署测试

news2024/9/21 8:35:40

目录

一、Redis 主从复制

1.1、Redis 主从复制概念

1.2、主从复制的作用

1.3、主从复制流程

1.4、搭建Redis 主从复制

二、Redis 哨兵模式

2.1、Redis 哨兵模式概念

2.2、哨兵模式原理

2.3、哨兵模式的作用

2.4、哨兵模式的结构

2.5、故障转移机制

2.6、主节点的选举

2.7、搭建Redis 哨兵模式

三、Redis 群集模式

3.1、集群的作用

3.2、集群模式的数据分片

3.3、Redis集群的主从复制模型

3.5、搭建Redis 群集模式

 开启群集功能

 启动redis节点

启动集群

测试群集


一、Redis 主从复制

1.1、Redis 主从复制概念

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。

默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。

1.2、主从复制的作用

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

1.3、主从复制流程

1、若启动一个Slave机器进程,则它会向Master机器发送一个“sync command”命令,请求同步连接。
2、无论是第一次连接还是重新连接,Master机器都会启动一个后台进程,将数据快照保存到数据文件中(执行rdb操作),同时Master还会记录修改数据的所有命令并缓存在数据文件中。
3、后台进程完成缓存操作之后,Master机器就会向Slave机器发送数据文件,Slave端机器将数据文件保存到硬盘上,然后将其加载到内存中,接着Master机器就会将修改数据的所有操作一并发送给Slave端机器。若Slave出现故障导致宕机,则恢复正常后会自动重新连接。
3、Master机器收到Slave端机器的连接后,将其完整的数据文件发送给Slave端机器,如果Mater同时收到多个Slave发来的同步请求,则Master会在后台启动一个进程以保存数据文件,然后将其发送给所有的Slave端机器,确保所有的Slave端机器都正常。

1.4、搭建Redis 主从复制

主机IP地址
Master节点192.168.20.16
Slave1节点192.168.20.17
Slave2节点192.168.20.11
systemctl stop firewalld
setenforce 0

安装 Redis
yum install -y gcc gcc-c++ make

tar zxvf redis-5.0.7.tar.gz -C /opt/

cd /opt/redis-5.0.7/
make
make PREFIX=/usr/local/redis install

cd /opt/redis-5.0.7/utils
./install_server.sh
......
Please select the redis executable path [/usr/local/bin/redis-server] /usr/local/redis/bin/redis-server  	

ln -s /usr/local/redis/bin/* /usr/local/bin/
修改 Redis 配置文件(Master节点操作)

vim /etc/redis/6379.conf   redis.conf
bind 0.0.0.0						#70行,修改监听地址为0.0.0.0
daemonize yes						#137行,开启守护进程
logfile /var/log/redis_6379.log		#172行,指定日志文件目录
dir /var/lib/redis/6379				#264行,指定工作目录
appendonly yes						#700行,开启AOF持久化功能


/etc/init.d/redis_6379 restart


修改 Redis 配置文件(Slave节点操作)-----
vim /etc/redis/6379.conf
bind 0.0.0.0						#70行,修改监听地址为0.0.0.0
daemonize yes						#137行,开启守护进程
logfile /var/log/redis_6379.log		#172行,指定日志文件目录
dir /var/lib/redis/6379				#264行,指定工作目录		
replicaof 192.168.10.23 6379        #288行,指定要同步的Master节点IP和端口
appendonly yes						#700行,开启AOF持久化功能


/etc/init.d/redis_6379 restart

验证主从效果-----
在Master节点上看日志:
tail -f /var/log/redis_6379.log 
Replica 192.168.10.14:6379 asks for synchronization
Replica 192.168.10.15:6379 asks for synchronization

在Master节点上验证从节点:
redis-cli info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.10.14,port=6379,state=online,offset=1246,lag=0
slave1:ip=192.168.10.15,port=6379,state=online,offset=1246,lag=1

 

二、Redis 哨兵模式

2.1、Redis 哨兵模式概念

主从切换技术的方法是:当服务器宕机后,需要手动一台从机切换为主机,这需要人工干预,不仅费时费力而且还会造成一段时间内服务不可用。为了解决主从复制的缺点,就有了哨兵机制。

哨兵的核心功能:在主从复制的基础上,哨兵引入了主节点的自动故障转移。

2.2、哨兵模式原理

哨兵(sentinel):是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的 Master并将所有slave连接到新的 Master。所以整个运行哨兵的集群的数量不得少于3个节点。

2.3、哨兵模式的作用

1、监控:哨兵会不断地检查主节点和从节点是否运作正常。

2、自动故障转移:当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其它从节点改为复制新的主节点。

3、通知(提醒):哨兵可以将故障转移的结果发送给客户端。

2.4、哨兵模式的结构

哨兵结构由两部分组成,哨兵节点和数据节点:
1、哨兵节点:哨兵系统由一个或多个哨兵节点组成,哨兵节点是特殊的redis节点,不存储数据。
2、数据节点:主节点和从节点都是数据节点。

详细解释哨兵模式:

1、哨兵的启动依赖于主从模式,所以须把主从模式安装好的情况下再去做哨兵模式,

2、所有节点上都需要部署哨兵模式,哨兵模式会监控所有的Redis 工作节点是否正常,

3、当Master 出现问题的时候,因为其他节点与主节点失去联系,因此会投票,

4、投票过半就认为这个 Master 的确出现问题,然后会通知哨兵间,

5、然后从Slaves中选取一个作为新的 Master。

2.5、故障转移机制

1、由哨兵节点定期监控发现主节点是否出现了故障
每个哨兵节点每隔1秒会向主节点、从节点及其它哨兵节点发送一次ping命令做一次心跳检测。如果主节点在一定时间范围内不回复或者是回复一个错误消息,那么这个哨兵就会认为这个主节点主观下线了(单方面的)。当超过半数哨兵节点认为该主节点主观下线了,这样就客观下线了。

2、当主节点出现故障,此时哨兵节点会通过Raft算法(选举算法)实现选举机制共同选举出一个哨兵节点为leader,来负责处理主节点的故障转移和通知。所以整个运行哨兵的集群的数量不得少于3个节点。

3、由leader哨兵节点执行故障转移,过程如下:

将某一个从节点升级为新的主节点,让其它从节点指向新的主节点;
若原主节点恢复也变成从节点,并指向新的主节点;
通知客户端主节点已经更换。

需要特别注意的是,客观下线是主节点才有的概念;如果从节点和哨兵节点发生故障,被哨兵主观下线后,不会再有后续的客观下线和故障转移操作。

2.6、主节点的选举

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

2.7、搭建Redis 哨兵模式

哨兵的启动依赖于主从模式,所以须把主从模式安装好的情况下再去做哨兵模式

主机IP地址
Master节点192.168.20.16
Slave1节点192.168.20.17
Slave2节点192.168.20.11
修改 Redis 哨兵模式的配置文件(所有节点操作)

vim /opt/redis-5.0.7/sentinel.conf
protected-mode no								#17行,关闭保护模式
port 26379										#21行,Redis哨兵默认的监听端口
daemonize yes									#26行,指定sentinel为后台启动
logfile "/var/log/sentinel.log"					#36行,指定日志存放路径
dir "/var/lib/redis/6379"						#65行,指定数据库存放路径
sentinel monitor mymaster 192.168.10.23 6379 2	#84行,修改 指定该哨兵节点监控192.168.10.23:6379这个主节点,该主节点的名称是mymaster,最后的2的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移
sentinel down-after-milliseconds mymaster 30000	#113行,判定服务器down掉的时间周期,默认30000毫秒(30秒)
sentinel failover-timeout mymaster 180000		#146行,故障节点的最大超时时间为180000(180秒)
启动哨兵模式
先启master,再启slave
cd /opt/redis-5.0.7/
redis-sentinel sentinel.conf &

查看哨兵信息

redis-cli -p 26379 info Sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.20.23:6379,slaves=2,sentinels=3

故障模拟

#查看redis-server进程号:
ps -ef | grep redis
root      57031      1  0 15:20 ?        00:00:07 /usr/local/bin/redis-server 0.0.0.0:6379
root      57742      1  1 16:05 ?        00:00:07 redis-sentinel *:26379 [sentinel]
root      57883  57462  0 16:17 pts/1    00:00:00 grep --color=auto redis

#杀死 Master 节点上redis-server的进程号
kill -9 57031			#Master节点上redis-server的进程号

#验证结果
tail -f /var/log/sentinel.log


2.redis-cli -p 26379 INFO Sentinel

三、Redis 群集模式

集群,即Redis Cluster,是Redis 3.0开始引入的分布式存储方案。

集群由多个节点(Node)组成,Redis的数据分布在这些节点中。集群中的节点分为主节点和从节点:只有主节点负责读写请求和集群信息的维护;从节点只进行主节点数据和状态信息的复制。

3.1、集群的作用

数据分区:数据分区(或称数据分片)是集群最核心的功能。
集群将数据分散到多个节点,一方面突破了Redis单机内存大小的限制,存储容量大大增加;另一方面每个主节点都可以对外提供读服务和写服务,大大提高了集群的响应能力。
Redis单机内存大小受限问题,在介绍持久化和主从复制时都有提及;例如,如果单机内存太大,bgsave和bgrewriteaof的fork操作可能导致主进程阻塞,主从环境下主机切换时可能导致从节点长时间无法提供服务,全量复制阶段主节点的复制缓冲区可能溢出。

高可用:集群支持主从复制和主节点的自动故障转移(与哨兵类似);当任一节点发生故障时,集群仍然可以对外提供服务。

3.2、集群模式的数据分片

1、Redis集群引入了哈希槽的概念

2、Redis集群有 16384 个哈希槽( 编号0-16383)

3、集群的每个节点负责一部分哈希槽

4、每个Key 通过 CRC16校验后对16384取余来决定放置哪个哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作

  <- - -以3个节点组成的集群为例- - ->
    节点A 包含0到5460号哈希槽
    节点B 包含5461到10922号哈希槽
    节点C 包含10923到16383号哈希槽

3.3、Redis集群的主从复制模型

集群中具有A、B、C三个节点,如果节点B失败了,整个集群就会因缺少5461-10922这个范围的槽而不可以用。
为每个节点添加一个从节点A1、B1、C1整个集群便有三个Master节点和三个slave节点组成,在节点B失败后,集群选举B1位为的主节点继续服务。当B和B1都失败后,集群将不可用。

3.5、搭建Redis 群集模式

redis的集群一般需要6个节点,3主3从。方便起见,这里所有节点在同一台服务器上模拟:
以端口号进行区分:3个主节点端口号:6001/6002/6003,对应的从节点端口号6004/6005/6006。

#在当前服务器配置6个redis服务
cd /etc/redis/
mkdir -p /etc/redis/redis-cluster/redis600{1..6}
cd redis-cluster/redis6001
#复制配置文件及程序到目录中
cp /opt/redis-5.0.7/redis.conf ./
cp /opt/redis-5.0.7/src/redis-cli ./
cp /opt/redis-5.0.7/src/redis-server ./

 开启群集功能

#其他5个文件夹的配置文件以此类推修改,注意6个端口都要不一样。

cd /etc/redis/redis-cluster/redis6001
vim redis.conf
#bind 127.0.0.1							#69行,注释掉bind 项,默认监听所有网卡
protected-mode no						#88行,修改,关闭保护模式
port 6001								#92行,修改,redis监听端口,
daemonize yes							#136行,开启守护进程,以独立进程启动
cluster-enabled yes						#832行,取消注释,开启群集功能
cluster-config-file nodes-6001.conf		#840行,取消注释,群集名称文件设置
cluster-node-timeout 15000				#846行,取消注释群集超时时间设置
appendonly yes							#700行,修改,开启AOF持久化

 启动redis节点

分别进入那六个文件夹,执行命令:redis-server redis.conf ,来启动redis节点
cd /etc/redis/redis-cluster/redis6001
redis-server redis.conf

for d in {1..6}
do
cd /etc/redis/redis-cluster/redis600$d
redis-server redis.conf
done

ps -ef | grep redis

启动集群

redis-cli --cluster create 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006 --cluster-replicas 1


#六个实例分为三组,每组一主一从,前面的做主节点,后面的做从节点。下面交互的时候 需要输入 yes 才可以创建。
--replicas 1 表示每个主节点有1个从节点。

测试群集

redis-cli -p 6001 -c					#加-c参数,节点之间就可以互相跳转
127.0.0.1:6001> cluster slots			#查看节点的哈希槽编号范围
1) 1) (integer) 5461
   2) (integer) 10922									#哈希槽编号范围
   3) 1) "127.0.0.1"
      2) (integer) 6003									#主节点IP和端口号
      3) "fdca661922216dd69a63a7c9d3c4540cd6baef44"
   4) 1) "127.0.0.1"
      2) (integer) 6004									#从节点IP和端口号
      3) "a2c0c32aff0f38980accd2b63d6d952812e44740"
2) 1) (integer) 0
   2) (integer) 5460
   3) 1) "127.0.0.1"
      2) (integer) 6001
      3) "0e5873747a2e26bdc935bc76c2bafb19d0a54b11"
   4) 1) "127.0.0.1"
      2) (integer) 6006
      3) "8842ef5584a85005e135fd0ee59e5a0d67b0cf8e"
3) 1) (integer) 10923
   2) (integer) 16383
   3) 1) "127.0.0.1"
      2) (integer) 6002
      3) "816ddaa3d1469540b2ffbcaaf9aa867646846b30"
   4) 1) "127.0.0.1"
      2) (integer) 6005
      3) "f847077bfe6722466e96178ae8cbb09dc8b4d5eb"

127.0.0.1:6001> set name zhangsan
-> Redirected to slot [5798] located at 127.0.0.1:6003
OK

127.0.0.1:6001> cluster keyslot name					#查看name键的槽编号

redis-cli -p 6004 -c
127.0.0.1:6004> keys *							#对应的slave节点也有这条数据,但是别的节点没有
1) "name"

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

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

相关文章

性能诊断的方法(四):自下而上的资源诊断方法和发散的异常信息诊断方法

关于性能诊断的方法&#xff0c;我们可以按照“问题现象—直接原因—问题根源”这样一个思路去归纳。我们先从问题的现象去入手&#xff0c;包括时间的分析、资源的分析和异常信息的分析。接下来再去分析产生问题现象的直接原因是什么&#xff0c;这里我们归纳了自上而下的资源…

从安装ffmpeg开始,把一个视频按照每秒30帧fps剪切为图片

ffmpeg -i demo.mp4 -vf fps1 -start_number 0 %5d.jpg没有ffmpeg 的去官网下载&#xff0c; ffmpeg.org/download.html 下载好之后&#xff0c;解压进入bin文件夹 复制当前路径&#xff0c;下一步 配置环境 进入本机环境变量&#xff0c;把地址添加到path中 之后进入anacond…

Vue - 详细介绍vue-qr在线生成二维码组件(Vue2 Vue3)

Vue - 详细介绍vue-qr在线生成二维码组件&#xff08;Vue2 & Vue3&#xff09; 在对于二维码生成中有许多组件&#xff0c;下面介绍关于自定义比较高的vue-qr组件&#xff0c;能自定义设置背景颜色、背景图片、背景Gif图、实点和空白区的颜色、中心Logo的图片和边距。 一…

为什么企业可以通过数据产品实现商业价值

管理者们通常希望可以通过数据洞悉更精准的商业趋势。 根据 Gartner 2023 年的调查显示&#xff0c;有69%的数据分析师或数据管理者们&#xff0c;仍在努力通过数据分析&#xff0c;希望实现可衡量的投资回报率&#xff0c;而数据产品是实现这一难题的重要解决方案之一。 什么…

USBCANFD卡在新能源BMS上位机的应用

使用简明教程&#xff1a;插入一个视频 USBCANFD-401是一款高性能的USB转双路CANFD/LIN的CANFD盒&#xff0c;支持单路CNA(FD)和LIN转USB通信。 通过USB接口快速接入CANFD或LIN通道&#xff0c;使接入CAN/CANFD/LIN网络变得轻松便捷。该设备采用金升阳电源模块和信号隔离芯片&…

GAMES101(2~3作业)

作业2 基础题目&#xff1a; 栅格化&#xff1a;在屏幕绘制一个实心三角形&#xff0c;函数 rasterize_triangle(const Triangle& t)&#xff0c;需要找出当前三角形的边界框&#xff0c;然后遍历像素&#xff0c;查找当前像素是否在三角形内static bool insideTriangle(…

ESP32开发 -- 初识

一、ESP32官网 ESP32官网 二、文档下载 用的是ESP32-S3-MINI-1&#xff0c;官网查看相关文档 相关文档 三、技术规格书 四、开发板 参看&#xff1a;ESP32-S3 系列开发板 ESP32-S3-MINI-1 相关开发板的示例代码&#xff0c;后续可以参考。 Espressif Systems esp-dev-…

9天也能养成ins账号!超详细操作指南

Instagram&#xff0c;作为全球最受欢迎的社交媒体平台之一&#xff0c;为跨境电商卖家们提供了一个展示产品、吸引潜在客户的绝佳舞台。然而&#xff0c;受限于ins的规则&#xff0c;要想在这个平台上进行产品的宣传并非易事。 这就是为什么我们需要精心培养一个ins账号&#…

Linux(4)--CentOS8虚拟机下联网

文章目录 1. 背景2. VmWare配置3. 电脑网络配置4. 配置虚拟机网络5. 重启联网 1. 背景 安装CentOS后&#xff0c;尚不能联网&#xff0c;没有网络就不好上网&#xff0c;所以先解决上网问题。 2. VmWare配置 打开VmWare&#xff0c;点击编辑-虚拟网络编辑器&#xff0c;选择…

PyCharm使用ipynb文件交互式绘图

PyCharm配置 Jupyter Notebook 这个文章很全 PyCharm配置 Jupyter Notebook plotly方法 终端安装&#xff1a; pip install plotlyimport plotly.graph_objects as go import numpy as np# 示例数据 X np.linspace(-5, 5, 100) Y np.linspace(-5, 5, 100) X, Y np.meshg…

GNSS的数据样例

武汉大学的数据地址&#xff1a; ftp://igs.gnsswhu.cn/pub/whu/phasebias obit 文件夹下存放的是卫星相关的文件 姿态&#xff1a; 、精密轨道 ERP CLK bias 文件 观测量域的偏差

RWKV作者对OpenAI 发布 o1 系列模型的看法,很深刻

知乎&#xff1a;PENG Bo 链接&#xff1a;https://www.zhihu.com/question/666991594/answer/3624168868 大家都知道长期CoT可以提升性能&#xff0c;而且很快我们会看到其它家的例子&#xff0c;这是最后的low-hanging fruit&#xff0c;因为只需合成大量训练数据&#xff0…

DDR3AXI4接口读写仿真

前文已经介绍了DDR3和AXI4总线的相关知识&#xff0c;我们知道MIG ip核除了可以生成native接口还能生成AXI4接口&#xff0c;今天就练习一下将AXI4接口的DDR3打包成FIFO。首先我们生成一个AXI4接口的MIG ip核&#xff0c;其余步骤与Native接口的ip核相同&#xff0c;如果我们勾…

力扣: 翻转字符串里的单词

文章目录 需求分析代码结尾 需求 给你一个字符串 s &#xff0c;请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 注意&#xff1a;输入字符…

03_Python数据类型_字符串

Python的基础数据类型 数值类型&#xff1a;整数、浮点数、复数、布尔字符串容器类型&#xff1a;列表、元祖、字典、集合 字符串 在Python中&#xff0c;字符串&#xff08;String&#xff09;是一种非常重要的数据类型&#xff0c;用于表示文本数据。字符串是不可变的&…

算子级血缘在金融数据环境的实践应用

在企业的数据管理领域&#xff0c;算子级血缘极大优化了脚本内部字段口径的理解与追踪。面对几十、几百乃至几千行代码的复杂脚本&#xff0c;并且有着各种函数调用、数据转换等复杂的加工逻辑&#xff0c;如果通过传统的 ETL 工作模式&#xff0c;开发人员就不得不采用“盲人摸…

SpringBoot整合WebSocket实现消息推送或聊天功能示例

最近在做一个功能&#xff0c;就是需要实时给用户推送消息&#xff0c;所以就需要用到 websocket springboot 接入 websocket 非常简单&#xff0c;只需要下面几个配置即可 pom 文件 <!-- spring-boot-web启动器 --><dependency><groupId>org.springframewo…

深度学习驱动超材料设计领域发展

深度学习在超材料设计领域的应用是一个令人兴奋的研究方向。超材料&#xff08;Metamaterials&#xff09;是一类具有自然界中不存在的特殊性质的人工材料&#xff0c;它们通过精确设计微结构来获得独特的电磁、光学或声学特性。这些特性使得超材料在各个领域都有广泛的应用前景…

大模型产品经验漫谈

前文 昨天给领导汇报了最近做的一个 txt2sql 技术路线实现的智能助手的项目&#xff0c;总算是告一段落了&#xff0c;做了半年的时间&#xff0c;作为整个项目的技术负责人从头到尾主导项目&#xff0c;肯定是有不少收获和感悟的&#xff0c;趁现在还在脑袋里面热乎着&#x…

GPS/LBS/Wi-Fi定位,全安排!—合宙Air201资产定位模组LuatOS快速入门04

经历了hello world、点灯、远程控制三期基础教程&#xff0c;小伙伴们是不是收获满满&#xff0c;期待更高阶的应用呢&#xff1f; 本期&#xff0c;我们将学习合宙Air201的核心功能之一——定位功能&#xff01; Air201定位示例教程 合宙Air201资产定位模组——是一个集成超…