これで安心!信頼性を高めるサーバのクラスタ構成 Part1

  • このエントリーをはてなブックマークに追加
  • Pocket

どうも!

寒い中で食べる屋台のラーメンは、最高に美味いと思っている新川です。

今回はサーバの信頼性を高めるクラスタ構成というものを紹介したいと思います。

 

サーバのクラスタ構成とは

サーバのクラスタ構成とは、複数のサーバを連結し利用者や他のサーバからは1台のサーバであるかの様に動作させる構成になります。

 

サーバ1台のみで動作するシステムだと、そのサーバで障害が発生した場合、サーバが復旧するまでサービスを提供することができなくなります。

しかし、クラスタ構成でサーバを構築していれば、1台のサーバで障害が発生しても、サービスが停止しない、またはすぐに復旧することが出来ます。

 

このようなクラスタ構成の環境を構築することをクラスタリングといいます。

 

クラスタリングには、上記の通り高可用性を目的としたものや、負荷分散を目的としたものなどがありますが、今回は高可用性を目的としたクラスタ構成を紹介していきたいと思います。

 

高可用性を目的としたクラスタ構成は、HA(High Availability)クラスタ構成と呼ばれます。

日本語を英語にして略しただけですねw

 

HAクラスタ構成でよく使用される構成を紹介します。

 

共有ディスク型

現用系サーバに障害が発生した際に、待機系サーバへの業務データの引継ぎ(フェイルオーバー)に共有ディスクを利用したクラスタ構成です。

大規模なクラスタ構成を構築でき、データベースサーバなどに利用されます。

共有ディスク

 

データミラー型

現用系サーバと待機系サーバのローカルディスクでミラーリングを行っており、現用系サーバに障害が発生した際に、待機系サーバへの業務データの引継ぎ(フェイルオーバー)にはローカルディスクを利用するクラスタ構成です。

低コストであるため小規模クラスタ構成に向いており、Web/APサーバなどに利用されます。

データミラー

 

 

HAクラスタ構成の構築

では実際にサーバのクラスタ構成を構築してみましょう。

 

構成情報は以下になります。

項目 現用系サーバ 待機系サーバ
OS Linux(CentOS 6.6)
ホスト名 node1 node2
IPアドレス 10.1.1.1 10.1.1.2
仮想IPアドレス 10.1.1.3
ハートビート用IPアドレス1 192.168.1.1 192.168.1.2
ハートビート用IPアドレス2 192.168.2.1 192.168.2.2

 

仮想IPアドレスは、他のサーバなどからのアクセスの際に利用されるIPアドレスとなります。

 

ハートビート用IPアドレスは、現用系と待機系のサーバが正常に動いているか互いに監視するために利用されるIPアドレスになります。

1つだとNICが故障した場合などに、サーバが正常に動作していても故障したと判断してしまうおそれがあるため、通常2つ用意します。

 

LinuxサーバでHAクラスタ構成のためのソフトウェアはいろいろありますが、今回はLinuxサーバのHAクラスタを構成するためのオープンソースソフトウェアである、HeartBeatとPacemakerというソフトウェアを使用したいと思います。

HeartBeatがサーバ間の通信を監視し、Pacemakerがサーバでサービスを動かすための判断と制御の仕組みを提供します。

 

以降の手順は、現用系と待機系の両方のサーバでそれぞれ実施します。

 

ソフトウェアのインストール

HeartBeatはPacemakerのパッケージに含まれているため、以下からPacemakerのパッケージをダウンロードします。

 

Pacemakerリポジトリパッケージ (RHEL6) 1.0.13-2.1
・ダウンロードファイル:pacemaker-1.0.13-2.1.el6.x86_64.repo.tar.gz

 

ダウンドードしてきたファイルをサーバに格納し、展開します。

[root]# tar xvzf pacemaker-1.0.13-2.1.el6.x86_64.repo.tar.gz

 

展開したディレクトリに移動し、インストールを行います。

[root]# cd pacemaker-1.0.13-2.1.el6.x86_64.repo
[root]# yum -c pacemaker.repo install heartbeat pacemaker-1.0.13
インストール処理の設定をしています
: 省略
完了しました!
[root]#

 

 

heartbeatの設定

続いてheartbeatの設定を行っていきます。

 

heartbeatの設定は /etc/ha.d/ 配下にある設定ファイルを使用しますが、インストールしただけだと設定ファイルが存在しないため、設定ファイルのサンプルをコピーしてきます。

[root]# cp /usr/share/doc/heartbeat-3.0.5/ha.cf /etc/ha.d/
[root]# cp /usr/share/doc/heartbeat-3.0.5/authkeys /etc/ha.d/

 

 

/etc/ha.d/authkeys(認証キー設定ファイル)を以下の様に修正し、権限を変更します。

[root]# vi /etc/ha.d/authkeys
#auth 1    → auth 1
#1 crc     → 1 crc
[root]#
[root]# chmod 600 /etc/ha.d/authkeys

 

 

/etc/ha.d/ha.ca(クラスタ制御ファイル)を以下の様に修正します。

 [root]# vi /etc/ha.d/ha.cf
以下を新規追加
pacemaker respawn
ucast eth1 192.168.1.2   ← ハートビートの使用NICと通信先IPアドレス
ucast eth2 192.168.2.2   ← ハートビートの使用NICと通信先IPアドレス
node node1               ← 現用系サーバのホスト名
node node2               ← 待機系サーバのホスト名
以下を変更
logfacility local0       → logfacility local1
#keepalive 2             → keepalive 2
#udpport 694             → udpport 694
[root]#

※上記ucastの設定値は現用系サーバでのものになります。待機系サーバの場合は以下になります。

ucast eth1 192.168.1.1

ucast eth2 192.168.2.1

 

 

システムログの設定変更

システムログの設定を変更しないと、/var/log/messages にログが大量に出力されてしまうため、クラスタ関連のログを別ファイルに出力する様に設定します。

 

/etc/syslog.conf(システムログ設定ファイル)を以下の様に修正します。

[root]# vi /etc/syslog.conf
/var/log/messages にログを出力しないように「local1.none」を追記。
*.info;mail.none;authpriv.none;cron.none                /var/log/messages

*.info;mail.none;authpriv.none;cron.none;local1.none    /var/log/messages
クラスタ関連のログを /var/log/ha-log にログを出力するように設定(新規追加)。
local1.info       /var/log/ha-log
[root]#

 

 

HeartBeatの起動

起動スクリプトを実行する前に、/etc/ha.d/shellfuncs ファイルにHA_BIN変数を設定します。

[root]# vi /etc/ha.d/shellfuncs
…省略…
: ${HA_SBIN_DIR:=/usr/sbin}
: ${HA_NOARCHBIN:=/usr/share/heartbeat}
: ${OCF_AGENTS:=/usr/lib/ocf/resource.d//heartbeat/}
HA_BIN=/usr/lib64/heartbeat
↑この位置に設定(新規追加)。今回は実行環境が64bit版であるため上記を設定。
export HA_DIR HA_RCDIR HA_FIFO HA_BIN
export HA_DEBUGLOG HA_LOGFILE HA_LOGFACILITY
export HA_DATEFMT HA_RESOURCEDIR HA_DOCDIR
export OCF_AGENTS
[root]#

 

 

以下のコマンドを実行し、HeartBeatを起動します。

[root]# /etc/init.d/heartbeat start
Starting High-Availability services: Done.

 

 

1分程時間をおいた後、以下のコマンドを実行して、設定したサーバがOnlineになることを確認します。

[root]# crm_mon
============
Last updated: Sat Nov  30 3:18:32 2014
Stack: Heartbeat
Current DC: node2 (50423879-219d-4961-93da-a7dfe59ab2cc) – partition with quorum
Version: 1.0.13-30bb726
2 Nodes configured, unknown expected votes
0 Resources configured.
============
Online: [ node1 node2 ]

 

 

仮想IPアドレス設定

以下の様に、”crm configure”コマンドを使用し、仮想IPアドレスを設定します。

[root]# crm configure
crm(live)configure# primitive vip ocf:heartbeat:IPaddr2 \
>params ip=”10.1.1.3″ \                 # 仮想IPアドレス
>nic=”eth0″ \
>cidr_netmask=”24″ \
>op start interval=”0s” timeout=”60s” \
>op monitor interval=”5s” timeout=”20s” \
>op stop interval=”0s” timeout=”60s”
crm(live)configure# show                # 設定確認
node node1
node node2
primitive vip ocf:heartbeat:IPaddr2 \
params ip=”10.1.1.3″ nic=”eth0″ cidr_netmask=”24″ \
op start interval=”0s” timeout=”60s” \
op monitor interval=”5s” timeout=”20s” \
op stop interval=”0s” timeout=”60s”
property $id=”cib-bootstrap-options” \
dc-version=”1.1.2-f059ec7ced7a86f18e5490b67ebf4a0b963bccfe” \
cluster-infrastructure=”openais” \
expected-quorum-votes=”2″ \
no-quorum-policy=”ignore” \
stonith-enabled=”false”
rsc_defaults $id=”rsc-options” \
resource-stickiness=”INFINITY” \
migration-threshold=”1″
crm(live)configure# commit              # 設定を有効にする
crm(live)configure# exit
bye
[root]#

 

 

以下のコマンドを実行し、仮想IPアドレスがアクティブになっていることを確認します。

[root]# crm_mon
============
Last updated: Sat Nov  30 3:32:58 2014
Stack: Heartbeat
Current DC: node2 (50423879-219d-4961-93da-a7dfe59ab2cc) – partition with quorum
Version: 1.0.13-30bb726
2 Nodes configured, unknown expected votes
0 Resources configured.
============
Online: [ node1 node2 ]
vip     (ocf::heartbeat:IPaddr2):       node1

 

 

PINGを実行し、仮想IPアドレスに対し通信できることを確認します。

[root]# ping 10.1.1.3
PING 10.1.1.3 (10.1.1.3) 56(84) bytes of data.
64 bytes from 10.1.1.3: icmp_seq=1 ttl=64 time=0.016 ms
64 bytes from 10.1.1.3: icmp_seq=2 ttl=64 time=0.008 ms
64 bytes from 10.1.1.3: icmp_seq=3 ttl=64 time=0.009 ms
64 bytes from 10.1.1.3: icmp_seq=4 ttl=64 time=0.025 ms
64 bytes from 10.1.1.3: icmp_seq=5 ttl=64 time=0.014 ms
64 bytes from 10.1.1.3: icmp_seq=6 ttl=64 time=0.008 ms
— 10.1.1.3 ping statistics —
6 packets transmitted, 6 received, 0% packet loss, time 5149ms
rtt min/avg/max/mdev = 0.008/0.013/0.025/0.006 ms
[root]#

 

 

クラスタ構成の動作確認

仮想IPアドレスが割り当てられているサーバを停止し、再度PINGで疎通を確認してみましょう。

仮想IPアドレスに対し通信ができていれば正常にクラスタの機能が働いています。

 

 

まとめ

今回は Part1 ということで、クラスタ構成の基礎部分の紹介となりました。

実際にクラスタ構成上でサービスを動作させるには、フェイルオーバー時のサービスの制御などいろいろやらなくてはなりません。

Part2 では、今回ちょこっとだけ出て来た Pacemaker を使用したサービスの制御を紹介したいと思います。

 

  • このエントリーをはてなブックマークに追加
  • Pocket

SNSでもご購読できます。

コメントを残す

*