Redis哨兵模式(Sentinel)是Redis提供的除Redis集群(Redis cluster)模式之外的另一种高可用模式。除了高可用,还提供其他附属任务,如监控、通知等。大致的能力如下:
监控-Sentinel不断检查您的主实例和副本实例是否按预期工作。
通知-Sentinel可以通过API通知系统管理员或其他计算机程序,受监控的Redis实例之一出现了问题。
自动故障转移。如果主服务器未按预期工作,Sentinel可以启动故障转移过程,将副本提升为主服务器,将其他其他副本重新配置为使用新的主服务器,并通知使用Redis服务器的应用程序在连接时要使用的新地址。
配置提供程序。Sentinel充当客户端服务发现的授权来源:客户端连接到Sentinel,以便请求负责给定服务的当前Redis主机的地址。如果发生故障转移,哨兵将报告新地址。
哨兵模式配置起来也比Cluster模式简单些,服务器需求也相对较少,下面举例说明配置方法(本例使用一主二从,总共三台服务器)。
一、源码安装方式(以最新版的7.2.1为例)
wget https://github.com/redis/redis/archive/7.2.1.tar.gz #下载源码#为方便,创建一个脚本server=/usr/local #本例将redis安装在/usr/local下,可根据根据自行设置prefix=$server/redis mkdir-p$prefix/{bin,conf} cd src cat Makefile|sed -e's/^PREFIX=/#PREFIX=/g'>Makefile.new echo"PREFIX=$prefix">Makefile cat Makefile.new >> Makefile rm-f Makefile.new makemake install
二、dokcer安装
如何安装docker,这里就不详述了,安装完成docker后,执行如下步骤:
docker pull redis:latest docker run --restart=always -p6379:6379 --name redis-master --network=host -v /data/redis:/data -itd redis redis-server /data/conf/redis.conf docker run --restart=always -p26379:26379 --name redis-sentinel --network=host -v /data/redis:/data -itd redis redis-server /data/conf/sentinel.conf –sentinel
三、redis配置
cat redis.conf bind * protected-mode yesport 6379tcp-backlog 511timeout 300tcp-keepalive 300daemonize no supervised no pidfile "/var/run/redis_6379.pid"loglevel notice logfile "/data/log/redis.log"databases 16always-show-logo yessave 9001save 30010save 6010000stop-writes-on-bgsave-error yesrdbcompression yesrdbchecksum yesdbfilename "dump.rdb"dir "/data/db"masterauth "123456"replica-serve-stale-data yesreplica-read-only yesrepl-diskless-sync no repl-diskless-sync-delay 5repl-disable-tcp-nodelay no replica-priority 100requirepass "123456"lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no appendonly yesappendfilename "appendonly.aof"appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mb aof-load-truncated yesaof-use-rdb-preamble yesbusy-reply-threshold 5000slowlog-log-slower-than 10000slowlog-max-len 128latency-monitor-threshold 0notify-keyspace-events ""hash-max-listpack-entries 512hash-max-listpack-value 64list-max-listpack-size -2list-compress-depth 0set-max-intset-entries 512zset-max-listpack-entries 128zset-max-listpack-value 64hll-sparse-max-bytes 3000stream-node-max-bytes 4kb stream-node-max-entries 100activerehashing yesclient-output-buffer-limit normal 000client-output-buffer-limit replica 256mb 64mb 60client-output-buffer-limit pubsub 32mb 8mb 60hz 10dynamic-hz yesaof-rewrite-incremental-fsync yesrdb-save-incremental-fsync yeslatency-tracking-info-percentiles 509999.9
以上是master节点的配置文件,slave节点的配置也基本一致,除了上面的内容,需要加上如下内容:
replicaof 主节点IP地址 主节点端口号
上面这行在比较新的redis上不加似乎也可以,哨兵会自动选举产生主节点,其余节点则为从节点。
四、哨兵配置
port 26379daemonize no pidfile "/var/run/redis-sentinel.pid"logfile ""dir "/tmp"#master服务器的ip,投票数=节点数/2 - 1sentinel monitor trademaster 192.168.0.1 63791sentinel auth-pass trademaster 123456requirepass "123456"
哨兵配置三台服务器的均一样。
五、启动
# 启动redisbin/redis-server conf/redis.conf & # 启动哨兵bin/redis-sentinel conf/sentinel &