【Redis学习总结】6. Redis的复制(Master/Slave)

1.定义

主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主

2. 测试

实验环境:一个虚拟机 CentOS 

1. 在/myredis/目录下拷贝3个redis.conf文件

【Redis学习总结】6. Redis的复制(Master/Slave)

2. 开启daemonize yes

【Redis学习总结】6. Redis的复制(Master/Slave)

3.指定pid文件名字

【Redis学习总结】6. Redis的复制(Master/Slave)

其余2台服务器的pid名字分别是redis6380.pid  redis6381.pid 

 

4.指定端口

【Redis学习总结】6. Redis的复制(Master/Slave)

其余2台服务器的端口分别是6380 6381

 

5.log文件名字

【Redis学习总结】6. Redis的复制(Master/Slave)

其余2台服务器的log文件名字分别是6380.log 6381.log

 

6. 指定dump.rdb名字

【Redis学习总结】6. Redis的复制(Master/Slave)

其余2台服务器的dump.rdb名字分别是dump6380.rdb dump6381.rdb

 

7.启动三台服务器

【Redis学习总结】6. Redis的复制(Master/Slave)

【Redis学习总结】6. Redis的复制(Master/Slave)

 

【Redis学习总结】6. Redis的复制(Master/Slave)

 

查看redis服务器的启动情况

【Redis学习总结】6. Redis的复制(Master/Slave)

8. 我们使用 info relication 命令可以看到服务器的信息

【Redis学习总结】6. Redis的复制(Master/Slave)

【Redis学习总结】6. Redis的复制(Master/Slave)

【Redis学习总结】6. Redis的复制(Master/Slave)

 

9. 6379作为Master,6380 6381作为slave(主机不需要变动,从机需要变动)

主机插入数据(观察是否可以实现从机的自动备份)

【Redis学习总结】6. Redis的复制(Master/Slave)

【Redis学习总结】6. Redis的复制(Master/Slave)

【Redis学习总结】6. Redis的复制(Master/Slave)

我们可以看到从机做了自动备份,而且首次是全量备份!

我们使用info replication观察服务器信息

6379主机:

【Redis学习总结】6. Redis的复制(Master/Slave)

6380 6381 从机:

【Redis学习总结】6. Redis的复制(Master/Slave)

 

3. 主从复制的相关问题

(1)从机是否可以写

主机:

【Redis学习总结】6. Redis的复制(Master/Slave)

从机

【Redis学习总结】6. Redis的复制(Master/Slave)

(2)主机shutdown后,从机会原地待命(当然可以配置不原地待命)

【Redis学习总结】6. Redis的复制(Master/Slave)

【Redis学习总结】6. Redis的复制(Master/Slave)

【Redis学习总结】6. Redis的复制(Master/Slave)

当主机从新启动之后,从机会自动与主机实现主仆关系,也就是说自动成为主机的奴隶,自动备份主机信息。

【Redis学习总结】6. Redis的复制(Master/Slave)

【Redis学习总结】6. Redis的复制(Master/Slave)

【Redis学习总结】6. Redis的复制(Master/Slave)

(3)从机挂掉后,再次启动时身份是master,若是想要备份原主机的信息需要再次执行slaveof命令

【Redis学习总结】6. Redis的复制(Master/Slave)

 

4. 薪火相传

上一个Slave可以是下一个slave的Master,Slave同样可以接收其他slaves的连接和同步请求,那么该slave作为了链条中下一个的master,可以有效减轻master的写压力

【Redis学习总结】6. Redis的复制(Master/Slave)

【Redis学习总结】6. Redis的复制(Master/Slave)

【Redis学习总结】6. Redis的复制(Master/Slave)

【Redis学习总结】6. Redis的复制(Master/Slave)

 

5.反客为主

主机shutdown之后,手动配置从机中的一员成为新的主机,手动配置其余的从机跟随新主机

【Redis学习总结】6. Redis的复制(Master/Slave)

手动配置从机中的一员成为新的主机

【Redis学习总结】6. Redis的复制(Master/Slave)

手动配置其余的从机跟随新主机

【Redis学习总结】6. Redis的复制(Master/Slave)

 

测试主从

【Redis学习总结】6. Redis的复制(Master/Slave)

【Redis学习总结】6. Redis的复制(Master/Slave)

 

6.哨兵模式

反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库

(1)重新配置主从,6376作为Master,6380 6381 作为Slave

(2)自定义的/myredis目录下新建sentinel.conf文件,名字绝不能错

【Redis学习总结】6. Redis的复制(Master/Slave)

【Redis学习总结】6. Redis的复制(Master/Slave)

(3)配置哨兵,填写内容 vim sentinel.conf

             sentinel monitor 被监控数据库名字(自定义) 127.0.0.1 6379 1

上面最后一个数字1,表示主机挂掉后salve投票看让谁接替成为主机,得票数多少后成为主机

【Redis学习总结】6. Redis的复制(Master/Slave)

(4)启动哨兵

【Redis学习总结】6. Redis的复制(Master/Slave)

【Redis学习总结】6. Redis的复制(Master/Slave)

查看日志信息:

【Redis学习总结】6. Redis的复制(Master/Slave)

可以看出哨兵启动了。监视6379主机,巡逻6380 6381从机!

 

测试:

主机shutdwn了,哨兵监控到6379挂掉,开始组织投票选新主机

【Redis学习总结】6. Redis的复制(Master/Slave)

【Redis学习总结】6. Redis的复制(Master/Slave)

可以看出哨兵选取的新主机是6380

【Redis学习总结】6. Redis的复制(Master/Slave)

而其余的从机会跟随新主机

【Redis学习总结】6. Redis的复制(Master/Slave)

所以把哨兵视为自动的反客为主!

如果之前的挂掉的主机又好用了,原主机被哨兵安排成为新主机的奴隶

【Redis学习总结】6. Redis的复制(Master/Slave)

 

7.复制原理

slave启动成功连接到master后会发送一个sync命令,Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步。

全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。

增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步

但是只要是重新连接master,一次完全同步(全量复制)将被自动执行

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