layout: post
title: Redis-replication(slave and sentinel)
date: 2018-03-23
tags: [“Redis”,”软件服务”]
一、主从同步配置
一个Master可以有多个slave主机,支持链式复制;Master以非阻塞方式同步数据至slave主机;
1、在slave的终端内直接配置如下command直接配置主从同步
- SLAVEOF
CONFIG SET masterauth
2、配置文件中配置主从参数
- slaveof #指定master
- masterauth #指定认证密码
- slave-serve-stale-data yes #指定slave与master连接中断时的动作。默认为yes,表明slave会继续应答来自client的请求,但这些数据可能已经过期(因为连接中断导致无法从master同步)。若配置为no,则slave除正常应答"INFO"和"SLAVEOF"命令外,其余来自客户端的请求命令均会得到"SYNC with master in progress"的应答,直到该slave与master的连接重建成功或该slave被提升为master。
- slave-read-only yes #从节点只读
- repl-diskless-sync (no'Disk-backed'Diskless) #新的从节点或某较长时间未能与主节点进行同步的从节点重新与主节点通信,需要做"full synchronization",此时其同步方式有两种style:
- #1、Disk-backend:主节点新创建快照文件于磁盘中,而后将其发送给从节点;
- #2、Diskless:主节占新创建快照后直接通过网络套接字文件发送给从节点;为了实现并行复制,通常需要在复制启动前延迟一个时间段;
- repl-diskless-sync-delay 5 #无硬盘复制功能可以通过repl-diskless-sync来配置,另外一个配置项repl-diskless-sync-delay用来配置当收到第一个请求时,等待多个slave一起来请求之间的间隔时间。
- repl-ping-slave-period 10 #redis slave会定期从master发送ping命令,时间间隔repl-ping-slave-period指定。
- repl-timeout 60 #redis slave会定期从master发送ping命令,超时时长
- repl-disable-tcp-nodelay no #"no"表示开启tcp nodelay选项,任何数据都会被立即发送,及时性较好,但是效率较低
- repl-backlog-size 1mb #后院队列长度
- slave-priority 100 #复制集群中,主节点故障时,sentinel应用场景中的主节点选举时使用的优先级;数字越小优先级越高,但0表示不参与选举;
- min-slaves-to-write 3 #主节点仅允许其能够通信的从节点数量大于等于此处的值时接受写操作;
- min-slaves-max-lag 10 #从节点延迟时长超出此处指定的时长时,主节点会拒绝写入操作;
二、sentinel模式配置主从
1、Redis-sentinel是Redis实例的监控管理、通知和实例失效备援服务,是Redis集群的管理工具。在一般的分布式中心节点数据库中,Redis-sentinel的作用是中心节点的工作,监控各个其他节点的工作情况并且进行故障恢复,来提高集群的高可用性。
主要完成三个功能:监控、通知、自动故障转移(选举:流言协议、投票协议)
2、sentinel的配置
配置sentinel需要注意一点:sentinel的守护进程不要和redisdb在同一台物理机上,一宕全宕,如果机器规模限制可折中。
- port 26379
- sentinel monitor
# 表示sentinel集群的quorum机制,即至少有quorum个sentinel节点同时判定主节点故障时,才认为其真的故障; #s_down: subjectively down #o_down: objectively down sentinel auth-pass sentinel down-after-milliseconds #监控到指定的集群的主节点异常状态持续多久方才将标记为"故障"; sentinel parallel-syncs #指在failover过程中,能够被sentinel并行配置的从节点的数量; sentinel failover-timeout #sentinel必须在此指定的时长内完成故障转移操作,否则,将视为故障转移操作失败; sentinel notification-script #通知脚本,此脚本被自动传递多个参数;
3、sentinel登录操作
- redis-cli -h SENTINEL_HOST -p SENTINEL_PORT
- redis-cli>SENTINEL masters
- redis-cli>SENTINEL slaves
redis-cli>SENTINEL failover redis-cli>SENTINEL get-master-addr-by-name
三、反客为主
使当前数据库停止与其他数据库的同步,转成主数据库
- SLAVEOF no one
四、问题解决
1、 somaxconn内核参数
日志报警告:The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
解决方案:
- echo 512 >/proc/sys/net/core/somaxconn #或更大值
2、sentinel启动监听不到主节点
究其原因,就是因为sentinel配置文件中的”bind”指令,第一个bind指令要绑定物理网卡,如果指定”*”,系统默认会有限绑定”127.0.0.1”,如果你不是这么配的,这就嗨了!下面的提示将是你会看到的:
- 172.18.30.2:27000> info sentinel
- # Sentinel
- sentinel_masters:1
- sentinel_tilt:0
- sentinel_running_scripts:0
- sentinel_scripts_queue_length:0
- sentinel_simulate_failure_flags:0
- master0:name=mytest,status=sdown,address=172.18.30.2:7000,slaves=0,sentinels=1
重点看最后一行