一、主从复制
1.什么是主从复制
主节点中的数据和从节点上的数据保持实时同步,当主节点写入数据时通过主从复制机制会复制到从节点服务器上;
主从复制不会阻塞master,在同步数据时,master 可以继续处理client 请求;
一个redis可以即是主节点又是从节点,只有一个主节点,可以有多个从节点。
2.主从复制的作用:
提高redis的可用性(容灾),当主节点出现故障时,从节点开始提供服务;
读写分离,从而提高负载能力。
3.开启主从复制的方式:
方式一:主节点无需配置,从节点的redis.conf配置文件中增加slaveof 主节点ip 主节点端口
slaveof 192.168.91.128 6379
启动主节点再启动从节点完成配置
方式二:从节点启动时通过命令启动redis-server --slaveof 192.168.91.128 6379
通过info命令验证是否开启成功
主节点信息:
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.91.128,port=6380,state=online,offset=369,lag=1
从节点信息
# Replication
role:slave
master_host:192.168.91.128
master_port:6379
当开启主从复制后,从节点一般是只读的,保证主服务器和从服务器的数据一致性
192.168.91.128:6380:0>set name zs
READONLY You can't write against a read only slave.
操作命令
查看状态:info
断开主从复制:在从节点执行slaveof no one
断开后再变成主从复制slaveof 192.168.91.128 6379
4.主从复制的过程
从节点与主节点建立连接,发送sync同步命令;
主节点会开启一个后台进程,将数据库快照保存到文件中,保存完成后就将文件发送给从节点,同时主节点的主进程还在继续工作,收集新的写入并缓存;
从节点收到文件后将文件保存到本地。
二、哨兵模式
进一步实现高可用
1. 什么是哨兵
对主从服务器进行监控,监控redis的运行情况;
监控主从服务器是否正常运行,若主节点出现故障,根据票数自动将从节点转为主节点,实现自动切换。
2.心跳检测(监控主从服务器是否正常运行)
每个哨兵(sentinel) 会向其它哨兵(sentinel)、master(主节点)、slave(从节点)定时发送消息,以确认对方是否正常运行,如果发现对方在指定时间(可配置)内未回应,则暂时认为对方宕机
若“哨兵群”中的多数sentinel都报告某一master没响应(>50%,所以至少要有3个节点),系统才认为该master已宕机,通过选举算法,从剩下的slave节点中,选一台提升为master,然后自动修改相关配置。
来源:百度百科
Sentinel工作方式:
1):每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个 PING 命令
2):如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel 标记为主观下线。
3):如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel 要以每秒一次的频率确认Master的确进入了主观下线状态。
4):当有足够数量的 Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态, 则Master会被标记为客观下线
5):在一般情况下, 每个 Sentinel 会以每 10 秒一次的频率向它已知的所有Master,Slave发送 INFO 命令。
6):当Master被 Sentinel 标记为客观下线时,Sentinel 向下线的 Master 的所有 Slave 发送 INFO 命令的频率会从 10 秒一次改为每秒一次
7):若没有足够数量的 Sentinel 同意 Master 已经下线, Master 的客观下线状态就会被移除。
若 Master 重新向 Sentinel 的 PING 命令返回有效回复, Master 的主观下线状态就会被移除。
3.选举算法
每个在线的哨兵节点都可以成为领导者,当它确认主节点下线时,会向其它哨兵发is-master-down-by-addr命令,征求判断并要求将自己设置为领导者,由领导者处理故障转移;
当其它哨兵收到此命令时,可以同意或者拒绝它成为领导者;
如果哨兵发现自己在选举的票数大于等于num(sentinels)/2+1时,将成为领导者,如果没有超过,继续选举…………
4.配置
修改sentinel.conf配置文件配置哨兵
sentinel monitor mymaster 192.168.91.128 6379 2 #主节点 名称 IP 端口号 选举次数
#哨兵监听192.168.91.128 6379端口的主节点,名字叫做mymaster,当master不能用,此哨兵的权值为2
#配置主服务器的密码(如没设置密码,可以省略)
sentinel auth-pass mymaster 123456
修改心跳检测 5000毫秒
sentinel down-after-milliseconds mymaster 5000
启动redis服务
redis-server
启动哨兵模式
redis-sentinel ./sentinel.conf
三、redis持久化方案:
rdb:可以设置间隔多长时间保存一次(Redis不用任何配置默认的持久化方案)
优点:redis的数据存取速度更快
缺点:服务器断电时会丢失部分数据(数据的完整性得不到保证)
aof:可以设置实时保存
优点:持久化良好,能保证数据的完整性
缺点:大大降低了redis系统的存取速度