ホームページ  >  記事  >  データベース  >  Redis のセントリー モードについて話しましょう

Redis のセントリー モードについて話しましょう

青灯夜游
青灯夜游転載
2021-05-11 11:35:132082ブラウズ

この記事では、Redis のセンチネル モードについて説明します。一定の参考値があるので、困っている友達が参考になれば幸いです。

Redis のセントリー モードについて話しましょう

マスター/スレーブ切り替えテクノロジーの方法は次のとおりです。

  • メイン サーバーがダウンした場合は、手動で切り替える必要があります。スレーブ サーバー (slaveof no one) からマスター/スレーブ サーバーに切り替えるには、手動介入が必要です。
  • これには時間と労力がかかりますが、サービスが一定期間利用できなくなることもあります。これは推奨されるアプローチではありません。
  • もう少し時間をかけて、 現在のエンタープライズ アプリケーションの主流モードであるセントリー モード を優先します。 Redis Sentinel は、Redis の 高可用性実装です。
  • Sentinel は、複数の Redis インスタンスを管理するためのツールです。 監視、Redisへの通知、自動フェイルオーバーが可能です。

Redis Sentinel の基本概念

マスター/スレーブ レプリケーションと Sentinel 高可用性アーキテクチャの概略図

Redis のセントリー モードについて話しましょう

Redis Sentinel アーキテクチャ

Redis のセントリー モードについて話しましょう

Redis Sentinel の主な機能 Sentinel の主な機能は次のとおりです。

##マスターノード生存検出、マスター/スレーブ動作検出、自動フェイルオーバー、およびマスター/スレーブ切り替え。

    Redis の最小タグ構成は 1 つのホストと 1 つのスレーブです。
  • Redis の Sentinel システムを使用して、複数の Redis サーバーを管理できます。
  • システムは次の 4 つのタスクを実行できます:
1.

監視: Sentinel はマスター サーバーとスレーブが接続されているかどうかを常にチェックします。サーバーは正常です。実行; 2,
通知: 監視対象の Redis サーバーに問題がある場合、Sentinel は API スクリプトを通じて管理者または他のアプリケーションに通知を送信します; 3、
自動フェイルオーバー: マスター ノードが正常に動作しない場合、Sentinel は自動フェイルオーバー操作を開始します。障害が発生したマスター ノードとマスター/スレーブ関係にあるスレーブ ノードの 1 つを新しいマスター ノードにアップグレードし、他のスレーブ ノードが新しいマスター ノードを指すようにします。4、
構成プロバイダー: Redis Sentinel モードでは、クライアント アプリケーションを初期化するときに、Sentinel ノード コレクションに接続してマスター ノードの情報を取得します。

Redis Sentinel の仕組み

    センチネル ノードが Redis インスタンスに接続すると、cmd と pub/sub という 2 つの接続が作成されます。 Sentinel は、cmd 接続を介して Redis にコマンドを送信し、pub/sub 接続を介して Redis インスタンス上の他の Sentinel インスタンスにコマンドを送信します。
  • Sentinel が Redis マスター ノードおよびスレーブ ノードと対話するためのコマンド
  • 各 Sentinel は、既知のマスター インスタンス、スレーブ インスタンス、および他の Sentinel インスタンスに 1 秒ごとに PING コマンドを送信します。

Redis のセントリー モードについて話しましょう

    #PING コマンドに対する最後の有効な応答からインスタンスが down で指定された時間 (ミリ秒単位) よりも長くかかる場合、Sentinelインスタンスは
  • 主観的にオフライン とマークされます。

Redis のセントリー モードについて話しましょう

    マスター サーバーが主観的ログアウトとしてマークされている場合、マスター サーバーのすべての Sentinel ノードが監視され、マスター サーバーが実際にログアウトしたことを確認します。 1 秒に 1 回の主観的なログアウト。ログアウト ステータス。

Redis のセントリー モードについて話しましょう

    マスターが主観的ログアウト用にマークされており、指定された時間枠内に十分な監視員 (少なくとも構成ファイルで指定された数) がある場合この判断と一致する場合、メイン サーバーは客観的にオフラインとしてマークされます。

Redis のセントリー モードについて話しましょう

    通常、各 Sentinel は、既知のすべてのマスターとスレーブに 10 秒ごとに INFO コマンドを送信します。 Sentinel がマスター サーバーをオフラインとしてマークすると、Sentinel がオフラインのマスター サーバーのすべてのスレーブ サーバーに INFO コマンドを送信する頻度が 10 秒に 1 回から 1 秒に 1 回に変更されます。

Redis のセントリー モードについて話しましょう

    Sentinel は、マスター ノードのステータスを他の Sentinel とネゴシエートします。マスター ノードが SDOWN 状態にある場合、投票により新しいマスター ノードが自動的に選択されます。残りのスレーブ ノードがデータ レプリケーション
  • 用の新しいマスター ノード を指すようにします。

Redis のセントリー モードについて話しましょう

  • マスターがログアウトできるほど十分な監視員がいない場合、、マスターの目的のログアウト ステータスは削除されます。マスターが Sentinel の PING コマンドに対して有効な応答を返すと、マスターの主観的なオフライン ステータスは削除されます。

Redis のセントリー モードについて話しましょう

    #note

堅牢な Redis Sentinel クラスターでは、少なくとも 3 つの Sentinel インスタンスを使用する必要があります。また、これらのインスタンスは必ず別のマシン、または別の物理領域に配置してください。
Sentinel は強力な一貫性を保証できません。 Sentinel は、一般的なクライアント アプリケーション ライブラリでサポートされています。
Sentinel では、高可用性を確保するために継続的なテストと観察が必要です

テスト

    構成ファイルを作成する

Redis のセントリー モードについて話しましょう

簡単な構成は次のとおりです。

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 をマスターとして設定

1Redis のセントリー モードについて話しましょう

    センチネルを再起動
  • sudo redis-sentinel sentinel-1/sentinel.conf

1Redis のセントリー モードについて話しましょう

    閉じる6379

13 .png

    他の 2 つの redis-cli の役割を確認します

1Redis のセントリー モードについて話しましょう

##6379 を再起動

1Redis のセントリー モードについて話しましょう

センチネル ログを表示

1Redis のセントリー モードについて話しましょう

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 のセントリー モードについて話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.cnで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。