Redis主从复制

Scroll Down

Redis主从复制

Redis 主从复制

配从库

配从不配主

配置文件中

  1. daemonize yes
  2. pid 文件
  3. 指定端口
  4. Log文件
  5. Dump.rdb

保证这些配置不会影响一台机器启动多个redis,如果使用多台虚拟机或者服务器就没事了

开始配置

输入info replication查看当前状态

如果是一开始,所有redis的身份都是master

接下来给主机加一些键

set t1 v1
set t2 v2

然后使用

slaveof 127.0.0.1 6379

开始变成奴隶

info replication

查看现在的身份是奴隶

注意此时

master_link_status:up

如果是up才是成功

此时在slave中使用

keys *

查看到刚刚主机的键从机也同步到了

注意:此时从机是只读

如果进行了写,会报:READONLY You can't write against a read only replica.

中断情况

  1. 如果主机挂了,从机还是保持slave状态,自动重连
  2. 如果从机挂了,需要和master进行重连,其他从机不受影响(除非配置文件中配了)

反客为主

从机变成主机

使用

slaveof no one

但是此时名下不会有任何奴隶

配置的注意事项

多台服务器配置集群需要注意

  1. bind 0.0.0.0,此项格外注意,这决定了主机监听的ip,0.0.0.0是所有ip
  2. 防火墙问题,开放端口
  3. 密码问题
  4. 保证能ping通
  5. 保证在同一网段

复制的原理

  1. Slave 启动成功连接到master后会发送一个sync命令
  2. Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据命令集,在后阳台进程执行完毕后,master将传送整个数据文件到slave,并一次同步
  3. 全量复制:slave收到数据库文件后,将其存盘并加载到内存
  4. 增量复制:master将新收集到的命令一次传给slave,完成同步
  5. 只要重新连接master,一次全量复制将被执行

哨兵模式

如果主机挂了,剩下的从机中会选出一个主机

建立sentinel.conf

sentinel monitor 被监控主机的名 127.0.0.1 6379 1

sentinel monitor 被监控主机名 主机ip 端口 (谁得票超过1票就成为主机)

启动哨兵

./redis-sentinel 哨兵配置文件地址

如果主机挂了,会自动组织投票和选出主机

如果此时主机回来了,会变成slave

一组sentinel能监控多个master

复制的问题

由于所有写操作都先在Master中操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定延迟,当系统很繁忙的时候,延迟问题更加严重,Slave机器数量增加也会使这个问题更加严重