3

アプリケーションを実行している 100 を超える Web サーバー インスタンスがあり、ときどき (フリート全体で週に 1 回の順序で) キャッシュの 1 つが破損し、独特のエラー ログ メッセージが表示されます。

これが発生すると、アプリケーションはそのノードで停止し、ルーティングされたトランザクションはすべて失敗します。

私は単純なラッパーを作成しました。tail -Fこれは、ログ ファイルに表示されるたびにパターンを見つけ、反応するシェル コマンド ( のコマンドevalを使用して、 サーバーをシャットダウンし、キャッシュをウォームアップ (更新) し、もちろん Web サーバーを再起動するカスタム モジュールの処理をトリガーします。(実際には、このラッパーと Python の 2 つの形式があります)。salt-callbash

これは問題なく、イベントの頻度は問題になる可能性が低いものです。しかし、私の上司は、非常に合理的に、共通モード障害パターンについて懸念しています...正規表現がこれらのログの多くに一度に表示され、サイト全体が取り壊される可能性がある.

私が最初に考えsalt-callたのは、チェックでラップすることです (キャッシングやその他の特定のデータ構造に使用される Redis インフラストラクチャが既にあります)。これは、有効期限付きの整数として実装されます。チェックは INCR を呼び出し、結果をチェックし、N を超える値が返された場合 (または Redis サーバーに到達できない場合) はスリープします。結果がしきい値を下回った場合はsalt-callディスパッチされ、サーバーがバックアップされて実行された後にデクリメントが呼び出されます。(Redis キーの有効期限が切れると、おそらく 1 日または数時間後に古いインクリメントが削除されます...アラート システムは既にサーバーのダウンを通知しており、応答時間はそのような時間枠に対して十分です)。

ただし、Saltstack イベント処理機能について読んでいて、代わりにそれを使用する方がよいかどうか疑問に思っていました。(利点として、ノードにはredis-cliコマンド ツールも Python Redis ライブラリもありませんが、明らかに、salt-call必要なサポートが既に存在します)。そのため、Salt で何かを使用すると、これらのシステムに追加のパッケージと依存関係を追加する必要性が最小限に抑えられます。(別の方法として、すべての Redis 処理を別の PHP コマンド ライン ユーティリティとして記述し、シェル スクリプトでそれを呼び出すこともできます)。

単純な Saltstack モジュールを作成するための HOWTO はありますか? ドキュメントは、オリエンテーションなしで参照の詳細に深く入り込むようです。どの用語で検索するかについてのいくつかの提案も役に立ちます (柱、穀物、ミニオンなどの用語の使用はやや不透明に見えるため)。

4

1 に答える 1

0

Salt モジュールを作成するためのメイン ドキュメントは次のとおりです: http://docs.saltstack.com/en/latest/ref/modules/index.html

インスピレーションを得るのに役立つ多くのモジュールが Salt に同梱されています。ここで見つけることができます: https://github.com/saltstack/salt/tree/develop/salt/modules

心に留めておくべきことの 1 つは、何かをするように指示しない限り、Salt Minion は何もしないということです。したがって、言及したエラーパターンをチェックするモジュールを作成できますが、頻繁に実行されるようにするには、Salt Scheduler または cron に追加する必要があります。

さらに支援が必要な場合は、IRC の #salt on freenode で役立つ人を見つけることができます。

于 2014-09-08T18:47:07.410 に答える