はじめに (対象読者・この記事でわかること)
この記事は、Linuxの基本的な操作に慣れているシステム管理者やインフラエンジニアの方を対象としています。また、高可用性システムやスケーラブルなシステムの構築に興味がある方にも役立つ内容です。
本記事を読むことで、Linuxクラスタシステムの基本的な概念、クラスタ構築のためのハードウェア要件、クラスタソフトウェアの選定方法、具体的なクラスタ設定手順、そしてクラスタシステムの運用・保守のポイントを理解できます。クラスタシステムを導入することで、システムの可用性向上と負荷分散を実現するための実践的な知識を習得できます。
前提知識
この記事を読み進める上で、以下の知識があるとスムーズです。 - Linuxの基本的なコマンド操作 - ネットワークの基本的な知識(IPアドレス、サブネットマスク、ルーティングなど) - SSH接続の基本 - システム管理の基本的な知識
クラスタシステムの概要と導入の必要性
クラスタシステムとは、複数のコンピュータをネットワークで接続し、一つのシステムとして動作させる技術です。単一のコンピュータでは実現できない高性能、高可用性、スケーラビリティを実現するために利用されます。
近年、ビッグデータ処理やAI、クラウドサービスなど、大規模な計算処理を必要とするアプリケーションが増加しており、クラスタシステムの重要性はますます高まっています。特にLinuxはオープンソースであることから、クラスタ構築に広く利用されています。
クラスタシステムには主に以下の種類があります: 1. 高可用性クラスタ(High Availability Cluster):システムの冗長化を実現し、障害発生時にサービスを継続する 2. ロードバランシングクラスタ(Load Balancing Cluster):トラフィックを複数のサーバーに分散し、処理能力を向上させる 3. 分散処理クラスタ(Distributed Processing Cluster):複数のコンピュータで処理を分担し、高速化を実現する
本記事では、特に高可用性クラスタとロードバランシングクラスタを組み合わせた一般的なクラスタシステムの導入方法について解説します。
クラスタシステムの具体的な導入手順
ステップ1:ハードウェアとソフトウェアの選定
クラスタシステムを構築するには、まず適切なハードウェアとソフトウェアを選定する必要があります。
ハードウェア要件: - サーバーマシン:少なくとも3台以上(奇数台が推奨) - ネットワーク環境:高速なネットワーク(10GbE以上が望ましい) - 共有ストレージ(必要に応じて) - 運用管理用のコンソールポート
ソフトウェア要件: - OS:CentOS/RHELやUbuntu Serverなどの安定したディストリビューション - クラスタ管理ソフトウェア:Pacemaker、Corosync、Keepalivedなど - ロードバランサー:HAProxy、Nginxなど - モニタリングツール:Prometheus、Grafanaなど
例として、CentOS 8をベースにしたクラスタシステムを構築する場合、以下のソフトウェアを組み合わせることが一般的です: - OS:CentOS 8 - クラスタ管理ソフトウェア:Pacemaker + Corosync - ロードバランサー:HAProxy - モニタリング:Prometheus + Grafana
ステップ2:基本システムのセットアップ
まず、クラスタを構成する各サーバーの基本システムをセットアップします。
OSインストール: 1. 各サーバーにOSをインストールします。 2. ネットワーク設定を行い、サーバー間で相互に通信できるようにします。 3. ホスト名を設定します(例:node1.example.com、node2.example.comなど)。 4. 静的IPアドレスを設定します。
ユーザー設定: 1. 管理者用のユーザーを作成します。 2. SSHキーを生成し、各サーバー間でパスワードなしでログインできるように設定します。 3. sudo権限を付与します。
ファイアウォール設定: 1. 各サーバーのファイアウォールを設定し、クラスタ通信に必要なポートを開放します。 - Corosync:ポート5405(TCP/UDP) - HAProxy:ポート80(HTTP)、443(HTTPS) - SSH:ポート22
例として、Corosyncの通信に必要なポートを開放するコマンドは以下の通りです:
Bashsudo firewall-cmd --permanent --add-port=5405/tcp sudo firewall-cmd --permanent --add-port=5405/udp sudo firewall-cmd --reload
ステップ3:クラスタソフトウェアのインストールと設定
次に、クラスタを管理するためのソフトウェアをインストールし、設定します。
PacemakerとCorosyncのインストール:
Bashsudo yum install -y pacemaker pcs corosync
クラスタユーザーの設定:
Bashsudo hacluster passwd # パスワードを設定
クラスタ設定ファイルの編集: Corosyncの設定ファイルを編集します:
Bashsudo vi /etc/corosync/corosync.conf
設定ファイルの例:
totem {
version: 2
cluster_name: my_cluster
secauth: on
crypto_hash: sha1
crypto_cipher: aes256
}
nodelist {
node {
ring0_addr: node1.example.com
nodeid: 1
}
node {
ring0_addr: node2.example.com
nodeid: 2
}
node {
ring0_addr: node3.example.com
nodeid: 3
}
}
quorum {
provider: corosync_votequorum
}
クラスタの起動:
Bashsudo systemctl start corosync sudo systemctl start pacemaker sudo systemctl enable corosync sudo systemctl enable pacemaker
ステップ4:リソースの設定
クラスタで管理するリソース(サービス、IPアドレス、仮想IPなど)を設定します。
仮想IPアドレスの設定:
Bashsudo pcs resource create VirtualIP ocf:heartbeat:IPaddr2 ip=192.168.1.100 cidr_netmask=24 op monitor interval=30s
サービスの設定: 例として、Webサーバーをクラスタで管理する場合:
Bashsudo pcs resource create WebSite ocf:heartbeat:apache configfile=/etc/httpd/conf/httpd.conf statusurl="http://localhost/server-status" op monitor interval=30s
リソースの配置ポリシーの設定:
Bashsudo pcs constraint location WebSite prefers node1.example.com=10 sudo pcs constraint location WebSite prefers node2.example.com=5
ステップ5:ロードバランサーの設定
クラスタの前にロードバランサーを配置し、トラフィックを分散します。
HAProxyのインストール:
Bashsudo yum install -y haproxy
HAProxy設定ファイルの編集:
Bashsudo vi /etc/haproxy/haproxy.cfg
設定ファイルの例:
frontend http-in
bind *:80
default_backend web-backend
backend web-backend
balance roundrobin
server web1 192.168.1.100:80 check
server web2 192.168.1.101:80 check
HAProxyの起動:
Bashsudo systemctl start haproxy sudo systemctl enable haproxy
ステップ6:モニタリングとログの設定
クラスタの状態を監視し、問題が発生した際に迅速に対応できるようにします。
PrometheusとGrafanaのインストール: 1. Prometheusのリポジトリを追加
Bashsudo yum localinstall -y https://repo Prometheus.io/packages/centos/prometheus-release-1.0.1-1.el7.cec.noarch.rpm
- PrometheusとGrafanaをインストール
Bashsudo yum install -y prometheus grafana
Prometheus設定ファイルの編集:
Bashsudo vi /etc/prometheus/prometheus.yml
設定ファイルの例:
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node'
static_configs:
- targets: ['node1.example.com:9100', 'node2.example.com:9100', 'node3.example.com:9100']
PrometheusとGrafanaの起動:
Bashsudo systemctl start prometheus sudo systemctl enable prometheus sudo systemctl start grafana-server sudo systemctl enable grafana-server
ハマった点やエラー解決
クラスタ構築中には、様々な問題に直面することがあります。ここでは、よくある問題とその解決策を紹介します。
問題1:クラスタノード間の通信ができない
現象:pcs statusコマンドを実行した際に、クラスタノードが認識されていない。
原因: - ファイアウォールが原因でポートが閉じられている - ホスト名解決が正しく行われていない - ネットワーク設定に誤りがある
解決策: 1. ファイアウォール設定を確認し、必要なポートが開放されているか確認する
Bashsudo firewall-cmd --list-ports
/etc/hostsファイルに各ノードのIPアドレスとホスト名を正しく設定しているか確認する
Bashcat /etc/hosts
- ネットワーク設定を確認し、各ノード間でpingが通るか確認する
Bashping node1.example.com
問題2:リソースの起動に失敗する
現象:設定したリソースが起動しない、または頻繁に停止する。
原因: - リソースの設定に誤りがある - 依存関係の設定が不適切 - サービスの起動に必要なファイルや設定が不足している
解決策: 1. リソースのログを確認する
Bashsudo pcs resource show WebSite sudo pcs resource debug-start WebSite
- リソースの依存関係を確認し、必要に応じて修正する
Bashsudo pcs constraint list
- サービスの設定ファイルを確認し、必要な設定がされているか確認する
Bashsudo cat /etc/httpd/conf/httpd.conf
問題3:ノード障害時にリソースが移動しない
現象:特定のノードがダウンしても、リソースが他のノードに移動しない。
原因: - クラスタのクォーラム設定が不適切 - ストールノードの検出が正しく機能していない
解決策: 1. クラスタのクォーラム設定を確認する
Bashsudo pcs quorum status
- ストールノードの検出時間を調整する
Bashsudo pcs property set stonith-enabled=false sudo pcs property set no-quorum-policy=ignore
解決策
上記の問題を解決するための一般的なアプローチは以下の通りです:
- システムログの確認:まずはシステムログを確認し、エラーメッセージがないか確認します。
Bashsudo journalctl -u corosync -u pacemaker -f
- クラスタ状態の確認:クラスタの現在の状態を確認し、問題の箇所を特定します。
Bashsudo pcs status sudo crm_mon -1
-
設定ファイルの再確認:設定ファイルに誤りがないか再確認し、必要に応じて修正します。
-
テスト環境での検証:本番環境で修正する前に、テスト環境で動作確認を行います。
-
ベストプラクティスの適用:コミュニティやベンダーが推奨するベストプラクティスを適用します。
まとめ
本記事では、Linuxクラスタシステムの導入方法から基本設定までを解説しました。クラスタシステムの概要、ハードウェアとソフトウェアの選定、基本システムのセットアップ、クラスタソフトウェアのインストールと設定、リソースの設定、ロードバランサーの設定、モニタリングとログの設定といった手順を詳しく説明しました。
クラスタシステムを構築することで、システムの高可用性とスケーラビリティを実現できます。障害が発生してもサービスを継続できるため、ビジネス継続性を確保できます。また、トラフィックを分散することで、システム全体のパフォーマンスを向上させることができます。
本記事で紹介した手順を参考に、ご自身の環境に合わせたクラスタシステムを構築してみてください。クラスタシステムの運用には継続的な監視とチューニングが必要ですが、適切に運用することで、安定したシステムを構築できます。
今後は、クラスタシステムの高度な設定や、特定のアプリケーションをクラスタで動作させる方法についても記事にする予定です。
参考資料
