【Redis】Redis 主从复制原理与配置详解:解决单点故障与性能瓶颈的最佳方案


主从复制

这部分相关操作不需要记忆!!! 后续⼯作中如果⽤到了能查到即可.

重点理解流程和原理.

单点问题:某个服务器程序,只有一个节点(只搞一个物理服务器,来部署这个服务器程序)

  1. 可用性问题,如果这个机器挂了,服务就中断了
  2. 性能/支持的并发量有限

在分布式系统中,希望使用多个服务器来部署 redis,存在以下几种 redis 的部署方式:

  1. 主从模式
  2. 主从+哨兵模式
  3. 集群模式

Redis 主从模式中,从节点上的数据不允许修改,只允许读取,所以不存在“我修改了从节点的数据,是否把从节点的数据往主节点上同步”的问题。

某个从节点挂了影响不大,但如果主节点挂了呢?

这就有一定影响了,此时只剩下从节点,只能读数据了,如果需要写数据就没得写了。主从模式主要是针对“读操作”进行 并发量&可用性 的提高,实际业务场景读操作往往比写操作更频繁;而对于“写操作”无论是可用性还是并发量都非常依赖主节点,而主节点又不能搞多个,因为如果你对主节点a和主节点b同时写了那该听谁的呢?

在分布式系统中为了解决单点问题,通常会把数据复制多个副本部署到其他服务器,满⾜故障恢复和负载均衡等需求。Redis 也是如此,它为我们提供了复制的功能,实现了相同数据的多个 Redis 副本。复制功能是⾼可⽤ Redis 的基础,哨兵和集群都是在复制的基础上构建的。本章内容如下:

介绍复制的使⽤⽅式:如何建⽴或断开复制、安全性、只读等。

说明复制可⽀持的拓扑结构,以及每个拓扑结构的适⽤场景。

分析复制的原理,包括:建⽴复制、全量复制、部分复制、⼼跳检测等。

如果同学⽐较少,那么⼀个⽼师既可以进⾏授课, 也可以进⾏答疑;但是随着学⽣多了,⼀个⽼师也就应付不过来了. 就需要配⼏个助教⽼师,助教⽼师从授课⽼师这⾥获取知识,协助授课⽼师答疑.

配置

配置 Redis 主从结构,首先需要启动多个 Redis 服务器。正常来说每个 Redis 服务器程序应该在一个单独的主机,这样才是分布式。但是大多数人应该手里只有一个云服务器,我们可以在一个云服务器主机上运行多个 redis-server 进程。此处需要保证多个 redis-server 的端口。

如何指定 redis-server 的端口呢?

  1. 可以在启动程序的时候,通过命令行指定端口号。--port 选项
  2. 也可以在配置文件设置端口。【推荐】

这里从 35节 如何启动多个redis-server 开始看

建立复制

参与复制的 Redis 实例划分为主节点(master)和从节点(slave)。每个从节点只能有⼀个主节点,⽽⼀个主节点可以同时具有多个从节点。复制的数据流是单向的,只能由主节点到从节点。配置复制的⽅式有以下三种(都是关于 slaveof 命令的):

  1. 在配置⽂件中加⼊ slaveof {masterHost} {masterPort} 随 Redis 启动⽣效。【推荐】

这部分看 36节 主从复制-配置主从复制(1)

  1. 在 redis-server 启动命令时加⼊ --slaveof {masterHost} {masterPort} ⽣效。

  2. 直接使⽤ redis 命令:slaveof {masterHost} {masterPort} ⽣效。

接下来,我们将 redis.conf 配置⽂件复制⼀份 redis-slave.conf(如果你想有多个从节点就复制多份,命名时区分一下每个从节点,比如 slave1.conf、slave2.conf 之类的

进入这些配置文件将端口号修改为 6379 之后的,比如 6380 之类的,并且修改其 daemonize 为 yes。

# By default Redis does not run as a daemon. Use 'yes' if you need it.
# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
daemonize yes

接下来,默认启动的 redis 作为主 Redis,重新通过命令⾏启动⼀个 Redis 实例作为从 Redis:

# ubuntu
redis-server /etc/redis/redis-slave.conf --port 6380 --slaveof 127.0.0.1 6379

# centos
redis-server /etc/redis-slave.conf --port 6380 --slaveof 127.0.0.1 6379

注意: 修改配置主要是修改从机的配置. 主机配置不变.

通过 netstat -nlpt 确保两个 Redis 均已正确启动。

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:6380          0.0.0.0:*               LISTEN

通过 redis-cli 可以连接主 Redis 实例,通过 redis-cli -p 6380 连接从 Redis。并且观察复制关系。

127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"
127.0.0.1:6380> get hello
"world"

从运⾏结果中看到复制已经⼯作了,针对主节点 6379 的任何修改都可以同步到从节点 6380 中,复制过程如图所⽰。

Redis 主从节点复制过程

可以通过 info replication 命令查看复制相关状态。

  1. 主节点 6379 复制状态信息
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6380,state=online,offset=100,lag=0
master_r
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值