本文章基于Redis 6.0.9版本,对Redis集群配置进行说明
目录
1.3.客户重新配置脚本(CLIENTS RECONFIGURATION SCRIPT)
1.5.REDIS命令重命名(REDIS COMMANDS RENAMING)
1.重要说明
默认情况下,Sentinel将无法通过不同于localhost的接口访问,或者使用'bind'指令绑定到网络接口列表,或者通过将其添加到此配置文件来禁用带有“protected-mode no”的保护模式。
在执行此操作之前,请确保通过防火墙或其他方式保护实例免受外界影响。
例如,您可以使用以下之一:
bind 127.0.0.1 192.168.1.1
protected-mode no
port <sentinel-port>
该哨兵实例将在其上运行的端口
port 26379
默认情况下,Redis Sentinel不会作为守护程序运行。 如果需要,请使用“yes”。请注意,Redis守护进程将在/var/run/redis-sentinel.pid中写入一个pid文件。
daemonize no
当以守护进程运行时,Redis Sentinel默认情况下会在/var/run/redis-sentinel.pid中写入一个pid文件。 您可以在此处指定自定义的pid文件位置。
pidfile /var/run/redis-sentinel.pid
指定日志文件名。 空字符串也可以用于强制Sentinel登录标准输出。 请注意,如果您使用标准输出进行日志记录但进行守护进程,则日志将发送到/dev/null
logfile ""
sentinel announce-ip <ip>
sentinel announce-port <port>
以上两个配置指令在因NAT而可以通过外部非本地地址从外部访问Sentinel的环境中很有用。
当提供了announce-ip 时,哨兵将声明 HELLO 消息中指定的 IP 地址,而不是像通常那样自动检测本地地址。
类似地,当通知端口被提供并且是有效的且非零时,Sentinel 将通知指定的 TCP 端口。
这两个选项不需要一起使用,如果仅提供了announce-ip,则Sentinel将宣布“port”选项指定的指定IP和服务器端口。 如果仅提供了公告端口,则Sentinel会公告自动检测到的本地IP和指定的端口。
例:
sentinel announce-ip 1.2.3.4
dir <working-directory>
每个长时间运行的进程都应具有定义明确的工作目录。
对于Redis Sentinel在启动时从chdir到/tmp来说,该过程不干扰管理任务(例如卸载文件系统)最简单。
dir /tmp
sentinel monitor <master-name> <ip> <redis-port> <quorum>
告诉Sentinel监视此主节点,并仅在至少<quorum>个哨兵同意的情况下,才将其视为O_DOWN(客观地处于Down)状态。
请注意,无论ODOWN quorum 数多少,都必须由大多数已知的Sentinels选举出Sentinel才能启动故障转移,因此,少数情况下无法执行故障转移。
复制节点是自动发现的,因此您无需以任何方式指定复制节点。 Sentinel本身将使用其他配置选项重写此配置文件并添加复制节点。
还要注意,将复制节点提升为主节点时,配置文件将被重写。
注意:主名称不应包含特殊字符或空格。
有效字符集为A-z 0-9和三个字符".-_"。
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel auth-pass <master-name> <password>
设置用于与主节点和复制节点进行身份验证的密码。
如果在Redis实例中设置了要监视的密码,则很有用。
请注意,主节点密码也用于复制节点,因此,如果您希望能够使用Sentinel监视这些实例,则无法在主节点实例和复制节点实例中设置其他密码。
但是,您可以将未启用身份验证的Redis实例与需要身份验证的Redis实例混合在一起(只要所有需要密码的实例的密码设置都相同),因为AUTH命令在关闭身份验证的Redis实例中无效 。
例:
sentinel auth-pass mymaster MySUPER--secret-0123passw0rd
sentinel auth-user <master-name> <username>
为了对具有ACL功能(即运行Redis 6.0或更高版本)的实例进行身份验证,这很有用。 仅提供auth-pass时,Sentinel实例将使用旧的“AUTH <pass>”方法向Redis进行身份验证。 当还提供了用户名时,它将使用“AUTH <user> <pass>”。
在Redis服务器端,应按照以下几行配置仅提供对Sentinel实例的最小访问权限的ACL:
user sentinel-user >somepassword +client +subscribe +publish \
+ping +info +multi +slaveof +config +client +exec on
sentinel down-after-milliseconds <master-name> <milliseconds>
为了使主节点(或主节点在指定期间内处于不可接受状态)在指定的时间段内,主节点(或任何追加的复制节点或哨兵)应无法到达的毫秒数(例如,对PING的不可接受的答复,连续的时间)。
默认值为30秒。
sentinel down-after-milliseconds mymaster 30000
requirepass <password>
您可以将Sentinel本身配置为要求输入密码,但是这样做时,Sentinel会尝试使用相同的密码向所有其他Sentinels进行身份验证。 因此,您需要使用相同的“requirepass”密码来配置给定组中的所有Sentinels。 查看以下文档以了解更多信息:https://redis.io/topics/sentinel
sentinel parallel-syncs <master-name> <numreplicas>
在故障转移期间,我们可以重新配置多少个复制节点以同时指向新复制节点。 如果您使用复制节点来提供查询,请使用一个较小的数字,以避免在与主节点执行同步时几乎同时无法访问所有复制节点。
sentinel parallel-syncs mymaster 1
sentinel failover-timeout <master-name> <milliseconds>
指定故障转移超时(以毫秒为单位)。 它以多种方式使用:
- 在给定的Sentinel已针对同一主节点尝试了先前的故障转移之后,重新启动故障转移所需的时间是故障转移超时的两倍。
- 根据Sentinel当前配置将复制节点复制到错误的主节点(被迫与正确的主节点进行复制)所需的时间恰好是故障转移超时(从Sentinel检测到错误配置的时刻开始计算)。
- 取消已在进行但未产生任何配置更改的故障转移所需的时间(SLAVEOF NO ONE尚未被提升的复制节点确认)。
- 故障转移正在进行中等待所有复制节点重新配置为新主节点的最长时间。 但是,即使在这段时间之后,无论如何,复制节点仍将由Sentinels重新配置,但不会按照指定的确切并行同步进行。
默认值为3分钟。
sentinel failover-timeout mymaster 180000
1.1.脚本执行(SCRIPTS EXECUTION)
使用sentinel通知脚本和sentinel重新配置脚本是为了配置在故障转移后被调用以通知系统管理员或重新配置客户端的脚本。 使用以下规则执行脚本以进行错误处理:
- 如果脚本以“1”退出,则稍后会重试执行(最多当前设置为10次)。
- 如果脚本以“2”(或更高的值)退出,则不会重试脚本执行。
- 如果脚本由于接收到信号而终止,则其行为与退出代码1相同。
- 脚本的最长运行时间为60秒。 达到此限制后,脚本将以SIGKILL终止,并重试执行。
1.2.通知脚本(NOTIFICATION SCRIPT)
sentinel notification-script <master-name> <script-path>
对于在警告级别生成的任何前哨事件(例如,-sdown,-odown等),调用指定的通知脚本。
该脚本应通过电子邮件,SMS或任何其他消息传递系统通知系统管理员,受监视的Redis系统有问题。
仅用两个参数调用脚本:第一个是事件类型,第二个是事件描述。
如果提供了此选项,该脚本必须存在并且可执行,以便哨兵启动。
例:
sentinel notification-script mymaster /var/redis/notify.sh
1.3.客户重新配置脚本(CLIENTS RECONFIGURATION SCRIPT)
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
1.4.安全(SECURITY)
默认情况下,SENTINEL SET将无法在运行时更改通知脚本和客户端重新配置脚本。 这避免了一个琐碎的安全问题,在该问题中,客户端可以将脚本设置为任何内容并触发故障转移以使程序得以执行。
sentinel deny-scripts-reconfig yes
1.5.REDIS命令重命名(REDIS COMMANDS RENAMING)
有时,Redis服务器具有某些命令(已重命名为无法猜测的字符串),这些命令使Sentinel正常工作。 在提供Redis服务的提供商的上下文中,通常是CONFIG和SLAVEOF的情况,它们不希望客户在管理控制台之外重新配置实例。
在这种情况下,可以告诉Sentinel使用不同的命令名,而不是普通的命令名。 例如,如果主节点“ mymaster”和关联的复制节点将“CONFIG”都重命名为“GUESSME”,则可以使用:
SENTINEL rename-command mymaster CONFIG GUESSME
设置好此类配置后,每次Sentinel使用CONFIG时,它将改为使用GUESSME。 注意,实际上并不需要遵守命令的大小写,因此在上面的示例中编写“configguesme”是相同的。
SENTINEL SET也可以用于在运行时执行此配置。
为了将命令设置回其原始名称(撤消重命名),可以将命令重命名为自身:
SENTINEL rename-command mymaster CONFIG CONFIG