Redis 如何配置读写分离架构(主从复制)?

Redis 如何配置读写分离架构(主从复制)?

如果你的 redis 实际应用场景是读多写少,那么读写分离的架构就比较适合,能够显著的提升读的性能

什么是 Redis 主从复制?

实际上就是 Redis 对数据除持久化之外的一种数据冗余备份机制。(能够在主节点出现故障时,通过其他手段让从节点快速提升为主节点提供服务以实现故障的恢复。)在读多写少的场景下,主从复制能够做到读写分离,提高 Redis 的负载均衡能力。

如何配置主从复制架构?

以下面这张图为例,简单进行 Redis 的主从配置。

在这里插入图片描述

配置环境

以下配置,仅仅表示我的配置环境,读者可以根据自己的环境进行配置。

注意:需要把主机的防火墙关闭或者把 6379 端口对外放开

  • 三台 Linux 主机(CentOS 7 版本),ip 分别为:10.211.55.6, 10.211.55.7, 10.211.55.8
  • 在每台主机上安装 Redis(3.2.12 版本),可以使用 yum 进行安装
  • 选择 10.211.55.6 主机的 Redis 作为主节点
  • 选择 10.211.55.7 和 10.211.55.8 主机的 Redis 作为从节点

安装 Redis 步骤

这里只提供 yum 的安装方式

# 安装 Redis
yum install redis

# 配置外部访问
vim /etc/redis.conf

# 将 bind 127.0.0.1 修改为如下
bind 0.0.0.0

# 使用 systemctl 管理 Redis 服务
systemctl enable redis

# 启动 Redis
systemctl start redis

通过命令行配置从节点

分别在三台 CentOS 主机上面启动 Redis 服务,使用 redis-cli 进入 Redis 控制台,键入role命令,可以查看该 Redis 节点的角色情况,如下所示,第一行表示该节点的角色为 master,第二行表示数据复制的 offset,第三行表示从节点的集合。可以看到,目前三个 Redis 节点的角色都是 master。

127.0.0.1:6379> role
1) "master"
2) (integer) 0
3) (empty list or set)

执行如下命令,将两台 Redis 节点设置为 10.211.55.6 的从节点:

扫描二维码关注公众号,回复: 14697149 查看本文章
# 登陆 10.211.55.7 主机的 Redis 控制台
slaveof 10.211.55.6 6379

# 登陆 10.211.55.8 主机的 Redis 控制台
slaveof 10.211.55.6 6379

分别在三台主机的 Redis 控制台,执行role命令,查看各自的角色情况。从节点的状态信息如下:

127.0.0.1:6379> role
1) "slave"
2) "10.211.55.6"
3) (integer) 6379
4) "connected"
5) (integer) 1

主节点的状态信息如下:

127.0.0.1:6379> role
1) "master"
2) (integer) 29
3) 1) 1) "10.211.55.8"
      2) "6379"
      3) "29"
   2) 1) "10.211.55.7"
      2) "6379"
      3) "29"

在主节点控制台进行 Redis 操作,测试从节点的数据变化,可以观察到从节点同步了主节点的数据。

# 主节点执行
set foo bar

# 从节点执行
get foo

通过配置文件配置从节点

命令行配置的从节点,在从节点 Redis 服务重启后,从节点配置会失效,使用配置文件,则能保证重启不失效。

# 编辑主机 10.211.55.7 和 10.211.55.8 的 /etc/redis.conf 配置文件添加如下配置
vim /etc/redis.conf
slaveof 10.211.55.6 6379

# 重启从节点 Redis 服务
systemctl restart redis

redis 主从复制优点

  • 主从配置简单,能够做到数据冗余备份
  • 负载均衡,能够做到读写分离,提高整个节点的吞吐能力

redis 主从复制缺点

  • 不能自动的进行故障转移(在主节点失效时,从节点无法自动变换为主节点,需要通过其他的手段)
  • 数据的同步需要一个时间窗口,可能会导致从节点数据的暂时不一致
  • 在主节点发生故障时,数据还未来得及进行同步时,从节点的数据会与主节点的数据不一致
  • 单个主节点还是会出现缓存数据量过大的问题

猜你喜欢

转载自blog.csdn.net/chenfei3306/article/details/130027955