redis 主从复制相关
#一般是主写从读,由主去主动同步数据到从
从服务器配置
vi redis.conf slaveof 192.168.11.128 6379 masterauth 123456 #主服务器密码,注意:有关slaveof的配置只是配置从服务器,主服务器不需要配置
配置主从复制方式二、redis-server --slaveof 192.168.152.128 6379 临时生效
查看状态:info replication
断开主从复制:在slave节点,执行6380:>slaveof no one
断开后再变成主从复制:6380:> slaveof 192.168.152.128 6379
数据较重要的节点,主从复制时使用密码验证: requirepass
从节点建议用只读模式slave-read-only=yes, 若从节点修改数据,主从数据不一致
传输延迟:主从一般部署在不同机器上,复制时存在网络延时问题,redis提供repl-disable-tcp-nodelay参数决定是否关闭TCP_NODELAY,默认为关闭
参数关闭时:无论大小都会及时发布到从节点,占带宽,适用于主从网络好的场景,
参数启用时:主节点合并所有数据成TCP包节省带宽,默认为40毫秒发一次,取决于内核,主从的同步延迟40毫秒,适用于网络环境复杂或带宽紧张,如跨机房
一主一从模式
用于主节点故障转移从节点,当主节点的“写”命令并发高且需要持久化,可以只在从节点开启AOF(主节点不需要),这样即保证了数据的安全性,也避免持久化对主节点的影响
一主多从模式
针对“读”较多的场景,“读”由多个从节点来分担,但节点越多,主节点同步到多节点的次数也越多,影响带宽,也加重主节点的稳定
树状一主多从:一主多从的缺点(主节点推送次数多压力大)可用些方案解决,主节点只推送一次数据到从节点B,再由从节点B推送到C,减轻主节点推送的压力
数据同步
redis 2.8版本以上使用psync命令完成同步,过程分“全量”与“部分”复制
全量复制:一般用于初次复制场景(第一次建立SLAVE后全量)
部分复制:网络出现问题,从节点再次连接主节点时,主节点补发缺少的数据,每次数据增量同步
心跳:主从有长连接心跳,主节点默认每10S向从节点发ping命令,repl-ping-slave-period控制发送频率
主从的缺点
a)主从复制,若主节点出现问题,则不能提供服务,需要人工修改配置将从变主
b)主从复制主节点的写能力单机,能力有限
c)单机节点的存储能力也有限
6.主从故障如何故障转移
a)主节点(master)故障,从节点slave-1端执行 slaveof no one后变成新主节点;
b)其它的节点成为新主节点的从节点,并从新节点复制数据;
c)需要人工干预,无法实现高可用。
redis-哨兵模式
哨兵模式是主从基础上的增强版。依然存在主从角色,只是主挂了会自动把从切换为主。
哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。
这里的哨兵有两个作用
通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。
当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机
然而一个哨兵进程对Redis服务器进行监控,可能会出现问题,为此,我们可以使用多个哨兵进行监控。各个哨兵之间还会进行监控,这样就形成了多哨兵模式。
用文字描述一下故障切换(failover)的过程
假设主服务器宕机,哨兵1先检测到这个结果,系统并不会马上进行failover过程,仅仅是哨兵1主观的认为主服务器不可用,这个现象成为主观下线。
当后面的哨兵也检测到主服务器不可用,并且数量达到一定值时,那么哨兵之间就会进行一次投票,投票的结果由一个哨兵发起,进行failover操作。
切换成功后,就会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为客观下线。这样对于客户端而言,一切都是透明的。
Redis配置哨兵模式
服务类型 是否是主服务器 IP地址 端口 Redis 是 192.168.11.128 6379 Redis 否 192.168.11.129 6379 Redis 否 192.168.11.130 6379 Sentinel - 192.168.11.128 26379 Sentinel - 192.168.11.129 26379 Sentinel - 192.168.11.130 26379 首先配置Redis的主从服务器,修改redis.conf文件如下 bind 0.0.0.0 # 使得Redis服务器可以跨网络访问 requirepass "123456" # 设置密码 slaveof 192.168.11.128 6379 # 指定主服务器,注意:有关slaveof的配置只是配置从服务器,主服务器不需要配置 masterauth 123456 # 主服务器密码,注意:有关slaveof的配置只是配置从服务器,主服务器不需要配置 上述内容主要是配置Redis服务器,从服务器比主服务器多一个slaveof的配置和密码。
配置3个哨兵,每个哨兵的配置都是一样的。在Redis安装目录下有一个sentinel.conf文件,copy一份进行修改
protected-mode no # 禁止保护模式
sentinel monitor mymaster 192.168.11.128 6379 2 # 配置监听的主服务器,这里sentinel monitor代表监控,mymaster代表服务器的名称,
可以自定义,192.168.11.128代表监控的主服务器,6379代表端口,2代表只有两个或两个以上的哨兵认为主服务器不可用的时候,才会进行failover操作。
sentinel auth-pass mymaster 123456 # sentinel author-pass定义服务的密码,mymaster是服务名称,123456是Redis服务器密码
启动流程:
# 启动Redis服务器进程 ./redis-server ../redis.conf # 启动哨兵进程 ./redis-sentinel ../sentinel.conf
注意启动的顺序。首先是主机(192.168.11.128)的Redis服务进程,然后启动从机的服务进程,最后启动3个哨兵的服务进程。
应用程序连接哨兵模式方法
sentinel: nodes: 192.168.43.234:26379,192.168.43.234:26380,192.168.43.234:26381 master: mymaster