Redis 的 主从复制

目录

[1 Redis 主从复制介绍](#1 Redis 主从复制介绍)

[2 Redis主从复制原理](#2 Redis主从复制原理)

[2.1 主从同步过程](#2.1 主从同步过程)

[3 Redis实现主从复制](#3 Redis实现主从复制)

[3.1 环境配置](#3.1 环境配置)

[3.2 修改各节点的配置文件](#3.2 修改各节点的配置文件)

[3.2.1 MASTER](#3.2.1 MASTER)

[3.2.2 SLAVE](#3.2.2 SLAVE)

[3.3.3 重启Redis](#3.3.3 重启Redis)

[3.3 查看是否实现了主从复制](#3.3 查看是否实现了主从复制)

[3.3.1 MASTER](#3.3.1 MASTER)

[3.3.2 SLAVE](#3.3.2 SLAVE)

[3.3.3 Redis 常用操作](#3.3.3 Redis 常用操作)

[3.3.4 数据添加查看效果](#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并进行数据恢复

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

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

3 Redis实现主从复制

3.1 环境配置

节点名称 角色 IP地址
node1 MASTER 192.168.239.10
node2 SLAVE-1 192.168.239.20
node3 SLAVE-2 192.168.239.30

3.2 修改各****节点的配置文件

3.2.1 MASTER

bash 复制代码
[root@node-1 ~]# vim /etc/redis/redis.conf

bind * -::*        # 允许所有IP所有端口连接
protected-mode no  # 关闭安全模式即密码验证

3.2.2 SLAVE

bash 复制代码
[root@node-2 ~]# vim /etc/redis/redis.conf

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

bind * -::*        # 允许所有IP所有端口连接
protected-mode no  # 关闭安全模式即密码验证
replicaof 192.168.239.10 6379  # 向 MASTER 进行同步

3.3.3 重启Redis

bash 复制代码
[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

bash 复制代码
[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

bash 复制代码
[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

bash 复制代码
[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

bash 复制代码
[root@node-2 ~]# redis-cli 

127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> get name
"shuyan"
bash 复制代码
[root@node-3 ~]# redis-cli 
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> get name
"shuyan"

从节点尝试写入数据

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

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

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

相关推荐
Ai 编码助手5 小时前
MySQL中distinct与group by之间的性能进行比较
数据库·mysql
陈燚_重生之又为程序员6 小时前
基于梧桐数据库的实时数据分析解决方案
数据库·数据挖掘·数据分析
caridle6 小时前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express
白云如幻6 小时前
MySQL排序查询
数据库·mysql
萧鼎6 小时前
Python并发编程库:Asyncio的异步编程实战
开发语言·数据库·python·异步
^velpro^6 小时前
数据库连接池的创建
java·开发语言·数据库
荒川之神6 小时前
ORACLE _11G_R2_ASM 常用命令
数据库·oracle
IT培训中心-竺老师6 小时前
Oracle 23AI创建示例库
数据库·oracle
小白学大数据6 小时前
JavaScript重定向对网络爬虫的影响及处理
开发语言·javascript·数据库·爬虫
time never ceases7 小时前
使用docker方式进行Oracle数据库的物理迁移(helowin/oracle_11g)
数据库·docker·oracle