通过持久化功能,可以保证即使redis服务重启也不会造成数据丢失,但是由于数据的存储在一台服务器上,如果磁盘出现故障,数据仍然会丢失。
为了避免单点故障,我们可能会希望将数据复制到多个副本,即使有一台机器出现故障,其他服务器依然可以继续提供服务,这就要求当一台服务器上的数据更新时,可以自动将更新同步到其他服务器上,redis提供的复制功能可以自动完成这个动作。
Redis支持一主多从的拓扑机构,如下图所示:
配置主从Redis集群
1)创建master和slave配置文件
>cp redis.conf redis-master.conf
>cp redis.conf redis-slaver.conf
2)为从节点指定主节点
>vim redis-slaver.conf
slaveof 127.0.0.1 6379
3)修改从节点服务端口
>vim redis-slaver.conf
port 6380
4)启动主从redis实例
>redis-server redis-master.conf
>redis-server redis-slaver.conf
5)向主节点写入数据
>redis-cli -p 6379
127.0.0.1:6379> set foo bar
OK
127.0.0.1:6379>
6)从从节点读取数据
>redis-cli -p 6380
127.0.0.1:6380> get foo
"bar"
127.0.0.1:6380>
Redis主从同步原理
参考:http://blog.csdn.net/sk199048/article/details/50725369
Redid主从同步可从两个方面来看:全量同步和增量同步
全量同步原理
全量同步通常发生在Slaver的初始化阶段,这时,slaver将master上的所有数据备份一份。
1)从服务器连接到主服务器,并发送sync命令
2)主服务器接收到sync后,执行bgsave命令生成数据集快照rdb文件,同时,利用缓冲区记录此后所有的写请求
3)主服务器执行完bgsave后,想从服务器发送快照文件,同时,继续用缓冲区记录写请求
4)从服务器接收到快照文件并载入
5)主服务器向从服务器发送缓冲区中的写操作
6)从服务器接收并执行缓冲区的写操作
7)同步完成
增量同步
在从服务器初始化完成后,就开始正常工作,此后的同步都是增量同步,对于增量同步,是由主服务器想从服务器发送写操作来实现的。
读写分离
在主向从服务器复制数据,可以实现读写分离来提高服务器的负载能力。在很多场景下,读的频率大于写,可以利用一些读写分离中间件来实现读写分离。
从数据库持久化
还可以通过关闭主服务器的持久化同时开启从服务器的持久化来提供主节点的处理能力,同时在从节点上保证数据的可用性。