Redis之主从复制
一:简介
一:产生背景
redis是一个高可用的数据库,可以进行高速的读写操作,但是单机redis容易出现单点故障灯问题
一:虽然redis可以进行数据持久化等操作避免数据丢失,但是物理故障 例如磁盘损坏等 数据还是会丢失
二:当只有单台redis服务器的时候 大量读写操作 对CPU,内存,磁盘容量很容易达到瓶颈
二:解决办法
针对上述问题:可以通过redis复制功能,通过一主(master)多从(slave),或者多主多从(集群),通过多台服务器进行redis服务搭建,提供高可用的redis服务
三:主从复制介绍
redis主从复制模型中,分为主服务器(master)从服务器(slave)两种角色,一台主服务器可以有多台从服务器,一台从服务器也可以有自己的从服务器,主服务器可以进行读写操作,而从服务器只进行读取操作(可以通过修改配置文件 让从服务器具有写的功能)同时会同步主服务器写入的数据,如果主服务器宕机,从服务区可以充当主服务器
四:特点
(1):一个主服务器可以有多个从服务器
(2):一个从服务器可以有自己从服务器
(3):主服务器挂了可以让从服务器充当主服务器
(4):使用异步复制
(5):异步复制不会阻塞主服务器
(6):可以让主服务器免去持久化操作 让从服务器进行持久化操作
(7):通过主从实现读写分离
五:主从复制原理
redis主从复制方式分为两种方式(两个阶段)
(1)全同步:当主从复制开始的时候 会进行全同步数据
(2)部分同步:当全同步结束会进行部分同步
PS:无论何时 从服务器都可以在任意时刻进行全同步
(1):从服务器会向主服务器发送SYNC请求
(2):接收到SYNC的主服务器会调用BGSAVE命令,创建一个RDB文件,并使用缓冲区记录下来执行的所有命令
(3):当主服务器BGSAVE命令执行完毕,会向从服务器发送RDB文件,而从服务器则会接收并且载入这个文件
(4):从服务器执行RDB文件 然后完成数据初始化同步
六:命令传播
在主从服务器完成同步之后,主服务器每执行一个写命令,它都会将被执行的写命令发送给从服务器执行,这个操作被称为“命令传播”(command propagate)。
二:redis主从复制配置
在安装redis时就进行了多实例的配置
准备两个或两个以上redis实例
6380/redis-server
6380/redis.conf
6381/redis-server
6381/redis.conf
6382/redis-server
6382/redis.conf
配置文件示例:
bind 127.0.0.1 10.0.0.186 port 6380 daemonize yes pidfile /var/run/redis_6380.pid loglevel notice logfile "/var/log/redis_6380.log" dbfilename dump.rdb dir /application/redis/6380/ appendonly no appendfilename "appendonly.aof" appendfsync everysec slowlog-log-slower-than 10000 slowlog-max-len 128 protected-mode no
启动:
./6380/redis-server ./6380/redis.conf ./6381/redis-server ./6381/redis.conf ./6382/redis-server ./6382/redis.conf
复制环境说明
主节点:6380
从节点:6381、6382
开启主从(在6381 6382实例中执行)
redis-cli -p 6381/6382
SLAVEOF 127.0.0.1 6380