当前位置: 首页 > news >正文

Redis主从复制(Master-Slave Replication)解析与搭建操作指南

Redis是一种高性能的键值存储系统,广泛应用于缓存、消息队列和实时数据处理等场景。为了保证数据的高可用性和扩展性,Redis提供了主从复制(Master-Slave Replication)机制。本文将详细介绍Redis主从复制的原理、配置方法以及实践中的注意事项,帮助你更好地理解和应用这一功能。

1 主从复制简介

1.1 什么是主从复制

Redis主从复制是一种数据同步机制,允许将一台Redis服务器(称为主节点,Master)的数据复制到一台或多台Redis服务器(称为从节点,Slave)。主节点负责处理写操作,而从节点则负责复制主节点的数据并提供读服务。
主从复制的主要作用:
  • 数据冗余:通过复制数据到从节点,实现数据备份,避免单点故障
  • 读写分离:主节点处理写请求,从节点处理读请求,分担主节点的压力
  • 故障恢复:当主节点出现故障时,可以快速将从节点提升为主节点,保证服务可用性

1.2 主从复制的优点

  • 读写分离:主节点处理写操作,从节点处理读操作,分担主节点的压力
  • 数据冗余:从节点保存了主节点的数据副本,提高了数据的可靠性
  • 高可用性:如果主节点宕机,可以手动将从节点提升为主节点

2 Redis主从复制原理概述

Redis主从复制的核心原理是通过命令传播和数据同步来实现主从节点之间的数据一致性。具体如下:
1. 建立连接
  • 从节点启动后,会向主节点发送psync命令,请求同步数据
  • 主节点接收到请求后,会判断是否需要进行全量复制或部分复制
2. 数据同步
  • 全量复制:如果从节点是首次连接主节点,或者主从节点的数据差异较大,主节点会执行全量复制,主节点将当前所有数据生成RDB快照文件并发送给从节点,从节点加载RDB文件完成数据同步
  • 部分复制:如果从节点已经拥有部分数据,主节点只需发送从节点缺失的数据
3. 命令传播
  • 主节点将接收到的写命令发送给从节点,从节点执行这些命令以保持数据同步
4. 断线重连
  • 如果从节点与主节点的连接中断,从节点会尝试重新连接主节点,并继续同步数据

3 搭建Redis主从复制

3.1 环境准备

  • 两台或多台服务器,分别安装Redis

       安装操作参考:Redis安装与基础配置:单节点离线部署与配置解析-CSDN博客)

  • 确保服务器之间网络互通
  • 主节点:192.168.10.32
  • 从节点:192.168.10.31

3.2 主节点配置

vim /usr/local/redis/redis.conf
# 编辑/usr/local/redis/redis.conf文件,修改如下项的内容
bind 0.0.0.0
protected-mode no
requirepass lahmy1c@
daemonize yes

# 修改完如上内容后重启服务
ps -ef |grep redis|grep -v grep |awk '{print $2}'|xargs kill -9 
/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf

3.3 从节点配置

vim /usr/local/redis/redis.conf
# 编辑/usr/local/redis/redis.conf文件,修改如下项的内容
bind 0.0.0.0
protected-mode no
requirepass lahmy1c@
replicaof 192.168.10.32 6379
masterauth lahmy1c@
daemonize yes

# 修改完如上内容后重启服务
ps -ef |grep redis|grep -v grep |awk '{print $2}'|xargs kill -9 
/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf

3.4 查看主从复制状态

3.4.1 主节点状态

[root@node3 redis]# /usr/local/redis/bin/redis-cli -a lahmy1c@ info replication
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.10.31,port=6379,state=online,offset=140,lag=1
master_failover_state:no-failover
master_replid:3d1c7065aedf4d5847135b675d17a908a5bc845c
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:140
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:140
[root@node3 redis]# 

3.4 查看主从复制状态

3.4.1 主节点状态

[root@node3 redis]# /usr/local/redis/bin/redis-cli -a lahmy1c@ info replication
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.10.31,port=6379,state=online,offset=140,lag=1
master_failover_state:no-failover
master_replid:3d1c7065aedf4d5847135b675d17a908a5bc845c
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:140
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:140
[root@node3 redis]# 

3.4.2 从节点状态

[root@node2 redis]# /usr/local/redis/bin/redis-cli -a lahmy1c@ info replication
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Replication
role:4slave
master_host:192.168.10.32
master_port:6379
master_link_status:up
master_last_io_seconds_ago:6
master_sync_in_progress:0
slave_read_repl_offset:196
slave_repl_offset:196
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:3d1c7065aedf4d5847135b675d17a908a5bc845c
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:196
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:196
[root@node2 redis]# 

4 验证主从复制

4.1 主节点写入数据

# 在主节点上创建一个key
/usr/local/redis/bin/redis-cli -a lahmy1c@ set masterkey mastertest

[root@node3 redis]# /usr/local/redis/bin/redis-cli -a lahmy1c@ set masterkey mastertest
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
OK
[root@node3 redis]# 

4.2 从节点读取数据

# 在从节点上获取key,是否可以正常获取到值
/usr/local/redis/bin/redis-cli -a lahmy1c@ get masterkey

[root@node2 redis]# /usr/local/redis/bin/redis-cli -a lahmy1c@ get masterkey
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
"mastertest"
[root@node2 redis]# 

5 总结

Redis主从复制是实现高可用性和扩展性的关键技术。通过合理配置和使用,可以提升Redis的性能和可靠性。在实际应用中,可以结合Redis Sentinel或Redis Cluster实现更强大的高可用方案。

相关文章:

  • L2TP实验 作业
  • 每日OJ_牛客_DP44兑换零钱_C++_Java
  • Pytorch中layernorm实现详解
  • C语言基础(函数)
  • 正则魔法:解码 return /^\d+$/.test(text) ? text : ‘0‘ 的秘密
  • 【笔记】深度学习模型训练的 GPU 内存优化之旅:重计算篇
  • 2025最新电脑IP地址修改方法:Win系统详细步骤
  • springboot使用163发送自定义html格式的邮件
  • 为什么TCP需要三次握手?一次不行吗?
  • 【Servlet 容器和 Spring 容器的关系】
  • 人工智能之数学基础:线性方程组
  • mysql-innodb存储引擎主键索引叶子结点数据结构(非单纯的双向链表)
  • PyCharm安装redis,python安装redis,PyCharm使用失败问题
  • WPF 布局舍入(WPF 边框模糊 或 像素错位 的问题)
  • Datawhale coze-ai-assistant 笔记4
  • 16 预编译指令
  • 再学:ERC20-Permit2、SafeERC20方法 详解ERC721,如何铸造一个NFT以及IPFS的作用
  • 进程控制~
  • 【宇宙回响】从Canvas到MySQL:飞机大战的全栈交响曲【附演示视频与源码】
  • 普通鼠标的500连击的工具来了!!!
  • 一张老照片里蕴含的上海文脉
  • 王文涛会见德国汽车工业协会主席穆勒
  • 南阳市委原书记朱是西被“双开”:搞劳民伤财的“政绩工程”
  • 网贷放款后自动扣除高额会员费,多家网贷平台被指变相收取“砍头息”
  • 我国风电光伏装机历史性超过火电
  • 专访|攸佳宁:手机只是矛盾导火索,重要的是看见孩子的内心