关注我

    我的微信
在线咨询 x
在线咨询
有什么可以帮到你
点击咨询

Redis 实现主从复制

简介为了避免单点故障,我们需要将数据复制多份部署在多台不同的服务器上,即使有一台服务器出现故障其他服务器依然可以继续提供服务。

一、主从复制--读写分离


通过持久化功能,Redis 保证了即使在服务器重启的情况下也不会丢失(或少量丢失)数据,但是由于数据是存储在一台服务器上的,如果这台服务器出现故障,比如硬盘坏了,也会导致数据丢失。为了避免单点故障,我们需要将数据复制多份部署在多台不同的服务器上,即使有一台服务器出现故障其他服务器依然可以继续提供服务。

这就要求当一台服务器上的数据更新后,自动将更新的数据同步到其他服务器上,那该怎么实现呢?

答:Redis 的主从复制。


Redis主从架构.png


Redis 提供了复制(replication)功能来自动实现多台 redis 服务器的数据同步(如每天 19 点新闻联播,基本从 cctv1-8,各大卫视都会播放)

我们可以通过部署多台 redis,并在配置文件中指定这几台 redis 之间的主从关系,主负责写入数据,同时把写入的数据实时同步到从机器,这种模式叫做主从复制,即 master/slave,并且 redis 默认 master 用于写slave 用于读,向 slave 写数据会导致错误


二、Redis 主从复制实现(master/salve)


修改配置文件,启动时,服务器读取配置文件,并自动成为指定服务器的从服务器,从而构成主从复制的关系。

实现步骤:

模拟多 Reids 服务器,在一台已经安装 Redis 的机器上,运行多个 Redis 应用模拟多 个 Reids 服务器。一个 Master,两个 Slave。


1、新建三个 Redis 的配置文件


如果 Redis 启动,先停止。

作为 Master 的 Redis 端口是 6380

作为 Slaver 的 Redis 端口分别是 6382 , 6384

从原有的 redis.conf 拷贝三份,分别命名为 redis6380.conf, redis6382.conf , redis6384.conf


Redis主从架构.png


2、编辑 Master 配置文件


编辑 Master 的配置文件 redis6380.conf : 在空文件加入如下内容

include /usr/local/redis-4.0.13/redis.conf
daemonize yes
port 6380
pidfile /var/run/redis_6380.pid
logfile 6380.log
dbfilename dump6380.rdb


配置项说明:

include :包含原来的配置文件内容。/usr/local/redis-4.0.13/redis.conf 按照自己的目录设置。

daemonize:yes 后台启动应用,相当于 ./redis-server & 的作用。

port : 自定义的端口号

pidfile : 自定义的文件,表示当前程序的 pid ,进程 id。

logfile:日志文件名

dbfilename:持久化的 rdb 文件名


3、编辑 Slave 配置文件


编辑 Slave 的配置文件 redis6382.conf 和 redis6384.conf。在空文件加入如下内容

①:redis6382.conf:

include /usr/local/redis-4.0.13/redis.conf
daemonize yes
port 6382
pidfile /var/run/redis_6382.pid
logfile 6382.log
dbfilename dump6382.rdb
slaveof 127.0.0.1 6380    # 当前是 127.0.0.0 端口 6380 这个 Master 的从


配置项说明:

slaveof :表示当前 Redis 是谁的从。当前是 127.0.0.0 端口 6380 这个 Master 的从。

②:redis6384.conf:

include /usr/local/ redis-4.0.13/redis.conf
daemonize yes
port 6384
pidfile /var/run/redis_6384.pid
logfile 6384.log
dbfilename dump6384.rdb
slaveof 127.0.0.1 6380    # 当前是 127.0.0.0 端口 6380 这个 Master 的从


4、启动服务器 Master/Slave 都启动


启动方式 ./redis-server 配置文件

启动 Redis,并查看启动进程


Redis主从架构.png


5、查看配置后的服务信息


命令:

①: Redis 客户端使用指定端口连接 Redis 服务器

./redis-cli -p 端口

②:查看服务器信息

info replication

登录到 Master:6380


Redis主从架构.png


查看当前服务信息

在客户端的 Redis 内执行命令 info replication

Master 服务的查看结果:


Redis主从架构.png


在新的 Xshell 窗口分别登录到 6382 ,6384 查看信息


Redis主从架构.png


6384 也登录内容同 6382。


6、向 Master 写入数据


在 6380 执行 flushall 清除数据,避免干扰的测试数据。生产环境避免使用。


Redis主从架构.png


7、在从 Slave 读数据


6382,6384 都可以读主 Master 的数据,不能写


Redis主从架构.png


Slave 写数据失败


Redis主从架构.png