redis的主从复制、读写分离master/slave 的详细使用解读过程

 

redis的复制

redis的复制也就是我们所说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主。

本次在Linux上使用的redis版本为:5.0.3

[root@localhost etc]# redis-server --version
Redis server v=5.0.3 sha=00000000:0 malloc=jemalloc-5.1.0 bits=64 build=afabdecde61000c3

本次用一个redis开启三个服务来模拟多台机器之间主从复制 ,在Linux测试中一共开了4个终端窗口。

工作中使用原则:

1.配从(库)不配主(库)
2.从库配置----》slaveof 主库IP主库端口  
2.1  每次从库与master断开之后,都需要重新连接,除非你配置进redis.conf文件
2.2  info replication  用于查看redis信息
3.修改配置文件细节操作。

3.1 拷贝多个redis.conf文件

[root@localhost etc]# cd /usr/local/redis/etc
[root@localhost etc]# cp redis_bak.conf redis6379.conf
[root@localhost etc]# cp redis_bak.conf redis6380.conf
[root@localhost etc]# cp redis_bak.conf redis6381.conf
[root@localhost etc]# ls
redis6379.conf  redis6380.conf  redis6381.conf  redis_bak.conf

开始修改 redis6379.conf   redis6380.conf    redis6381.conf   三个配置文件中的内容,此次以修改redis6379.conf为例,redis6380.conf  redis6381.conf  的修改方式类似。

[root@localhost etc]# vim redis6379.conf

3.2 开启daemonize yes

3.3 pid文件名字

3.4 指定端口

3.5 log文件名字

3.6 dump.rdb名字

待三个配置文件都配置好后。

4.常用3招。

一主二仆:

一个master,多个slave

薪火相传:

上一个Slave可以是下一个slave的Master,Slave同样可以接收其他slaves的连接和同步请求,那么该slave作为了链条中下一个的master,可以有效减轻master的写压力
中途变更转向:会清除前的数据,重新建立拷贝最新的
Slaveof 新主库IP新主库端口

反客为主:

主机发生故障,从机上来接替主机

 

redis的主从复制、读写分离master/slave 的详细使用解读过程_第1张图片

redis的主从复制、读写分离master/slave 的详细使用解读过程_第2张图片

redis的主从复制、读写分离master/slave 的详细使用解读过程_第3张图片 情况一:一个master,多个slave

redis的主从复制、读写分离master/slave 的详细使用解读过程_第4张图片

redis的主从复制、读写分离master/slave 的详细使用解读过程_第5张图片
redis的主从复制、读写分离master/slave 的详细使用解读过程_第6张图片

 redis的主从复制、读写分离master/slave 的详细使用解读过程_第7张图片

redis的主从复制、读写分离master/slave 的详细使用解读过程_第8张图片

情况二:薪火相传——链条式

 redis的主从复制、读写分离master/slave 的详细使用解读过程_第9张图片

redis的主从复制、读写分离master/slave 的详细使用解读过程_第10张图片

情况三:反客为主

SLAVEOF no one   使当前数据库停止与其他数据库的同步,转成单独的主数据库

redis的主从复制、读写分离master/slave 的详细使用解读过程_第11张图片

 redis的主从复制、读写分离master/slave 的详细使用解读过程_第12张图片

 

复制原理

  • Slave启动成功连接到master后会发送一个sync命令Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步
  • 全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
  • 增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步
  • 但是只要是重新连接master,一次完全同步(全量复制)将被自动执行

 

哨兵模式(反客为主的自动版——主库故障,自动投票在从库中选出一个主库) 

 整体步骤:

  1. 调整结构,6379带着6380、6381
  2. 自定义的/redis/etc录下新建sentinel.conf文件,名字绝不能错
  3. sentinel monitor 被监控数据库名字(自己起名字)127.0.0.1 6379 1
  4. 上面最后一个数字1,表示主机挂掉后salve投票看让谁接替成为主机,得票数多的成为主机
  5. 启动哨兵
  6. 正常主从演示
  7. 原有的master挂了
  8. 投票新选
  9. 重新主从继续开工,info replication查查看

redis的主从复制、读写分离master/slave 的详细使用解读过程_第13张图片

通过指令   touch  【文件名】   创建一个名为 sentinel.conf 的配置文件。

 redis的主从复制、读写分离master/slave 的详细使用解读过程_第14张图片

redis的主从复制、读写分离master/slave 的详细使用解读过程_第15张图片

 redis的主从复制、读写分离master/slave 的详细使用解读过程_第16张图片

注意:哨兵模式检测到故障需要几秒钟才能检测到 

redis的主从复制、读写分离master/slave 的详细使用解读过程_第17张图片

redis的主从复制、读写分离master/slave 的详细使用解读过程_第18张图片 redis的主从复制、读写分离master/slave 的详细使用解读过程_第19张图片

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

你可能感兴趣的:(redis)