【Linux HA】冗長構成についての基本

サーバーを構築する際にビジネスインパクトに応じて「どれくらい安定したシステムを構築するのか」を設計します。

 

  • 数分でもサービスを止め手はいけないのか?
  • 翌日対応でも問題ないのか?

 

しかし今はインターネットがつながって当然、サイトにアクセスして当然の環境になっています。

Yahoo!もGoogleも数分つながらなくなっただけでニュースになるくらいです。

 

 

 

 

システム障害の原因

  • ハードウェアの故障
  • OSのバグ・誤作動
  • アプリケーションのバグ・誤作動
  • ネットワーク障害
  • リソース不足

 

上記の障害を完璧に防止できれば安定したシステムを実現させることができますが、現実には不可能です。

そこで「何らかの障害が発生する前提」でシステム構成を考える必要があります。

その結果、「冗長構成」という考え方が生まれました。

 

冗長構成の考え方

システムを冗長化させるためには下記の構成を考える必要があります。

  • サービスの停止を検知する
  • 同じサービスを提供できるサーバーを複数台用意する
  • クライアントからのアクセスを別サーバーに切り替えられる構成にする
  • データを同期させる仕組みにする

 

サーバー間でIPアドレスを共有する

VRRP(Virtual Router Redundancy Protocol)はもともとルーターを冗長化させるために考えられたプロトコルです。

複数のルーターを組み合わせて外部からは仮想的な1つのルーターを作ることでルーターの冗長構成を実現します。

VRRPはもともとルーターの冗長化を目的としていましたが、サーバーの冗長化にも利用できます。

 

keepalived は VRRP を利用している冗長化ソフトウェア

この VRRP プロトコルを利用して開発された冗長化用のソフトウェアが「keepalived」です。

keepalivedは「Linux Virtual Server Project」の中の「keepalived Project」によって開発されました。

keepalivedは複数のサーバーで冗長構成を組むことが可能で、LVS と連携する機能もあり、ロードバランサとして構成することも可能です。

 

つまり、

  • keepalived ← サーバーの冗長化
  • keepalived + LVS ← サーバーの冗長化 + ロードバランサ

の構成にすることも可能です。

 

keepalivedの設定ファイル

/etc/keepalived/keepalived.confファイル

 

keepalivedは何をしているのか?

仮想IPで通信をしています。

通常はマスター側が仮想IPを持っています。

スレーブ側(バックアップ側)は仮想IPを持っていません。(クライアントから通信がきません)

マスターと通信ができなくなると、keepalivedはスレーブ側に切り替えます。

つまり「ロードバランサ」ではありません。

あくまでも「アクティブ」「スタンバイ」型の冗長構成です。

 

具体的にどのようにして切り替えているのかと言いますと、ノード間(サーバー間)で定期的にパケットを交換してお互いに「死活監視」をしています。

そして相手ノードが停止したことを検出してサーバーを切り替えます。

 

ただしこの場合、ノード(サーバー)が停止したことは分かりますが「サービス(Apacheなど)」が停止したことは分かりません。

 

ではサービスが停止したタイミングでノード(サーバー)を切り替えたい場合はどうすればいいのでしょうか?

 

 

Pacemaker(旧 heartbeat)がサービス単位でのノード切り替えを実現する

keepalived があくまでもノード間(サーバー間)でのパケット交換でネットワーク障害単位でノード切り替えを実現していたのに対して、Pacemakerはサービス単位で障害を検知してノード切り替えをすることが可能です。

 

つまり

  • keepalived ← ノード障害
  • Peacemaker ← アプリケーション障害、ネットワーク障害、ノード障害、ディスク障害

の単位でノード切り替えを実現します。

 

Pacemakerとは

Pacemakerはオープンソースソフトウェア(OSS)のHAクラスタです。

HAクラスタとは、複数台のシステムを組み合わせてあたかも1つのシステムに見せることで、システムの一部の機能に障害が発生してもサービスが停止しないようにする仕組みのことを言います。

一般的には2台のサーバーを組み合わせてアクティブ・スタンバイ型のクラスタリングを実現し、サービスを停止しないように構成したシステムをHAクラスタ(ハイアベイラビリティ・フェイルオーバー・クラスタ)と言います。

 

Pacemakerの機能

  • アクティブスタンバイシステムの構築

2つのノードでアクティブ・スタンバイシステムを構成して、全体として1つのシステムを実現します。

アクティブ系からスタンバイ系への切り替え(フェイルオーバー)と、元のアクティブ系へサービスを戻す(フェイルバック)機能があります。

  • ノード(サーバー)稼働監視

ノード間でハートビートと呼ばれる定期的なパケット交換を行います。

相手ノードにパケットが届かない場合は「共有リソースの切り替え(フェイルオーバー)」を実行します。

  • サービス稼働監視

サービス監視プログラムにより定期的にサービスが稼働していることを確認します。

サービスが稼働していないことを検出したら「共有リソースの切り替え(フェイルオーバー)」を実行します。

  • ネットワーク稼働監視

ネットワーク監視プログラムにより定期的にネットワークが稼働していることを確認します。

ネットワークが稼働していないことを検出したら「共有リソースの切り替え(フェイルオーバー)」を実行します。

  • 共有リソースの切り替え

仮想IPアドレス、Apacheなどのサービスをアクティブ系からスタンバイ系に切り替えます。

 

Pacemakerの特徴

Pacemakerの特徴について解説します。

 

ハートビート用の監視ネットワーク

ノードの監視とノードの切り替えは確実に行わなければいけません。

そのためサービス用のネットワークとは別に監視用のネットワークを持ちます。

(監視用のネットワークを持たなくてもシステムは機能しますが、監視用のネットワークを持つことが推奨されています)

この監視用のネットワークで「ハートビート」をやり取りしています。

 

仮想IPアドレス

Pacemakerでは各サーバーのIPアドレスとは別にHAクラスタシステム全体で共有する「仮想IPアドレス」を設定できます。

この「仮想IPアドレス」はフェイルオーバーが発生した場合にサーバー間で引き継がれます。

(つまり、HAクラスタシステム全体としてのIPアドレスは変わりません)

また、複数の仮想IPアドレスを設定することもできます。

 

共有リソース

Pacemakerでのノード間の切り替えの際に引き継ぐリソースを「共有リソース」と言います。

以下のリソースを引き継ぐことができます。

  • 仮想IPアドレス
  • サービス
  • ファイルシステム

 

サービス監視

Pacemakerは「サービス監視」機能もあります。

サービス監視をして、サービス停止を検知したら、自サーバーを強制的に停止することでスタンバイ系にサービスを引き継ぐことができます。

PacemakerによるHAクラスタシステムを構築する際はどのサービスを監視するのか事前に設計をして、必要に応じて「サービス監視スクリプト」を作成します。

 

サービス監視スクリプトとは

PacemakerでHAクラスタシステムを構築すると、クラスタノードの死活監視とリソース機能が行われるようになります。

ノード単位の障害や、ネットワーク単位の障害が発生した場合はPacemakerが障害を検知して自動的にフェイルオーバーを実施します。

 

しかしデフォルトではサービスの障害は検知できないため「サービス監視スクリプト」を作成します。

一口にサービスと言っても様々な種類、様々な環境があり、あらかじめ組み込むことができないため、そこは個別に構築者が環境に合せて「サービス監視スクリプト」を設定します。

 

  • サービスを監視するためのスクリプトを作成
  • Pacemakerのrespawn機能を利用して起動する
  • サービス監視が有効に機能していることを確認する

 

サービス監視スクリプトはサービスが正常に稼働していることを監視しますが、柔軟にスクリプトを作成することができます。

C言語でもPerlでもRubyでもPythonでも可能です。

 

ちなみにPacemakerは、起動時にサービス監視スクリプトを起動します。

もしサービス監視スクリプトが停止してもPacemakerが再度起動する(respawn)ので、スクリプトを作り込む必要がなく、単純なサービス監視のスクリプトを作成することができます。

 

 

Apacheの冗長化について

Webサーバーを冗長化することもあります。

通常WebサーバーはApacheで構築することが多いですが、Apacheそのものが子プロセス監視をしているため停止しにくく設計されています。

そのためApacheそのものが停止する心配をするよりも、ハードウェア側やOSのリソース不足などApache以外が原因でサービスが停止する可能性が高いです。

その場合はApacheの冗長化というよりも「サーバーの冗長化」を考慮します。

 

 

参考図書

若干古いですが、LinuxによるHAクラスタシステムの構築テクニックが詳細に解説されている技術書です。

約530ページとボリュームがあり、すべてHAクラスタをどのようにして実現するかコマンドラインから丁寧に解説しています。

 

Linuxアドバンストネットワークサーバ構築ガイド HAサーバ構築編 (Network server construction guide series (13))

 

 

Posted by 100%レンタルサーバーを使いこなすサイト管理人

コメントを残す

メールアドレスが公開されることはありません。