Redis高可用之持久化、主从复制
一、Redis高可用
策略 | 概述 |
---|---|
持久化 | 持久化是最简单的高可用方法,主要作用是数据备份,即将数据存储在硬盘,保证数据不会因进程退出而丢失。 |
主从复制 | 主从复制是高可用Redis的基础,主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复 |
哨兵 | 在主从复制的基础上,哨兵实现了自动化的故障恢复。缺陷:写操作无法负载均衡,存储能力受到单机的限制。 |
集群 | 通过集群,Redis解决了写操作无法负载均衡,以及存储能力受到单机限制的问题,实现了较为完善的高可用方案。 |
二、Redis 持久化
1.简介
Redis是内存数据库,数据都是存储在内存中,为了避免服务器断电等原因导致Redis进程异常退出后数据的永久丢失,需要定期将Redis中的数据以某种形式(数据或命令)从内存保存到硬盘;
当下次Redis重启时,利用持久化文件实现数据恢复。
除此之外,为了进行灾难备份,可以将持久化文件拷贝到一个远程位置。
2.Redis 的两种持久化方式
RDB持久化
定时把redis内存中的数据进行快照并压缩保存到硬盘;
RDB持久化保存的文件占用空间小,网络传输快,恢复速度也比AOF快,性能影响比AOF更小;
实时性不如AOF,兼容性较差,持久化期间在fork子进程时会阻塞reids父进程。
AOF持久化
以追加的方式将Redis写操作的命令记录到文件中;
实时性比RDB好,支持秒级持久化,兼容性较好;
持久化保存的文件占用磁盘空间更大,恢复速度更慢,性能影响更大,AOF文件重写期间在fork子进程时会阻塞reids父进程;
两者区别可通过 *工作方式、实时性、磁盘占用、恢复速度、兼容性、IO性能影响等方面进行阐述。
三、Redis主从复制
1.主从复制工作原理
Redis主从之间的复制分为两部分:全量复制和增量复制。
全量复制
Redis在第一次实现主从关系时会进行全量复制。
1)Slave 通过 psync命令同步数据与Master建立socket长连接;
2)Master 收到psync命令,执行bgsave语句生成RDB快照;
3)Master发送RDB数据;
4)Slave清空数据并加载Master发来的RDB数据;
5)Master将生成RDB文件过程中,修改的数据,从repl buffer发送给Slave;
6)Slave执行接收到的修改命令;
7)Master通过socket长连接持续把写命令发送给从接单,保证数据一致性。
增量复制
如果由于网络原因造成原因造成主从断开,期间有数据写入master,再次形成主从时,会形成增量复制。
1)Slave连接断开;
2)Master最近数据的修改命令的缓存;
3)Slave重新建立Socket长连接到master;
4)Slave psync命令同步数据: offset偏移量控制;
5)Master判断 Slave的offset。如果在repl backlog buffer中,Master会将缓存中从salve的offset之后数据一次性同步给salve节点,否则会全量同步;
6)Master通过socket长连接持续把写命令发送给从节点,保证主从一致性。
2.Redis主从同步策略
主从刚刚连接的时候,进行全量同步;全同步结束后,进行增量同步。
当然,如果有需要,slave 在任何时候都可以发起全量同步。
redis 策略是,无论如何,首先会尝试进行增量同步,如不成功,要求从机进行全量同步
四、搭建Redis主从复制
节点服务器 | IP地址 |
---|---|
Master | 192.168.100.146 |
Slave | 192.168.100.155 |
Step1 Master节点修改 Redis 配置文件
vim /apps/redis/etc/redis.conf bind 0.0.0.0 #修改监听地址为0.0.0.0 protected-mode no #将本机访问保护模式设置no port 6379 #Redis默认的监听6379端口 daemonize yes #设置为守护进程,后台启动 pidfile /apps/redis/run/redis_6379.pid #指定 PID 文件 logfile /apps/redis/log/redis_6379.log #指定日志文件 dir /usr/local/redis/data #指定持久化文件所在目录 #requirepass abc123 #可选,设置redis密码 appendonly yes #开启AOF
systemctl restart redis-server.service
Step2 Slave节点修改 Redis 配置文件
vim /apps/redis/etc/redis.conf bind 0.0.0.0 #修改监听地址为0.0.0.0 protected-mode no #将本机访问保护模式设置no port 6379 #Redis默认的监听6379端口 daemonize yes #设置为守护进程,后台启动 pidfile /apps/redis/run/redis_6379.pid #指定 PID 文件 logfile /apps/redis/log/redis_6379.log #指定日志文件 dir /apps/redis/data #指定持久化文件所在目录 replicaof 192.168.100.146 6379 #指定要同步的Master节点IP和端口 masterauth 123 #可选,指定Master节点的密码,仅在Master节点设置了requirepass requirepass abc123 #可选,设置redis密码 appendonly yes #开启AOF
Step3 主从效果验证
#在Master节点上看日志: tail -f /apps/redis/log/redis.log
#从服务器查看主从复制状态 info Persistence