redis高可用之主从模式

开发与运维NoSQL数据库

0.前言

之前我们部署了单节点的redis,并且讲解了redis基础用法,但在实际生产中,通常不会使用单节点的redis,因为一旦该节点出现异常,就会影响使用redis的系统,所以线上环境通常会使用redis的高可用模式。redis常用的高可用模式有主从模式、哨兵模式和集群模式,今天我们来部署一套主从模式的redis集群,看下是否好用。

1.资源准备

我们准备两台服务器,一台部署为redis主节点,一台为redis从节点,服务器配置如下:

操作系统IP地址CPU内存redis版本节点
rocky9 linux192.168.159.1674核8G7.4
rocky9 linux192.168.159.1684核8G7.4

用其他配置或者版本的redis也可以,能够正常部署redis即可。

2.部署redis节点

需要在两台服务器上分别部署redis,和部署单节点的redis步骤一样,可以参考我之前的博客:redis单节点部署操作手册

3.从节点处理

为了将主从节点关联在一起,我们需要修改redis从节点的配置,并且将服务运行起来。

3.1 修改配置文件

在从节点redis配置文件中添加如下内容:

replicaof 192.168.159.167 6379

其实就是在从节点中指定主节点。

3.2 启动从节点

配置修改完成之后,启动redis节点即可,命令如下:

systemctl start redis

3.3 检查redis服务

检查下redis服务运行情况,命令如下:

ps -ef |grep redis
root     1669248       1  0 18:49 ?        00:00:00 /usr/local/redis/bin/redis-server 0.0.0.0:6379
root     1669322 1658373  0 18:49 pts/1    00:00:00 grep --color=auto redis

可以看到redis服务正常运行。

4.集群使用

在redis主从集群默认情况下,主节点用来读写数据,而从节点只能读取数据,下面我们来简单测试下redis集群模式的功能。

4.1 查看集群信息

我们先来到集群主节点(192.168.159.167),查看下集群基本信息,命令如下:

cd /usr/local/redis/bin
./redis-cli
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.159.168,port=6379,state=online,offset=56,lag=1
master_failover_state:no-failover
master_replid:7672078e5f197c6c19ea97b1898969b01ee56699
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:56
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:56

可以看到主从节点已经相互连接,组成了集群。

4.2 主节点操作

我们在主节点(192.168.159.167)执行读写操作,然后在从测点测试下是否能读取到主节点创建的数据。
(1)创建测试数据

cd /usr/local/redis/bin
./redis-cli
127.0.0.1:6379> mset x 1 y 2 z 3
OK
127.0.0.1:6379> keys *
1) "z"
2) "x"
3) "y"

(2)数据修改

127.0.0.1:6379> set x 5

(3)查看测试数据

127.0.0.1:6379> mget x y z
1) "5"
2) "2"
3) "3"

可以看到,主节点确实可以执行数据的添加,修改和查看操作。

4.3 从节点操作

我们到从节点执行读写操作试下,验证从节点是否能执行写操作以及能否读取主节点写入的数据。 (1)执行写入操作

cd /usr/local/redis/bin/
./redis-cli
127.0.0.1:6379> mset a 1 b 2 c 3
(error) READONLY You can't write against a read only replica.

可以看到报错了,错误信息是从节点只能读取数据。 (2)读取数据

127.0.0.1:6379> mget x y z
1) "5"
2) "2"
3) "3"

可以看到主节点的数据确实同步到了从节点。

5.主从复制原理

上面我们搭建了一个简单的主从集群,并且测试了主从集群的基本功能,下面我们讲一下redis主从复制的原理。
主从模式工作示意图:

picture.image 为了方便,我这里仅部署了一个slave,但是工作模式是一样的,大家能理解就好。
主从复制又分为全量复制和增量复制:

  • 全量复制:第一次同步时,主节点会将所有数据同步给从节点,为全量复制;
  • 增量复制:当主从之间因为网络异常等原因出现连接断开的情况时,重新连接之后主库向从库同步数据时采用的是增量复制; 注意:在redis2.8版本之前只有全量复制
    复制的过程:

picture.image

  • 第一阶段:主从节点之间建立连接,协商同步,主要是为全量同步做准备。这一过程中主库和从库建立起连接,之后从库告诉主库即将进行同步(发送psync命令和参数runID、offset,因为刚建立连接还没有这两个参数值,所以是"?"和"-1"),主库确认回复后(FULLSYNC命令并带有参数runID和offset,FULLSYNC表示全量复制),主从之间就开始同步了。
  • 第二阶段:主库执行bgsave命令生成RDB文件,之后将文件发送给从库,也即将所有数据同步给从库。从库收到数据后,会先清理掉原本存在的数据,之后在本地执行数据加载。
  • 第三阶段:主库会把第二阶段执行过程中新收到的写命令,再发送给从库。 经过以上三个阶段,新建立起连接的主从节点就完成了数据同步。

6.总结

主从模式就是将某个节点的redis数据复制到其他redis节点,前者被称为master节点,后者被称为slave节点,其中master节点可以读写数据,而slave节点只能读取数据。 主从模式的主要作用包括:

  • 数据冗余:多个从节点以热备份的方式实现数据持久化;
  • 故障恢复:当某个从节点异常时,并不影响redis的使用;
  • 负载均衡:因为有多个从节点,读取数据时可以实现负载均衡;
  • 高可用基石:主从模式是redis其他高可用模式实现的基础; 主从模式一定程度上实现了redis的高可用,提高了redis的稳定性,搭建起来也并不复杂,还是很好用的。
0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
云原生数据库 veDB 核心技术剖析与展望
veDB 是一款分布式数据库,采用了云原生计算存储分离架构。本次演讲将为大家介绍火山引擎这款云原生数据库的核心技术原理,并对未来进行展望。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论