Redis集群

Redis集群

 

Redis的复制(Master/Slave)

介绍

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

 

作用

主从备份:防止主机宕机

读写分离:分担master的任务

任务分离:如从服分别分担备份工作与计算工作

容灾恢复:灾难恢复指的是在灾难发生后,将系统恢复到正常运作的能力。

 

1.一主多仆

2.薪火相传

3.反客为主

4.哨兵模式(sentinel)

5.复制原理

6.复制的缺点

 

准备工作:

我们将在一个机器上运行三个reids服务(进程)模拟三台redis主机。

1.我们在与bin目录同级下创建目录myredis,将redis.conf拷贝一份到myredis下。

2.拷贝多个redis.conf文件

cp redis.conf redis1.conf
cp redis.conf redis2.conf
cp redis.conf redis3.conf
注意:这样myredis目录就有四个配置文件:redis.conf、redis1.conf、redis2.conf、redis3.conf

3.配置redis1.conf、redis2,conf、redis3.conf

Redis1:
开启daemonize yes:daemonize yes
pid文件名字:Pidfile /var/run/redis1.pid
指定端口:port 6379
Log文件名字:Logfile “redis1.log”
Dump.rdb名字:dbfilename dump1.rdb
Redis2:
开启daemonize yes:daemonize yes
pid文件名字:Pidfile /var/run/redis2.pid
指定端口:port 6380
Log文件名字:Logfile “redis2.log”
Dump.rdb名字:dbfilename dump2.rdb
Redis3:
开启daemonize yes:daemonize yes
pid文件名字:Pidfile /var/run/redis3.pid
指定端口:port 6381
Log文件名字:Logfile “redis3.log”
Dump.rdb名字:dbfilename dump3.rdb

 

四个注意点:

1.配主不配从:如果选择redis1作为主机,则redis2、redis3需要设置命令,主机不需要。

2.从库配置命令:从机要跟从主机,命令:SLAVEOF 主库IP 主库端口。

3.每次与master断开之后,主从关系断开,从机需要重新连接,除非你配置进redis.conf文件。

4.info replication:查看redis角色。

 

一主多仆

  一个主机多个从机。

 注意:79端口上的为主机,80、81为从机。

终端1
redis-server redis1.conf
redis-cli -p 6379
info replication
终端2
redis-server redis2.conf
redis-cli -p 6380
SLAVEOF 127.0.0.1 6379
info replication
终端3
redis-server redis2.conf
redis-cli -p 6381
SLAVEOF 127.0.0.1 6379
info replication

Redis集群_第1张图片Redis集群_第2张图片Redis集群_第3张图片

 

 主从复制

   从机会同步主机操作,甚至同步之前主机的操作。

 Redis集群_第4张图片Redis集群_第5张图片Redis集群_第6张图片

读写分离

  只有主机可以写,从机只能读。

 Redis集群_第7张图片Redis集群_第8张图片

主机宕机

   主机宕机后,从机原地待命,如果主机恢复,则继续干活。

 Redis集群_第9张图片Redis集群_第10张图片Redis集群_第11张图片

从机宕机

   从机宕机后,再次启动就会是主机角色,所以需要连接原本的主机。

 Redis集群_第12张图片Redis集群_第13张图片

 

 

 

 

薪火相传

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

中途变更转向:会清楚之前的数据,重新建立拷贝最新的。

这里:

80:

SLAVEOF 127.0.0.1 6379

81:

SLAVEOF 127.0.0.1 6380

 Redis集群_第14张图片Redis集群_第15张图片Redis集群_第16张图片

注意:在这里80是79的从机,又是81的主机,所以它到底是什么角色呢?

上面显示了连接的主机

下面显示了连接的从机

Redis集群_第17张图片

 

 

 

 反客为主

   刚才上面主机宕机时,从机原地待命不动,在实际中当然不能这样做,我们要在从机中选择一个做主机。

这里还是以79宕机为背景,以下是配置。

80:

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

81:

SLAVEOF 127.0.0.1 6380

Redis集群_第18张图片Redis集群_第19张图片Redis集群_第20张图片

 

 

 

哨兵模式(sentinel)

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

  1. 恢复一主二仆(79master8081salve
  2. 自定义的/myredis目录下新建sentinel.conf文件,名字绝不能错:touch sentinel.conf
  3. 配置哨兵,填写内容:sentinel monitor 被监控主数据库名字(自己起名字) 127.0.0.1 6379 1        注:上面最后一个数字1,表示主机挂掉后salve投票看让谁接替成为主机,得票数多Redis集群_第21张图片
  4. 启动哨兵:
redis-sentinel /myredis/sentinel.conf

  注:上述目录按照各自的实际情况配置,可能目录不同

    5.正常主从演

    6.原有的master挂了

Redis集群_第22张图片

 7.投票新选(redis帮你完成)

 8.重新主从继续开工,info replication查查看

 Redis集群_第23张图片Redis集群_第24张图片

问题:如果之前的master重启回来,会不会双master冲突?

不会,它的身份会变成从机,服从现有的主机。

练习

一组sentinel能同时监控多个Master。

 

 

复制的缺点

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

 

你可能感兴趣的:(Redis集群)