概述
主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。
默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。
目的:
-
故障恢复:虽然redis持久化可以避免数据的丢失,但是如果redis服务器的硬盘损坏,数据就有可能丢失。redis主从复制机制就可以避免这种单薄故障。
-
数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
-
负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高redis服务器的并发量。
-
高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是redis高可用的基础。
配置
在从redis
的redis.conf
添加
slaveof 主数据库地址 主数据库端口
# slaveof <masterip> <masterport>
slaveof 127.0.0.1 6379
主数据库不需要任何配置
重启从redis即可。
命令设置主从复制:slaveof 192.168.47.146 6379
redis-cli -h 192.168.47.146 -p 6380
192.168.47.146:6380> slaveof 192.168.47.146 6379
OK
实战
1. 一台机器上的不同redis实例
主节点监听6379端口,从节点监听6380端口
步骤:
-
复制一份redis.conf到某个目录并做相应的修改
redis.conf -
cd到该目录执行
redis-server redis.conf
启动redis服务
2.两台不同的机器
需要外网访问redis
,参考:https://www.jianshu.com/p/bb555f153cf1
A机器(主redis)
修改redis.conf
,注释bind
,修改protected-mode
为no
B机器(从redis)
修改redis.conf
添加slaveof 主数据库地址 主数据库端口
# slaveof <masterip> <masterport>
slaveof 192.168.47.146 6379
断开复制
slaveof no one
$ redis-cli
127.0.0.1:6379> slaveof no one
OK
断开复制,从节点又变回为主节点。
主从在线切换
查看是否有主从关系:config get slaveof
$ redis-cli -h 192.168.47.146 -p 6380
192.168.47.146:6380> config get slaveof
1) "slaveof"
2) "192.168.47.146 6379"
192.168.47.146:6380>
设置为主服务: slaveof no one
192.168.47.146:6380> slaveof no one
OK
192.168.47.146:6380>
网友评论