您的位置:首页 > 数据库 > Redis

Redis入门之浅谈主从复制(一)

2016-10-16 00:00 411 查看
Redis的复制:

1. 是什么:redis中的复制(master/slave)主从复制,主机数据更新后根据配置和策略自动同步到备机的master/slaver机制,master以写为主,slaver以读为主

2. 作用:读写分离、容灾恢复

今天我们来了解一下主从复制策略之一主二仆

顾名思义,这种策略的具体实现就是使用一台机器作为主机,两台机器作为备机(真正工作可能多台),主机主要是写入,备机主要是读取。需要注意的是,再使用主从复制的时候,是配置备机,主机不动(默认状态是master,从机需要改变master状态到slaver)。

配置命令:slaveof + 主机ip + 主机端口,一下是测试用例(单机版):

首先,既然要模拟三台机器,需要再不同的端口启动分别redis,那么我们需要复制三份配置文件(一主二仆共三个),然后对配置文件进行简单的修改,下面以6379(作为主机)来演示:

1. cp命令复制.conf文件,修改其中的几个配置参数:



    1>. pidfile /.../6379.pid;

    2>. 端口号是6379;



    3>. log文件:logfile "6379.log";



    4>. dump文件:dbfilename dump6379.rdb



其他配置文件与这个一样,就是使用对应额度端口号就可以了,起到区分的作用。

2. 现在就可以再不同的端口启动redis,启动之后的效果如图所示:



这是效果图,我们以端口6379的redis为主机,其他两个6380、6381作为从机使用。

3. 这个时候我们先使用info replication命令查看每个机器的状态,可以看到三个服务均是master,连接的slaver均是0.



4. 现在我们可以使用 slaveof命令来设置从机,让80、81端口的redis作为从机连接到79端口的redis,命令语法上文提到过,效果如下图所示:



可以看到连接之后再次使用 info replication查看,80、81端口已经变成slaver了,并且显示其连接的master就是127.0.0.1 8079这个redis。

现在重点来了,这个主从复制都有什么特性呢:

1. 一旦连接上主机,那么从机立即回复制主机上的所有数据给自己,并且,以后主机每次写入操作,都会复制一份给从机上面,上面的例子中,端口79的主机事先是有两条数据的,分别是k1、k2,现在连接上之后,主机再次存储一条k3。然后读取从机数据,效果如下:



可以看到,一旦连接上,那么主机链接前和连接后的所有数据都将复制一份给从机,这是rediis主从复制的一条策略;

2. 我们说再主从复制上,通常是主机负责写入,从机负责读取,那么,如果从机也写入操作会发生什么呢?我们举个例子看一看:



可以发现,对于只读的从机是没有办法读取数据的;

3(重点).如果主机挂掉了,那么回怎么样呢,从机会不会变成主机代替?下面我模拟一下这个过程:

 


如图所示,我先再再79主机上面shutdown,并且退出,然后,我再次查看从机状态,可以看到从机状态依然是slaver,也就是等待连接,待命,并且显示从机依然连接的是127.0.0.1 6379这个redis,只不过连接状态是down,那么现在,我再次启动6379redis:



可以看到,一旦重新启动主机redis,立即与从机连接上了(注意,这张图的从机的状态是我shutdown之后重启主机之前的状态,所以其连接状态显示down),重新连接之后,主机存储,从机依然回复制,即一切不变。

4.(重点):如果从机挂掉了,又会发生什么呢?

 


如图可以看到,我将左侧的80端口的从机shutdown了,然后再次连接,查看状态显示此时这个redis已经变成master了,并且连接数是0,这就是说,如果从机挂掉了,重新启动之后之前的连接也就断开了,若想使用必须想重新连接(需要注意的是,可以使用配置文件进行配置,这样即使从机重启,他也会自动连接对应的主机)。

总结:redis主从复制-一主二仆拥有特性:

1. 一旦转成从机,主机之前的所有数据也将会被备份

2. 如果主机与从机都执行set方法,那么从机失败,从机没有权限写入操作

3. 如果主机shutdown(死了),那么从机依然是slave原地待命,连接状态变成down,此时如果主机重启,主机再存储,从机以来可以获取,即连接不变

4. 如果从机死了,若再次重启,则变成master, ,断开连接,即,slaver与master断开连接之后,除非使用配置文件进行配置,要不然需要重新连接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux redis 主从复制