Redis主从复制

  • 1、Redis主从复制:
  • 2、Redis主从复制能干什么?
  • 3、相关操作命令
  • 3.1 SLAVEOF host port
  • 3.2 ROLE
  • 3.3 info replication
  • 4、读写分离实例
  • 4.1、配从库不配主库
  • 4.2、从库配置:
  • 4.3 修改配置文件细节操作
  • 4.3.1 拷贝多个redis.conf文件
  • 4.3.2 开启daemonize yes
  • 4.3.3 修改pid文件名字
  • 4.3.4 指定端口
  • 4.3.5 设置Log文件名字
  • 4.3.6 修改Dump.rdb文件名字
  • 5、主从复制
  • 5.1 一主二仆
  • 5.1.1 启动并查看主从复制信息
  • 5.1.2 将6380和6381端口配置成6379端口的从服务器
  • 5.1.3 日志查看
  • 5.1.4 从机是否可以写?(验证读写分离)
  • 5.1.5 书机SHUTDOWN后情况如何?从机是上位还是原地待命?
  • 5.1.6 主机又回来后,主机新增记录,从机能否顺利复制?
  • 5.1.7 一台从机宕机后,依照原有它能跟上大部队吗?

1、Redis主从复制:

Redis支持简单且以用的主从复制(master-slave replication)功能,该功能可以让从服务器(slave server)成为主服务器(master server)的精确复制品。

2、Redis主从复制能干什么?

  • 读写分离
  • 容灾恢复

3、相关操作命令

3.1 SLAVEOF host port

通过执行 SLAVEOF host port 命令,可以将当前服务器转变为指定服务器的从属服务器(slave server)。

如果当前服务器已经是某个主服务器(master server)的从属服务器,那么执行 SLAVEOF host port
将使当前服务器停止对旧主服务器的同步,丢弃旧数据集,转而开始对新主服务器进行同步。 另外,对一个从属服务器执行命令 SLAVEOF NO
ONE 将使得这个从属服务器关闭复制功能,并从从属服务器转变回主服务器,原来同步所得的数据集不会被丢弃。 利用“SLAVEOF NO ONE
不会丢弃同步所得数据集”这个特性,可以在主服务器失败的时候,将从属服务器用作新的主服务器,从而实现无间断运行。

3.2 ROLE

返回实例在复制中担任的角色, 这个角色可以是 master 、 slave 或sentinel。

除了角色之外, 命令还会返回与该角色相关的其他信息, 其中: 主服务器将返回属下从服务器的 IP 地址和端口。
从服务器将返回自己正在复制的主服务器的 IP 地址、端口、连接状态以及复制偏移量。
Sentinel 将返回自己正在监视的主服务器列表。

3.3 info replication

查看主/从复制信息

4、读写分离实例

4.1、配从库不配主库

4.2、从库配置:

slaveof 主库IP 主库端口

说明:每次与master断开连接之后,都需要重新连接,除非你配置井redis.conf文件

4.3 修改配置文件细节操作

4.3.1 拷贝多个redis.conf文件

cd /usr/local/bin
ll

redis slave失败 redis slaveof no one_读写分离


复制redis.conf文件:

cp redis.conf redis6379.conf
cp redis.conf redis6380.conf
cp redis.conf redis6381.conf

redis slave失败 redis slaveof no one_linux_02


这里只演示下修改redis6379.conf的配置,其他两个就是把6379分别换成6380和6381即可

vi redis6379.conf

4.3.2 开启daemonize yes

redis slave失败 redis slaveof no one_服务器_03

4.3.3 修改pid文件名字

redis slave失败 redis slaveof no one_读写分离_04

4.3.4 指定端口

redis slave失败 redis slaveof no one_服务器_05

4.3.5 设置Log文件名字

redis slave失败 redis slaveof no one_redis_06

4.3.6 修改Dump.rdb文件名字

redis slave失败 redis slaveof no one_linux_07

5、主从复制

即一个主服务器,两个从服务器

5.1 一主二仆

这里需要启动三个终端,并分别使用上面配置好的6379、6380、6381端口

5.1.1 启动并查看主从复制信息

6379端口:

redis slave失败 redis slaveof no one_服务器_08


redis slave失败 redis slaveof no one_主从复制_09

redis slave失败 redis slaveof no one_linux_10


设置几个值:

set k1 v1
set k2 v2
set k3 v3
set k3 v4

6380端口:

redis slave失败 redis slaveof no one_主从复制_11


6381端口:

redis slave失败 redis slaveof no one_linux_12

可以看到没有配置之前,role的值都是master,即都是主服务器

5.1.2 将6380和6381端口配置成6379端口的从服务器

6380端口:

slaveof 127.0.0.1 6379

redis slave失败 redis slaveof no one_服务器_13


redis slave失败 redis slaveof no one_主从复制_14


取值:

redis slave失败 redis slaveof no one_主从复制_15


取主服务器设置的值也是没问题的

6381端口:

SLAVEOF 127.0.0.1 6379

redis slave失败 redis slaveof no one_主从复制_16


redis slave失败 redis slaveof no one_读写分离_17

可以看到两个从服务器的role配置项的值变为了slave

5.1.3 日志查看

cd /usr/local/bin
ll

redis slave失败 redis slaveof no one_redis_18

5.1.4 从机是否可以写?(验证读写分离)

假设三台服务器都要set k6(假设主机抢先设置)
主服务器:

set k6 v6

redis slave失败 redis slaveof no one_主从复制_19


6380:

set k6 v66

redis slave失败 redis slaveof no one_redis_20


6381:

set k6 v666

redis slave失败 redis slaveof no one_linux_21


从结果来看,从机是不能写的,符合读写分离

5.1.5 书机SHUTDOWN后情况如何?从机是上位还是原地待命?

先关闭主机(6379):

redis slave失败 redis slaveof no one_服务器_22


查看从机的主从配置信息:

redis slave失败 redis slaveof no one_服务器_23


redis slave失败 redis slaveof no one_linux_24


可以看到,从机还是从机,咸鱼翻身还是咸鱼,连接状态变为了down,从机原地待命

5.1.6 主机又回来后,主机新增记录,从机能否顺利复制?

重启主机,并设置值set k7 v7

redis slave失败 redis slaveof no one_redis_25


从机获取k7:

6380:

redis slave失败 redis slaveof no one_读写分离_26


6381:

redis slave失败 redis slaveof no one_redis_27

从结果可以看到,从机可以复制

5.1.7 一台从机宕机后,依照原有它能跟上大部队吗?

将6380端口的从机断开:

redis slave失败 redis slaveof no one_服务器_28


设置主机(6379)设置set k8 v8

redis slave失败 redis slaveof no one_linux_29

6381端口:

没问题

redis slave失败 redis slaveof no one_linux_30


6380端口由于宕机了,我们重新启动后再获取k8

redis slave失败 redis slaveof no one_redis_31


redis slave失败 redis slaveof no one_主从复制_32


查看主从配置信息:从下图看这是6380端口的role已经编程master,和原来6379的主机断开了

redis slave失败 redis slaveof no one_linux_33


尝试获取k8

get k8

redis slave失败 redis slaveof no one_服务器_34


再次将6380配置为6379的从机:

slaveof 127.0.0.1 6379

再次获取k8

get k8

redis slave失败 redis slaveof no one_redis_35