Redis主从复制前言
通过持久化功能,Redis保证了即使在服务器重启的情况下也不会丢失(或少量丢失)数据,但是由于数据是存储在一台服务器上的,如果这台服务器出现故障,比如硬盘坏了,也会导致数据丢失。
为了避免单点故障,我们需要将数据复制多份部署在多台不同的服务器上,即使有一台服务器出现故障其他服务器依然可以继续提供服务。
这就要求当一台服务器上的数据更新后,自动将更新的数据同步到其他服务器上,这时候就用到了Redis的主从复制。
Redis提供了复制(replication)功能来自动实现多台redis服务器的数据同步(每天19点 新闻联播,基本从cctv1-8,各大卫视都会播放)
我们可以通过部署多台redis,并在配置文件中指定这几台redis之间的主从关系,主负责写入数据,同时把写入的数据实时同步到从机器,这种模式叫做主从复制,即master/slave,并且redis默认master用于写,slave用于读,向slave写数据会导致错误。
(一)Redis主从复制配置
方式1:修改配置文件,启动时,服务器读取配置文件,并自动成为指定服务器的从服务器,从而构成主从复制的关系
方式2: ./redis-server --slaveof <master-ip> <master-port>,在启动redis时指定当前服务成为某个主Redis服务的从Slave
三台linux
主redis | 192.168.184.133 |
从redis | 192.168.184.135 |
从redis | 192.168.184.136 |
方式1的实现步骤:
-
在3台linux都装好redis,参考: Redis单机安装
-
在135,136机器上修改从redis的配置
-
slaveof 主ip 主端口
-
masterauth 主密码
-
133,135,136服务器上的redis依次启动
-
登录133主redis登录
-
输入:info replication
-
登入135从redis
-
登入136从redis
-
向主redis写入数据,flushall清空数据,避免干扰
-
在135,136从redis都可以读到数据库
-
向从redis写入数据失败,默认slave-read-only yes,如果为no则可以向从写数据
容灾处理
当Master服务出现故障,需手动将slave中的一个提升为master, 剩下的slave挂至新的master上(冷处理:机器挂掉了,再处理)
命令:
-
slaveof no one,将一台slave服务器提升为Master (提升某slave为master)
-
slaveof 192.168.184.135 6379(将slave挂至新的master上)
-
将133主redis关闭
-
将135从redis提升为主redis
-
info replication
-
在136从redis上执行
-
info replication,显示136从redis为135主redis的从
-
现在主从关系为135为主,136为从
- 将原来的133redis添加到主从结构中
-
重新启动133服务器上的redis
-
登录133redis客户端,执行slaveof 192.168.184.135 6379
-
显示OK,但是看控制台显示为,一看就是不能从主上复制,需要密码,查看133配置文件发现没有改masterauth
-
修改135主redis密码
-
重新在133从redis上执行:slaveof 192.168.184.135 6379,显示日志信息为
-
至此主从模式为:135主redis,133从redis,136从redis