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

Redis 的 主从复制

目录

1 Redis 主从复制介绍

2 Redis主从复制原理

2.1 主从同步过程

3 Redis实现主从复制

3.1 环境配置

3.2 修改各节点的配置文件

3.2.1 MASTER 

3.2.2 SLAVE

3.3.3 重启Redis 

3.3 查看是否实现了主从复制

3.3.1 MASTER

3.3.2 SLAVE

3.3.3 Redis 常用操作

3.3.4 数据添加查看效果


1 Redis 主从复制介绍

随着项目访问量的增加,对Redis服务器的操作也越加频繁,虽然Redis读写速度都很快,但是一定程度上也会造成一定的延时,那么为了解决访问量大的问题,通常会采取的一种方式是主从架构Master/Slave,Master 以写为主,Slave 以读为主。

2 Redis主从复制原理

  • Redis 一般是使用一个 Master 节点来进行写操作,而若干个 Slave 节点进行读操作,Master 和 Slave 分别代表了一个个不同的 Redis Server 实例。

  • 定期的数据备份操作也是单独选择一个 Slave 去完成,这样可以最大程度发挥 Redis 的性能,为的是保证数据的弱一致性和最终一致性。

  • Master 和 Slave 的数据不是一定要即时同步的,但是在一段时间后 Master 和 Slave 的数据是趋于同步的,这就是最终一致性。

2.1 主从同步过程

  • slave节点发送同步请求到master节点

  • slave节点通过master节点的认证开始进行同步

  • master节点会开启bgsave进程发送内存rbd内存快照slave节点,在此过程中是异步操作,也就是说

  • master节点仍然可以进行写入动作

  • slave节点收到rdb后首先清空自己的所有数据

  • slave节点加载rdb并进行数据恢复

  • masterslave同步过程中master还会开启新的bgsave进程把没有同步的数据进行缓存

  • 然后通过自有的replactionfeedslave函数把未通过内存快照发动到slave的数据一条一条写入到 slave

3 Redis实现主从复制

3.1 环境配置

节点名称角色IP地址
node1MASTER192.168.239.10
node2SLAVE-1192.168.239.20
node3SLAVE-2192.168.239.30

3.2 修改各节点的配置文件

3.2.1 MASTER 

[root@node-1 ~]# vim /etc/redis/redis.confbind * -::*        # 允许所有IP所有端口连接
protected-mode no  # 关闭安全模式即密码验证

3.2.2 SLAVE

[root@node-2 ~]# vim /etc/redis/redis.confbind * -::*        # 允许所有IP所有端口连接
protected-mode no  # 关闭安全模式即密码验证
replicaof 192.168.239.10 6379  # 向 MASTER 进行同步
[root@node-3 ~]# vim /etc/redis/redis.confbind * -::*        # 允许所有IP所有端口连接
protected-mode no  # 关闭安全模式即密码验证
replicaof 192.168.239.10 6379  # 向 MASTER 进行同步

3.3.3 重启Redis 

[root@node-1 ~]# systemctl restart redis_6379.service 
[root@node-2 ~]# systemctl restart redis_6379.service 
[root@node-3 ~]# systemctl restart redis_6379.service 

3.3 查看是否实现了主从复制

3.3.1 MASTER

[root@node-1 ~]# redis-cli 
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.239.30,port=6379,state=online,offset=0,lag=1
slave1:ip=192.168.239.20,port=6379,state=online,offset=0,lag=0
master_failover_state:no-failover
master_replid:6cae489b55bf61b8432df467e53d93081effc1ce
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:14
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:14

3.3.2 SLAVE

[root@node-2 ~]# redis-cli 
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.239.10
master_port:6379
master_link_status:up[root@node-3 ~]# redis-cli 
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.239.10
master_port:6379
master_link_status:up

3.3.3 Redis 常用操作

命令功能
config get *查看配置
select 1选择数据库
flush db清空当前数据库
flush all清空所有数据库
move key 1移动 key
del key删除
rename oldkey newkey改名
expire key 10设置过期时间
persist key设置持久化
keys user*查询
exists key判断是否存在

3.3.4 数据添加查看效果

MASTER 

[root@node-1 ~]# redis-cli 
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> set name shuyan
OK
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> get name
"shuyan"

SLAVE 

[root@node-2 ~]# redis-cli 127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> get name
"shuyan"
[root@node-3 ~]# redis-cli 
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> get name
"shuyan"

从节点尝试写入数据

有一个疑问,从节点是否能写入数据呢?

下面拿node-2 来进行一个测试,实验结果很显然是不行的

结论:主从复制中,只能由主节点来对数据进行写入,而从节点是不能写入的。从节点只能查看不能添加数据,在收到主节点发送过来的rdb之后会清空自己的数据再进行同步。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 软件中的重构
  • Linux CentOS 添加路由
  • 如何下载jmeter旧版本
  • 如何使用 AWS CLI 为私有 AWS S3 存储桶中的对象创建预签名 URL
  • 软件架构设计——能力供应商模式
  • Base CTF [第2周]UPX的
  • Claude 与 ChatGPT:哪个更适合学术写作,深入对比分析
  • ARM-Cortex-M架构:1、STM32函数参数传递
  • 团队管理之敏捷开发
  • Linux文件目录系统
  • 【c语法】##__VA_ARGS__与__VA_ARGS__
  • 深度学习--负采样技术及其扩展详解
  • redisj集群之哨兵模式
  • LeetCode面试题Day16|LC56 合并区间、LC57 插入区间
  • 浅谈Java SpringBoot和Spring区别
  • [译]CSS 居中(Center)方法大合集
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • Docker下部署自己的LNMP工作环境
  • HTTP中GET与POST的区别 99%的错误认识
  • js继承的实现方法
  • ReactNative开发常用的三方模块
  • SpiderData 2019年2月16日 DApp数据排行榜
  • 从零开始学习部署
  • 构建工具 - 收藏集 - 掘金
  • 使用common-codec进行md5加密
  • 自制字幕遮挡器
  • 最简单的无缝轮播
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​【已解决】npm install​卡主不动的情况
  • ​比特币大跌的 2 个原因
  • #QT(TCP网络编程-服务端)
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • ()、[]、{}、(())、[[]]命令替换
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (5)STL算法之复制
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (图)IntelliTrace Tools 跟踪云端程序
  • (一一四)第九章编程练习
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)C#调用WebService 基础
  • (转)为C# Windows服务添加安装程序
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .net core 连接数据库,通过数据库生成Modell
  • .NET HttpWebRequest、WebClient、HttpClient
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .NET和.COM和.CN域名区别
  • .NET实现之(自动更新)
  • .Net中ListT 泛型转成DataTable、DataSet
  • @Autowired和@Resource装配