Redis—哨兵集群—其他配置

系列文章目录

一、基础
二、常规命令
三、工作原理
四、主从切换
五、其他配置



前言

  这里内容主要引自官方网站Redis sentinel,便于后期使用时查看。其相关内容主要涉及非核心模块功能。更多的是更全面的学习Sentinel知识。


一、IP地址和DNS名称

  旧版本的Sentinel不支持主机名,并且需要在任何地方使用IP地址。从6.2版本开始,Sentinel提供了对主机名的可选支持。

默认情况下此功能处于禁用状态。如果要启用 DNS/主机名支持,请注意:

  • Redis 和 Sentinel 节点上的名称解析配置必须可靠,并且能够快速解析地址。地址解析的意外延迟可能会对 Sentinel 产生负面影响。
  • 应该在任何地方使用主机名,并避免将主机名和IP地址混合使用。要做到这一点,分别为所有Redis和Sentinel实例使用replica-announce-ip hostname ;sentinel announce-ip hostname

启用全局配置允许 Sentinel 接受主机名:resolve-hostnames

  • 作为命令的一部分sentinel monitor
  • 作为副本地址,如果复制副本使用replica-announce-ip

  Sentinel将接受主机名作为有效输入并解析它们,但在宣布实例、更新配置文件等时仍会引用 IP 地址。
  启用全局配置会使 Sentinel 改用主机名。这会影响对客户端的回复、写入配置文件中的值、向副本发出的 REPLICAOF 命令等。比如announce-hostnames
  此行为可能与明确需要 IP 地址的所有 Sentinel 客户端不兼容。

  当客户端使用TLS连接到实例并且需要名称而不是IP地址来执行证书ASN匹配时,使用主机名可能很有用。

二、副本优先级

  Redis 实例具有一个名为replica-priority的配置参数。 此信息由 Redis 副本实例在其 INFO 输出中公开, Sentinel使用它是为了在可以用于故障转移主服务器:

  • 如果副本优先级设置为 0,则永远不会将副本提升为主副本。
  • 具有较低优先级编号的副本是 Sentinel 的首选。可以参考前面文章中主从切换选主规则

例如,如果当前数据中心的同一数据中心中有一个副本 S1,以及另一个数据中心的另一个副本S2,可以设置优先级为1的 S10 和优先级为 2 的 S100,因此如果主节点失败,并且S1和S2都可用,S1将是首选。

三、身份认证Auth

1.Redis身份认证

  从 Redis 6 开始,用户身份验证和权限通过访问控制列表 (ACL) 进行管理。
为了让哨兵在 Redis 服务器实例时连接到 Redis 服务器实例 配置了 ACL,哨兵配置必须包括 以下指令:

sentinel auth-user <master-name> <username>
sentinel auth-pass <master-name> <password>

  用于访问实例的用户名和密码应具有最小控制权限的组的所有 Redis 实例上预置这些凭证。例如:username password
其中凭证之和是访问组实例的用户名和密码。这些凭证应该以最小的控制权限提供给组的所有Redis实例。

127.0.0.1:6379> ACL SETUSER sentinel-user ON >somepassword allchannels +multi +slaveof +ping +exec +subscribe +config|rewrite +role +publish +info +client|setname +client|kill +script|kill

在Redis6之前

sentinel auth-pass <master-name> <password>

2.Sentinel身份认证

  Sentinel的身份验证配置应该应用于部署中的每个实例,并且所有实例都应该使用相同的配置。此外,ACL和仅密码身份验证不应该一起使用。

ACL认证
  使用ACL保护Sentinel实例的第一步是防止任何未经授权的访问。为此,需要禁用默认的超级用户(或者至少给它设置一个强密码),并创建一个新的超级用户,并允许它访问Pub/Sub频道:

127.0.0.1:5000> ACL SETUSER admin ON >admin-password allchannels +@all
OK
127.0.0.1:5000> ACL SETUSER default off
OK

Sentinel使用默认用户连接到其他实例。可以使用以下配置指令提供另一个超级用户的凭据:

sentinel sentinel-user <username>
sentinel sentinel-pass <password>

要对传入的客户端连接进行身份验证,您可以创建 Sentinel 受限用户配置文件,如下所示:

127.0.0.1:5000> ACL SETUSER sentinel-user ON >user-password -@all +auth +client|getname +client|id +client|setname +command +hello +ping +role +sentinel|get-master-addr-by-name +sentinel|master +sentinel|myid +sentinel|replicas +sentinel|sentinels

仅密码
要使用带有密码认证的Sentinel,将requirepass配置指令添加到所有Sentinel实例中,如下所示:

requirepass "password"

当以这种方式配置时,sentinel将做两件事:

  • 客户端需要密码才能向哨兵发送命令。这是显而易见的,因为这是这样的配置指令工作在一般的Redis。
  • 此外,该Sentinel实例将使用用于访问本地Sentinel的相同密码,以验证它连接到的所有其他Sentinel实例。

这意味着必须在所有Sentinel实例中配置相同的requirepass密码。这样一来,每个哨兵都可以与其他哨兵交谈,而不需要为每个哨兵配置访问所有其他哨兵的密码。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值