redis超详细篇7 redis主从复制(配置主从、薪火相传、反客为主)
上一篇我们讲了redis的持久化相关知识,本篇带领大家了解下主从复制
开篇
我们为啥需要做主从复制?
读写分离,性能扩展
容灾快速恢复
上诉两种理由大家都能理解吧,就不做赘述
下面江苏下如何做主从配置
主从配置
主从配置我们举例哈,分三个步骤进行
1.创建一个myredis文件夹复制redis配置文件
2.写一主两从配置文件
3.写主从命令
以下仅为测试案例:
我们新建一个myredis的文件夹,将redis目录下得redis.conf配置文件拷贝到这文件夹下
在这目录另外建立三个配置文件分别命名:redis6379.conf、redis6380.conf、redis6381.conf;
redis6379作为主服务器,其他两个作为从服务器
redis6379.conf、redis6380.conf、redis6381.conf,写入以下命令
```bash
include /root/microservice/myredis/redis.conf
pidfile /var/run/redis_6381.pid
port 6381
dbfilename dump6381.rdb
这里面要做一定的修改:include 是指向myredis目录下得redis.conf路径;pidfile定义当前进程文件;dbfilename 定义当前得服务得持久化文件名(这里记得三个文件对应相应的端口号哈)
接下来重载下三个conf文件(重载前记得查看redis所有进程,先杀死再重载,为了更好的看到效果)
查看效果
用redis-cli打开相应端口的服务,然后输入
info replication
查看每个redis服务状态,发现他们都是master主机形式,是因为我们还没有进行命令设置
设置两台从机
配置策略:配从不配主,只需要在从机上设置,命令为
slaveof ip port
ip port就是主机得ip 和端口
再看看效果:
我们发现两台从机已经变成了slave,并且有主机的相关信息,但还有一个问题,就是此时它连接主机的状态是:down。这说明没有连接上主机,经过日志调查,发现报错了:MASTER aborted replication with an error: NOAUTH Authentication required.
这段错误是主机中止了复制,出现错误:没有权限;
报错解决:
从机在配置主机的时候加上主机的密码,尝试过用命令去实现,发现不行,最终的解决方式是在conf文件中加上
masterauth 123456
从机的配置中加上了主机的密码验证,这样在设置了主机时,主机就能复制信息到从机了
命令改完之后,重新加载下,我们再次看效果,发现主机的连接状态就变成了:up
主机也能看到从机的相关信息了
我们在主机上写入个键值看看从机能不能收到
经过测试,我们发现,主机上写入一个值,无论是主从之前的还是之后的,从机都能完整的复制过来,有一点要注意:从机没办法进行写入
到这里为止,我们的主从配置就算入门了。
总结下:
1.设置配置文件
2.命令代码设置主机
3.重新加载
缺点:用命令选择主机服务器的方式有点不太可取,如果服务器一旦挂掉,重启之后它还是指定自己为主机,需要重新指定;
解决:我们解决办法是在conf文件进行指定主机的ip 和端口。
讲到这顺便讲一下主从机制的一些特点
主从特点
一主二仆
主机挂断之后,从机正常,从机不会上位,依然指定的是主机;只是主机的连接状态时:down。待主机恢复正常后,从机指定主机的连接状态为:up
一句话就是:大哥依旧是大哥
薪火相传
上一个slave可以是下一个slave的master,slave同样可以接收其他slave的连接和同步请求;该slave作为链条中的下一个master,可以有效地减轻master的写压力,去中心化风险。
什么意思:就是slave可以发展自己的下线,把自己作为一个master
举个例子:你是公司的研发经理,你下面有三个研发,后来公司扩招,找了20个研发,这时候你就需要有三四个小组长来管理下,你只要对接其中三四个小组长就可以了。剩下的都是小组长的小弟
这么做也有个风险:一旦某个slave宕机了,后面的slave没法备份;无论主机挂了,从机还是从机的小弟都无法进行数据同步
反客为主
有没有想过这么一个问题,如果主机突然挂了,还想让服务正常运行下去,该怎么办么。我们当然有办法,
主要在某一从机中选出一台,然后输入以下命令
slave no one
可以从机变成主机
举例:如果你的经理走了,这时候群龙无首,需要选出一个人来顶替;这就是反客为主的概念了
到这你可能说:前面不是说了,大哥一直是大哥,这里怎么变成反客为主了。我们不要抠字眼,这里反客为主是大哥走了,其他人第题,以前的大哥不影响在你心中的位置
最后来讲下主从复制的远离
复制原理
1.当从连接上主服务器之后,从服务器向主服务器发送进行数据同步消息
2.主服务器接受到从服务器发送过来的同步消息,把主服务数据进行持久化,rdb文件,把rdb文件发送 从服务器,从服务器拿到rdb进行读取
3.每次主服务器进行写操作之后和从服务器进行数据同步
未完待续:下一篇我们继续将redis的其他特性