redis主从复制,实现读写分离
redis基于主从复制实现哨兵机制
redis-cluster多主多从高可用集群搭建
概述
redis的复制功能是支持多个数据库之间的数据同步。一类是主数据库(master)一类是从数据库(slave),主数据库可以进行读写操作,当发生写操作的时候自动将数据同步到从数据库,而从数据库一般是只读的,并接收主数据库同步过来的数据,一个主数据库可以有多个从数据库,而一个从数据库只能有一个主数据库。
为什么需要主从复制呢?
从以下三点说明:
-
redis单机一旦故障,可用通过从服务器上进行恢复数据;
-
redis要达到高可用、高并发,只有单个redis是不够的,单个redis也就只能支持几万的QPS,所以必须以集群的形式提供服务,而集群中又以多个主从组成。
-
主从是以多个redis集合在一起,以一个master多个slave为模式对外提供服务,master主要以写为主,slave提供读,即是读写分离的情况,以读多写少为准。比如电商网站中的商品,读的多,写的少。
如果上面三点还不懂,没关系,我说明一下 单机redis 的问题:
-
机器故障
-
容量瓶颈
-
QPS瓶颈
主从复制过程:见下图
实现
首先三台服务器上装上三个redis
可以参考 redis安装
主机说明 | ip | 端口 |
---|---|---|
master | 192.168.130.129 | 6379 |
slave | 192.168.130.130 | 6379 |
slave | 192.168.130.131 | 6379 |
三台的配置一定要改,密码最好都改一样的
- 注释掉只允许本地访问
- 配置redis为后台启动
将daemonize no 改成daemonize yes
-
修改密码
requirepass 123456
修改slave服务器的配置
修改192.168.130.130和192.168.130.131的redis.conf
#指向主服务器的地址
slaveof 192.168.130.129 6379
#主redis服务器配置了密码,则需要配置
masterauth 123456
关闭防火墙
service iptables stop
启动
启动三台redis先启动主redis再启动从redis
效果
master redis
- 写入一条数据
set name 111 - 读取
get name 返回111 - 获取节点信息
info
可以在返回信息里看到节点为master
slave redis
- 读取
get name返回111 - 写入
set name 111 失败 - 获取节点信息
info
可以在返回信息里看到节点为slave
slave只能读不能写,master可以写也可以读
问题
如果master宕机后,如何保证redis高可用?
redis实现哨兵机制Sentinel,当master宕机后,哨兵在slave中选举新的master,之前的master重启后,会变成slave。