Redis主从复制,哨兵学习笔记
常用命令:
redis-server -v #查看redis版本信息
ps -ef|grep redis #查看pid
ls -l /proc/pid/cwd #查看redis 安装目录
shutdown #关闭
#启动redis-server
redis-server redis.conf
#客户端连接redis
redis-cli -p 6279 -h 22.8.159.93 -a 123456
查看redis主从信息:
info replication #查看当前库的信息
# Replication
role:master #主界定
connected_slaves:0 #无从节点
master_replid:61935060ab778f5c8293b9cd731e67aec64b7d95
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
redis主从复制:
概念:
我们可以通过部署多台redis,并在配置文件中指定这几台redis之间的主从关系,主负责写入数据,同时把写入的数据实时同步到从机器,这种模式叫做主从复制,即master/slave,并且redis默认master用于写,slave用于读,向slave写数据会导致错误。
作用:
1、数据冗余,实现数据热表内分,是持久化之外的一种数据冗余方式
2、故障恢复:主节点出现问题,从节点提供服务,快速故障恢复
3、负载均衡:主节点提供写操作,从节点提供读操作,提高redis的并发量
4、高可用(集群)基石:是redis高可用的基础,主从复制还是哨兵和集群能够实施的基础
复制原理:
Slave启动成功连接到master后发送一个sync命令,,Master接到命令,启动后台的存盘进程,同时手机所有接收到的用于修改数据集命令,在后台进程执行完毕后,master将传送整个数据文件到salve,并完成一次完全同步
全量复制:salve服务再接收到数据库文件数据后,将其存盘并加载到内存中
增量复制: master 继续将新的所有收集到的修改命令依次传给slave,完成同步
只要重新连接master,一次完全同步(全量复制)将被自动执行
Redis主从复制配置:
只要配置redis /config就行
port 6279 #配置端口
pidfile /var/run/redis_6279.pid #pid的名字
logfile "redis-6279.log" #log文件的名字
dbfilename dump3279.rdb #dump.rdb的名字
daemonize yes #后台运行
bind xx.xx.xx.xx #注意绑定ip地址
ps:默认情况下 每台redis服务器都是主节点 需要更改配置文件才能默认为从节点
#把当前节点变成从节点
#命令模式 当前有效
slaveof <masterip> <masterport> (主redis ip:port)
slaveof xx.xx.xx.xx 6379
#将一台slave服务器提升为Master (提升某slave为master)
slaveof no one
#.conf配置文件模式 永久有效
replicaof <masterip> <masterport>
masterauth <master-password>
1. 主机断开,从机依旧连接主机,但是没有写操作,这个时候主机重新恢复,从机依旧可以直接获取主机写的信息
2. 从机断开,再次恢复立马从主机中获取值
哨兵模式:
原理:
哨兵通过发送命令,等待redis服务器的响应,从而监控运行的多个redis实例
redis提供了哨兵命令,哨兵是一个独立的进程,独立运行
重启过程是先所有主从起来后再起哨兵,为了方便建议做个重启shell脚本。
举例:
假设主服务器宕机,哨兵一先检测到这个结果,系统并不会马上进行选举failover(故障转移)过程,仅仅是哨兵1认为嘱咐我器不可用,这个现象称为 主观下线 当其他的哨兵也发现主服务器不可用时,那么哨兵之间才会进行一次投票选举,投票的结果由一个哨兵发起,进行failover(故障转移) 操作,切换成功后 ,就会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为: 客观下线。
(ps: a给负责人打电话,打不通, b再给负责人打电话,还是不同,c打电话也打不通,就代表失去联系了 这个时候才进行选举故障转移)
简单配置哨兵
配置文件:sentinel.conf
#核心配置 主机名、IP、端口、投票选取次数
sentinel monitor mymaster(别名) ip port 2
#启动哨兵
redis-sentinel sentinel.conf
./redis-server sentinel.conf
如果主机down了 , 哨兵会自动选举 (算法) 选出新的主机,
这个时候如果down主机再次恢复,也只能当从机了 (哨兵规则)
哨兵优点:
1、哨兵集群,基于主从复制模式,具备所有的主从配置优点
2、主从可以切换,故障可以转移,系统的可用性会更好
3、哨兵模式就是主从模式的升级,手动到自动,更见健壮
哨兵缺点:
1、redis不好在线扩容,集群容量一旦达到上限,在线扩容很妈蛋
2、哨兵模式集群分配置非常麻烦。
哨兵模式的全部配置:
# Example sentinel.conf
port 26379
#哨兵工作目录
dir /temp
#master-name 可以自己命名德主节点名称
#quorum 配置多少个sentinel哨兵统一认为 master主节点失联,那么这时客观上认为主节点失联了
#sentinel monitor <master-name> <ip> <redis-port> <quorum>
sentinel monitor mymaster 22.8.159.92 6379 2
#当redis实例中开启requirepass foobared授权密码 所有reidis实例都需要提供密码
#设置哨兵sentinel 连接主从的密码必须设置一样的
# sentinel auth-pass <master-name> <password>
sentinel auth-pass mymaster MySUPER--secret-0123passwOrd
#指定多少毫秒 主节点没有应答扫兵 此时哨兵主管文飞主节点下线 默认30s
sentinel down-after-milliseconds mymaster 30000
#指定发生failover主备切换时最多可以由多少个slave 同时对新的master 进行同步
#数字越小,完成failover所需实际越长
#但是如果这个数字越大,意味着越多的slave因为replication而不可用
#默认配置1 来保证每次只有一个slave处于不能处理命令请求的状态
# sentinel parallel-syncs <master-name> <numreplicas>
sentinel parallel-syncs mymaster 1
#故障转移的超市时间
#1、同一个sentinel对同一个master两次failover之间的间隔时间
#2、当一个slave从一个错误的master那里同步数据开始计算时间 直到slave被纠正为向正确的master哪里同步数据时。
#3、当想要取消一个正在进行的failover所需时间
#4、当进行failover时,配置所有slaves指向新的master所需最大的时候,不过即便超时,slaves依然会被正确配置为指向master,但是不按照parallel-syncs所配置的规则来进行
#默认3分钟
# sentinel failover-timeout <master-name> <milliseconds>
sentinel failover-timeout mymaster 180000
#配置脚本 当发生问题发邮件通知相关人员排查
# sentinel notification-script <master-name> <script-path>
#客户端重新配置主节点参数脚本
#一般由运维人员配置 告诉运维人员主节点发生改变
# sentinel client-reconfig-script <master-name> <script-path>