共计 5272 个字符,预计需要花费 14 分钟才能阅读完成。
自动写代码机器人,免费开通
丸趣 TV 小编给大家分享一下 Redis 中哨兵模式的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
主从切换技术的方法是:
当主服务器宕机时,需要将从服务器手动切换 (slaveof no one) 到主从服务器,这需要人工干预。
这既费时又费力,但也会在一段时间内导致服务不可用。这不是推荐的方法。
更多的时间,我们优先考虑哨兵模式,这是当前企业应用程序的主流模式。Redis Sentinel 是 Redis 的高度可用的实现。
Sentinel 是管理多个 Redis 实例的工具。它可以监视,通知 Redis 并自动进行故障转移。
Redis Sentinel 的基本概念主从复制和 Sentinel 高可用性架构的示意图
Redis Sentinel 架构
Redis Sentinel 的主要功能 Sentinel 的主要功能包括:主节点生存检测,主从操作检测,自动故障转移以及主从切换。
Redis 的最小标记配置是一台主机和一台从机;
Redis 的 Sentinel 系统可用于管理多个 Redis 服务器。
系统可以执行以下四个任务:
1、监视:Sentinel 会不断检查主服务器和从属服务器是否正常运行;
2、通知:当受监控的 Redis 服务器出现问题时,Sentinel 会通过 API 脚本向管理员或其他应用程序发送通知;
3、自动故障转移:当主节点无法正常工作时,Sentinel 将启动自动故障转移操作。它将与发生故障的主节点处于主从关系的从节点之一升级到新的主节点,并将其他从节点指向新的主节点;
4、配置提供程序:在 Redis Sentinel 模式下,初始化客户端应用程序时,它将连接 Sentinel 节点集合以获取主节点的信息;
Redis Sentinel 如何工作
当哨兵节点连接到 Redis 实例时,它将创建两个连接:cmd 和 pub/sub。Sentinel 通过 cmd 连接将命令发送到 Redis,并通过 pub/sub 连接到 Redis 实例上的其他哨兵实例。
Sentinel 与 Redis 主节点和从节点进行交互的命令
每个 Sentinel 每秒向其已知的主实例,从属实例和其他 Sentinel 实例发送一个 PING 命令。
如果一个实例花费的时间比上次对 PING 命令的有效回复(毫秒)后 down 所指定的时间更长,那么 Sentinel 会将该实例标记为主观离线。
如果将主服务器标记为主观注销,则将监视主服务器的所有 Sentinel 节点以确认主服务器确实已经每秒进入一次主观注销状态。
如果将主服务器标记为主观注销,并且在指定的时间范围内有足够的哨兵(至少配置文件中指定的数量)与该判断相符,则将主服务器标记为客观下线。
通常,每个 Sentinel 每 10 秒向其所有已知的主服务器和从服务器发送 INFO 命令。当 Sentinel 将主服务器标记为脱机时,Sentinel 发送 INFO 命令给脱机主服务器的所有从属服务器的频率将从每 10 秒一次更改为每秒一次。
Sentinel 和其他哨兵协商主节点的状态。如果主节点处于 SDOWN 状态,投票将自动选择新的主节点。将其余的从节点指向新的主节点以进行数据复制。
如果没有足够的哨兵以允许主服务器注销,则将删除主服务器的客观注销状态。当主服务器对 Sentinel 的 PING 命令返回有效答复时,主服务器的主观脱机状态将被删除。
note
健壮的 Redis Sentinel 群集应至少使用三个 Sentinel 实例,并确保将这些实例放置在不同的计算机上,甚至放置在不同的物理区域上.
Sentinel 无法保证强一致性。常见客户端应用程序库中支持 Sentinel。
Sentinel 需要不断测试和观察以确保高可用性
测试
创建配置文件
内容简单配置如下:
port 16379 # 哨兵端口号
daemonize yes
sentinel monitor master 127.0.0.1 6379 1 # 监视 master
protected-mode no
logfile /usr/local/bin/sentinel-1/sentinel-1.log # 日志文件
先启动 redis 设置集群,启动 redis-cli,设 6379 为 master
再启动 sentinel
sudo redis-sentinel sentinel-1/sentinel.conf
关闭 6379
查看另外两个 redis-cli 的角色情况
再启动 6379
查看 sentinel 日志
sentinel.conf 说明
# Example sentinel.conf
# *** IMPORTANT ***
# 绑定 IP 地址
# bind 127.0.0.1 192.168.1.1
# 保护模式(是否禁止外部链接,除绑定的 ip 地址外)# protected-mode no
# port sentinel-port
# 此 Sentinel 实例运行的端口
port 26379
# 默认情况下,Redis Sentinel 不作为守护程序运行。 如果需要,可以设置为 yes。daemonize no
# 启用守护进程运行后,Redis 将在 /var/run/redis-sentinel.pid 中写入一个 pid 文件
pidfile /var/run/redis-sentinel.pid
# 指定日志文件名。 如果值为空,将强制 Sentinel 日志标准输出。守护进程下,如果使用标准输出进行日志记录,则日志将发送到 /dev/null
logfile
# sentinel announce-ip ip
# sentinel announce-port port
# 上述两个配置指令在环境中非常有用,因为 NAT 可以通过非本地地址从外部访问 Sentinel。# 当提供 announce-ip 时,Sentinel 将在通信中声明指定的 IP 地址,而不是像通常那样自动检测本地地址。# 类似地,当提供 announce-port 有效且非零时,Sentinel 将宣布指定的 TCP 端口。# 这两个选项不需要一起使用,如果只提供 announce-ip,Sentinel 将宣告指定的 IP 和“port”选项指定的服务器端口。# 如果仅提供 announce-port,Sentinel 将通告自动检测到的本地 IP 和指定端口。# Example:
# sentinel announce-ip 1.2.3.4
# dir working-directory
# 每个长时间运行的进程都应该有一个明确定义的工作目录。对于 Redis Sentinel 来说,/tmp 就是自己的工作目录。dir /tmp
# sentinel monitor master-name ip redis-port quorum
# 告诉 Sentinel 监听指定主节点,并且只有在至少 quorum 哨兵达成一致的情况下才会判断它 O_DOWN 状态。# 副本是自动发现的,因此您无需指定副本。# Sentinel 本身将重写此配置文件,使用其他配置选项添加副本。另请注意,当副本升级为主副本时,将重写配置文件。# 注意:主节点(master)名称不能包含特殊字符或空格。# 有效字符可以是 A-z 0-9 和这三个字符 .-_ .
sentinel monitor mymaster 127.0.0.1 6379 2
# 如果 redis 配置了密码,那这里必须配置认证,否则不能自动切换
# Example:
# sentinel auth-pass mymaster MySUPER--secret-0123passw0rd
# sentinel down-after-milliseconds master-name milliseconds
# 主节点或副本在指定时间内没有回复 PING,便认为该节点为主观下线 S_DOWN 状态。# 默认是 30 秒
sentinel down-after-milliseconds mymaster 30000
# sentinel parallel-syncs master-name numreplicas
# 在故障转移期间,多少个副本节点进行数据同步
sentinel parallel-syncs mymaster 1
# sentinel failover-timeout master-name milliseconds
# 指定故障转移超时(以毫秒为单位)。 它以多种方式使用:# - 在先前的故障转移之后重新启动故障转移所需的时间已由给定的 Sentinel 针对同一主服务器尝试,是故障转移超时的两倍。# - 当一个 slave 从一个错误的 master 那里同步数据开始计算时间。直到 slave 被纠正为向正确的 master 那里同步数据时。# - 取消已在进行但未生成任何配置更改的故障转移所需的时间
# - 当进行 failover 时,配置所有 slaves 指向新的 master 所需的最大时间。# 即使过了这个超时,slaves 依然会被正确配置为指向 master。# 默认 3 分钟
sentinel failover-timeout mymaster 180000
# 脚本执行
# sentinel notification-script 和 sentinel reconfig-script 用于配置调用的脚本,以通知系统管理员或在故障转移后重新配置客户端。# 脚本使用以下规则执行以进行错误处理:# 如果脚本以“1”退出,则稍后重试执行(最多重试次数为当前设置的 10 次)。# 如果脚本以“2”(或更高的值)退出,则不会重试执行。# 如果脚本因为收到信号而终止,则行为与退出代码 1 相同。# 脚本的最长运行时间为 60 秒。 达到此限制后,脚本将以 SIGKILL 终止,并重试执行。# 通知脚本
# sentinel notification-script master-name script-path
# 为警告级别生成的任何 Sentinel 事件调用指定的通知脚本(例如 -sdown,-odown 等)。# 此脚本应通过电子邮件,SMS 或任何其他消息传递系统通知系统管理员 监控的 Redis 系统出了问题。# 使用两个参数调用脚本:第一个是事件类型,第二个是事件描述。# 该脚本必须存在且可执行,以便在提供此选项时启动 sentinel。# 举例:
# sentinel notification-script mymaster /var/redis/notify.sh
# 客户重新配置脚本
# sentinel client-reconfig-script master-name script-path
# 当主服务器因故障转移而变更时,可以调用脚本执行特定于应用程序的任务,以通知客户端,配置已更改且主服务器地址已经变更。# 以下参数将传递给脚本:# master-name role state from-ip from-port to-ip to-port
# state 目前始终是故障转移 failover
# role 是 leader 或 observer
# 参数 from-ip, from-port, to-ip, to-port 用于传递主服务器的旧地址和所选副本的新地址。# 举例:
# sentinel client-reconfig-script mymaster /var/redis/reconfig.sh
# 安全
# 避免脚本重置,默认值 yes
# 默认情况下,SENTINEL SET 将无法在运行时更改 notification-script 和 client-reconfig-script。# 这避免了一个简单的安全问题,客户端可以将脚本设置为任何内容并触发故障转移以便执行程序。sentinel deny-scripts-reconfig yes
# REDIS 命令重命名
# 在这种情况下,可以告诉 Sentinel 使用不同的命令名称而不是正常的命令名称。# 例如,如果主“mymaster”和相关副本的“CONFIG”全部重命名为“GUESSME”,我可以使用:# SENTINEL rename-command mymaster CONFIG GUESSME
# 设置此类配置后,每次 Sentinel 使用 CONFIG 时,它将使用 GUESSME。 请注意,实际上不需要尊重命令案例,因此在上面的示例中写“config guessme”是相同的。# SENTINEL SET 也可用于在运行时执行此配置。# 为了将命令设置回其原始名称(撤消重命名),可以将命令重命名为它自身:# SENTINEL rename-command mymaster CONFIG CONFIG
以上是“Redis 中哨兵模式的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!
向 AI 问一下细节