1.概述
当面临大流量时,redis可以采取集群的方式进行扩容,将压力分散到集群中的多个结点上去防止redis被打挂。redis的扩容方式有两种:
- 垂直扩容,即读写分离。
- 水平扩容,即分区。
读写分离,将写请求和读请求分开来处理,写请求打到主结点上去,读请求打到从结点上去,主节点、从节点之间通过复制的方式进行数据同步。
因为从节点中存放有全局数据,所以可以通过负载均衡的方式将读请求的流量打散,将压力分摊给各个从节点。在面对读多写少的大流量情景时,使用读写分离集群是很好的解决方式
能读?能写?问题:
能写的服务器能读,一般只拿来写。(主)
能读的服务器,不一定能写。(从)
宕机重新上线问题:
- 从服务器down机后,重连以后不会自动成为从服务器,需要手动配置。
- 无论从服务器接入的早晚,从服务器的数据一定会和主机一致。
- 主机down机以后,从机原地待命,等待主机上线。
2.搭建
集群IP规划:
IP | 角色 |
192.1668.31.10 | 主节点 |
192.1668.31.20 | 从节点 |
192.1668.31.30 | 从节点 |
2.1.安装配置
redis的安装配置教程可以看博主的另一篇文章,里面有详细的安装步骤和错误处理:
Linux安装redis(含报错解决)__BugMan的博客-CSDN博客
2.2.认主
主从复制的关键点就在于从节点的手动认主。在未进行认主的时候,每个redis结点都默认为自己就是一个主节点,自己玩儿自己的:
使用info Replication命令查看主从关系
在从节点上使用slaveof ip地址 端口号,进行认主:
认主成功后会在master上可以看到:
2.3.错误处理
从节点认主后可能会出现主节点连不上的问题:
Error condition on socket for SYNC: Connection reset by peer
这个问题是由于主节点的保护模式造成的,将主节点的保护模式关掉,并且将bind ip修改为0.0.0.0让任意ip都可以连接,或者修改为从节点的ip,直接注释掉bind ip是无效的!!!
3.原理
主从复制的原理很简单,是采用RDB进行数据的复制的,每次从机联结都会给主机发送sync指令,告诉主机自己已经上线并且准备好进行数据同步了,然后主机会发送RDB文件给从机,从机收到RDB后会使用RDB进行数据的加载