通过持久化功能,Redis保证了即使在服务器重启的情况下也不会损失(或少量损失)数据。但是由于数据是存储在一台服务器上的,如果这台服务器的硬盘出现故障,也会导致数据丢失。为了避免单点故障,我们希望将数据库复制多个副本以部署在不同的服务器上,即使有一台服务器出现故障其他服务器依然可以继续提供服务。这就要求当一台服务器上的数据库更新后,可以自动将更新的数据同步到其他服务器上,Redis提供了复制(replication)功能可以自动实现同步的过程。
配置方法
-
通过配置文件 从数据库的配置文件中加入
slaveof master-ip master-port
,主数据库无需配置 -
通过命令行参数 启动redis-server的时候,使用命令行参数
--slaveof master-ip master-port
redis-server --port 6380 --slaveof 127.0.0.1 6379
-
通过命令
SLAVEOF master-ip master-port
redis>SLAVEOF 127.0.0.1 6379
SLAVEOF NO ONE
可以使当前数据库停止接收其他数据库的同步,转成主数据库
redis主从复制
redis主从复制的特点:
1.一个master可以拥有多个slave
2.多个slave可以连接同一个master外,还可以连接到其它slave
3.主从复制不会阻塞master,在同步数据时,master可以继续处理client的请求
4.提高系统的伸缩性
redis主从复制过程:
1.slave与master建立连接,发送sync同步命令
2.master会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令
并缓存。
3.后台完成保存后,就将此文件发送给slave
4.slave将此文件保存到硬盘上
配置主从服务器:
配置slave服务器很简单,只需要在slave的配置文件中加入以下配置:
slaveof 222.27.174.98 6379 //指定master的主机的IP和端口号
masterauth 888888 //主机数据库的密码
我们可以通过info命令来查看本机的redis是主服务器还是从服务器。
通过 info Replication 查看role是master还是slave,及相关信息
优点及应用场景
-
读写分离 通过复制可以实现读写分离以提高服务器的负载能力。在常见的场景中,读的频率大于写,当单机的Redis无法应付大量的读请求时(尤其是较耗资源的请求,比如SORT命令等)可以通过复制功能建立多个从数据库,主数据库只进行写操作,而从数据库负责读操作。
-
从数据库持久化 持久化通常相对比较耗时,为了提高性能,可以通过复制功能建立一个(或若干个)从数据库,并在从数据库中启用持久化,同时在主数据库禁用持久化。当从数据库崩溃时重启后主数据库会自动将数据同步过来,所以无需担心数据丢失。而当主数据库崩溃时,需要在从数据库中使用SLAVEOF NO ONE命令将从数据库提升成主数据库继续服务,并在原来的主数据库启动后使用SLAVEOF命令将其设置成新的主数据库的从数据库,即可将数据同步回来。