Code前端首页关于Code前端联系我们

Redis Sentinel实现的哨兵模式搭建小概览

terry 2年前 (2023-09-28) 阅读数 56 #未命名

Redis哨兵模式通俗点讲可以称为“机器人哨兵”。配置“机器人哨兵”后,这个“机器人”可以7*24小时工作,它可以自动帮你做几件事,比如监控、警告、自动处理错误等。

Redis-sentinel简介

Redis-sentinel是antirez,Redis的作者。由于Redis集群是大公司使用的,每个公司都要写自己的集群管理工具,所以antirez花了几周时间写了Redis-sentinel。

Sentinel Redis系统用于管理多个Redis服务器(实例)。 Redis的Sentinel为Redis提供了高可用性。使用 Sentinel 模式创建可以在无需人工干预的情况下处理多个故障的 Redis 部署。

系统执行以下三项任务:

  • 监控:Sentinel会持续检查您的主服务器和从服务器是否允许正常工作。
  • 通知:如果监控的Redis服务器出现问题,Sentinel可以通过API向管理员或其他应用程序发送通知。
  • 自动故障转移: (1) 如果主服务器出现故障,Sentinel 将发起自动故障转移操作。它将把其中一台从属服务器从发生故障的主服务器升级到新的主服务器。并使得主服务器以外的从服务器无法更改复制新的主服务器; (2)当客户端尝试连接主服务器失败时,集群也会将新的主服务器的地址返回给客户端。是的,集群可以使用新的主服务器。该服务器替换发生故障的服务器。

分布式哨兵功能

Redis Sentinel 是一个分布式系统。您可以在一个架构中运行多个 Sentinel 进程(进度)。该进程使用八卦协议来接收有关主机的信息。服务器是否离线的信息,并通过一致协议来决定是否进行自动故障转移以及选择哪台从服务器作为新的主服务器。

单个哨兵进程来监控redis集群是不可靠的。当哨兵进程宕机时(哨兵本身也存在单点故障),整个集群系统就无法按预期工作。因此,sentinel集群是有必要的,它有几个优点:

  • 如果某些sentinel进程宕机了,仍然可以在主备redis集群之间切换;
  • 如果只有一个哨兵进程,如果这个进程出错,或者网络阻塞,那么redis集群的主备就无法工作(一点问题);
  • 如果存在多个 Sentinel,Redis 客户端可以自由连接到 Sentinel 来获取有关 Redis 集群的信息

稳健的部署至少需要三个 Sentinel 实例。

三个 Sentinel 实例必须放置在客户使用独立实用程序确认故障的计算机或虚拟机上。例如,不同可用区的不同物理机或虚拟机。 【本次讲解是在一台机器上构建,类似于多级

背景

一个新项目的需求,接触到了搭建Redis,简单记录了一下搭建过程中遇到的坑

整体配置

192.168.1.100:6379 -> master
192.168.1.101:6379 -> slave
192.168.1.102:6379 -> slave
192.168.1.100:26379 -> sentinel
192.168.1.101:26379 -> sentinel
192.168.1.102:26379 -> sentinel

搭建步骤

1.安装redis

# 解压
tar -xvf /usr/local/redis-3.2.11.tar.gz

mkdir -p /usr/local/redis/bin

cp /usr/local/redis/src/{redis-benchmark,redis-check-aof,redis-check-rdb,redis-cli,redis-sentinel,redis-server,redis-trib.rb} /usr/local/redis/bin

mkdir -p /u01/redis/{6379/{log,data,pid,conf},26379/{log,data,pid,conf}

# 添加环境变量
echo "export PATH=/usr/local/redis/bin:$PATH" >> /etc/profile
source /etc/profile

2.redis-6379配置

基本的redis节点配置如下。从三个虚拟机中 cp /u01/redis/6379/conf/redis_6379 的以下配置。 .conf

bind 0.0.0.0
protected-mode no
daemonize yes
pidfile "/u01/redis/6379/pid/redis_6379.pid"
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 0
loglevel notice
logfile "/u01/redis/6379/log/redis_6379.log"
databases 16
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename "dump.rdb"
dir "/u01/redis/6379/data"
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
min-slaves-to-write 1
min-slaves-max-lag 10
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512

启动服务

# 在三台虚拟机上分别执行
redis-server /u01/redis/6379/conf/redis_6379.conf

建立主从关系

# 在192.168.1.101
redis-cli -p 6379 SLAVEOF 192.168.1.100 6379

# 在192.168.1.102
redis-cli -p 6379 SLAVEOF 192.168.1.100 6379

查看复制

192.168.1.101:6379> info replication
# Replication
role:master
connected_slaves:2
min_slaves_good_slaves:2
slave0:ip=192.168.1.102,port=6379,state=online,offset=9577826,lag=1
slave1:ip=192.168.1.103,port=6379,state=online,offset=9577965,lag=0
master_repl_offset:9577965
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:8529390
repl_backlog_histlen:1048576

192.168.1.102:6379> info replication
# Replication
role:slave
master_host:192.168.1.101
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:9600220
slave_priority:100
slave_read_only:1
connected_slaves:0
min_slaves_good_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

192.168.1.103:6379> info replication
# Replication
role:slave
master_host:192.168.1.101
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:9612675
slave_priority:100
slave_read_only:1
connected_slaves:0
min_slaves_good_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

3.sentinel-6379配置

Sentinel节点/conf配置以下是节点配置。三台虚拟机中的/redis/26379/conf/sentinel_26379.conf

sentinel Monitor mymaster 监控redis中的master节点,为192.168.1.100,所以这个文件在三台机器中是相同的♷启动finish 观察文件 /u01/redis/26379/conf/sentinel_26379.conf 的变化

检查 Sentinel 状态并使用 Sentinel 信息

redis-cli -h 192.168.1.100 -p 26379 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=zhuanche01,status=ok,address=192.168.1.100:6379,slaves=2,sentinels=3

总结

当我遇到 192.168.1.101 和 192.168 Sentinel 启动后的一段时间。 1.102时间错误问题后来发现master没有被监控。然后,如果出现问题,请阅读更多日志。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门