Redis的主从架构(主从&主从从)

本文介绍了Redis的主从复制(读写分离)架构,包括如何安装Redis、设置主从及主从从架构,详细讲解了启动实例、配置主从、测试数据同步,并探讨了在复制过程中出现宕机的解决方案。同时提到了无磁盘复制功能以及主Redis宕机后的处理策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


redis官网
https://redis.io/

下载redis最新安装包

http://download.redis.io/releases/redis-3.2.8.tar.gz

下载下来用ftp上传至linux服务器或者直接用yum下载


安装redis


1.解压tar.gz

tar -xvf redis-3.2.8.tar.gz

2.编译

make

3.安装

make install


安装完成

redis-server 测试启动是否正常






主从复制(读写分离)

主从复制的好处有2点:

1、 避免redis单点故障

2、 构建读写分离架构,满足读多写少的应用场景


主从架构



启动实例

创建637963806381目录,分别将安装目录下的redis.conf拷贝到这三个目录下


复制redis.conf至根目录redis/6379

mkdir /redis

cp reids.conf /reids

mkdir 6379

cp redis.conf 6379

cd 6379

vim 6379


分别进入这三个目录分别修改配置文件将端口分别设置为6379Master)、6380Slave)、6381Slave)。同时要设置pidfile文件为不同的路径

修改如下配置内容:

daemonize yes    后台运行

pidfile /var/run/redis-6379.pid   reidis运行的进程pid

save 900 1
save 300 10  
save 60 10000    这三个rdb的持久化 ,这个不需要 注释掉

maxmemory 200m   最大内存

其他两个同理,将配置文件中的6379分别替换
:%s/6379/6380/g
:%s/6379/6381/g

ok
分别启动reidsredis-server ./redis.conf
客户端登陆  redis-cli


设置主从

redis中设置主从有2种方式:

 

1、 redis.conf中设置slaveof

a) slaveof <masterip> <masterport>

2、 使用redis-cli客户端连接到redis服务执行slaveof命令

a) slaveof <masterip> <masterport>

 

第二种方式在重启后将失去主从复制关系。

 

分别通过以上两种方式,将6380和6381设置为从库


查看主从信息:INFO replication


主:

role:角色

connected_slaves:从库数量

slave0:从库信息


从:



测试:

在主库写入数据


在从库中读取数据


会发现我没做主从之前的两条数据也同步到从库了 ,那是因为redis会做全量同步


主从从架构



设置主从:将6380的主库设置为6379
设置从从:将6381的主库设置为6380

启动实例


主信息:


从信息:


从从信息:



测试

在主库存入数据



在从6380获取数据



在从从6381获取数据:



从库只读

默认情况下redis数据库充当slave角色时是只读的不能进行写操作


可以在配置文件中开启非只读:slave-read-only no



复制的过程原理

1、 当从库和主库建立MS关系后,会向主数据库发送SYNC命令;

2、 主库接收到SYNC命令后会开始在后台保存快照RDB持久化过程),并将期间接收到的写命令缓存起来;

3、 当快照完成后Redis会将快照文件和所有缓存的命令发送给从Redis;

4、 Redis接收到后会载入快照文件并且执行收到的缓存的命令

5、 之后Redis每当接收到写命令时就会将命令发送从Redis,从而保证数据的一致


无磁盘复制

通过前面的复制过程我们了解到主库接收到SYNC的命令时会执行RDB过程即使在配置文件中禁用RDB持久化也会生成那么如果主库所在的服务器磁盘IO性能较差那么这个复制过程就会出现瓶颈,庆幸的是,Redis2.8.18版本开始实现了无磁盘复制功能(不过该功能还是处于试验阶段)。

 

原理

Redis在与从数据库进行复制初始化时将不会将快照存储到磁盘而是直接通过网络发送给从数据库避免了IO性能差问题

 

开启无磁盘复制:repl-diskless-sync yes


复制架构中出现宕机怎么办?

如果在主从复制架构中出现宕机的情况需要分情况看

Redis宕机

a) 这个相对而言比较简单Redis中从库重新启动后会自动加入到主从架构中自动完成同步数据

b) 问题如果从库在断开期间,主库的变化不大,从库再次启动后,主库依然会将所有的数据做RDB操作吗?还是增量更新?(从库有做持久化的前提下)

i. 不会的因为在Redis2.8版本后就实现了主从断线后恢复的情况下实现增量复制

Redis宕机

a) 这个相对而言就会复杂一些需要以下2步才能完成

i. 第一步,在从数据库中执行SLAVEOF NO ONE命令断开主从关系并且提升为主库继续服务

ii. 第二步将主库重新启动后执行SLAVEOF命令将其设置为其他库的从库这时数据就能更新回来

b) 这个手动完成恢复的过程其实是比较麻烦的并且容易出错有没有好办法解决呢当前有的,Redis提高的哨兵sentinel的功能




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值