2010年8月12日木曜日

Hadoop (6) NameNodeをRHCS/GFSでクラスタ化する A


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


現在のHadoopにおけるHDFSはNameNodeが単一障害点となり、ダウンした場合一切の作業ができなくなってしまう。

Secondary Name Node はPrimaryのバックアップではなく、ジャーナル書き込み等を支援するノードのなるので注意。

そこで、Name ServerをRedHat標準のクラスタソフトであるRedHat Cluster Suiteと、Global File Systemを用いて可用性を保持させてみる。

GFSを使うメリットは全てのノードから等価にファイルシステムへアクセスできるため、RHCSで仮想IPの制御さえしてやれば、どのノードでもPrimary Name Nodeを起動できるようになる事。これはNFSでも実現できるが、細かなブロックアクセスが多い、Name NodeではGFSの方が性能を担保しやすい(と思う

■今回の環境は以下
RHEL5.5 クラスタ管理 192.168.1.101
・RHEL5.5 Primary Name Node 192.168.1.102
・RHEL5.5 Backup Name Node 192.168.1.103
・RHEL5.5 Secondary Name Node 192.168.1.104
・Solaris10 共有ストレージ(iSCSI)、192.168.1.10
・NameNodeの仮想アドレス 192.168.1.105
・NameNodeの仮想アドレス 192.168.1.106
・NameNodeの仮想アドレス 192.168.1.107

*このクラスタ構成はCentOSでも使える。が、RHCSは他のクラスタソフトに比べ、様々な障害に対して対応できるように設計されているため、構造がやや複雑なので、本番で使う場合は正規のサブスクリプションのあるRHEL APを推奨。
*ここでは動かすことに注力するので、細かな障害対応設定は省いているので注意。
*本当はネットワークはクラスタ通信用と分離した方が良いが、今回は全て同居させている。


■名前解決
RHCSは参加する全てのノードでFQDNによる名前解決が必須なので、以下をhostsに記載しておく。
# RHEL Cluster
192.168.1.101   rhcs-master.sol-net.jp rhcs-master
192.168.1.102   rhcs-node1.sol-net.jp rhcs-node1
192.168.1.103   rhcs-node2.sol-net.jp rhcs-node2
192.168.1.104   rhcs-node3.sol-net.jp rhcs-node3
192.168.1.105   rhcs-vip01.sol-net.jp rhcs-vip05
192.168.1.106   rhcs-vip01.sol-net.jp rhcs-vip06
192.168.1.107   rhcs-vip01.sol-net.jp rhcs-vip07

■必要パッケージのインストール
クラスタの設定にはCongaプロジェクトのLuci&Ricciを使用する。

各ノードで以下のパッケージをメディアよりインストール。yumで行う場合、RHELだとAPサブスクリプションが必要。

・クラスタ管理
上記に加えて、以下もインストールする。
rpm -ihv Server/tix-8.4.0-11.fc6.i386.rpm
rpm -ihv Server/tkinter-2.4.3-27.el5.i386.rpm
rpm -ihv Server/python-imaging-1.1.5-5.el5.i386.rpm
rpm -ihv Cluster/luci-0.12.2-6.el5.i386.rpm

・クラスタノード
rpm -ihv Server/perl-XML-LibXML-Common-0.13-8.2.2.i386.rpm
rpm -ihv Server/perl-XML-NamespaceSupport-1.09-1.2.1.noarch.rpm
rpm -ihv Server/perl-XML-SAX-0.14-8.noarch.rpm
rpm -ihv Server/perl-XML-LibXML-1.58-6.i386.rpm
rpm -ihv Server/perl-Net-Telnet-3.03-5.noarch.rpm
rpm -ihv Server/openais-0.80.6-16.el5.i386.rpm
rpm -ihv Server/pexpect-2.3-3.el5.noarch.rpm
rpm -ihv Server/cman-2.0.115-34.el5.i386.rpm
rpm -ihv Server/oddjob-libs-0.27-9.el5.i386.rpm
rpm -ihv Server/oddjob-libs-0.27-9.el5.i386.rpm Server/oddjob-0.27-9.el5.i386.rpm
rpm -ihv Cluster/modcluster-0.12.1-2.el5.i386.rpm
rpm -ihv Cluster/ricci-0.12.2-12.el5.i386.rpm
rpm -ihv Server/sg3_utils-libs-1.25-4.el5.i386.rpm
rpm -ihv Server/sg3_utils-1.25-4.el5.i386.rpm
rpm -ihv Cluster/rgmanager-2.0.52-6.el5.i386.rpm
rpm -ihv ClusterStorage/lvm2-cluster-2.02.56-7.el5.i386.rpm
rpm -ihv ClusterStorage/cmirror-1.1.39-8.el5.i386.rpm
rpm -ihv ClusterStorage/kmod-cmirror-0.1.22-3.el5.i686.rpm <-自分のカーネルにあったもの
rpm -ihv ClusterStorage/kmod-gfs-0.1.34-12.el5.i686.rpm <-自分のカーネルにあったもの
rpm -ihv Server/gfs2-utils-0.1.62-20.el5.i386.rpm
rpm -ihv ClusterStorage/gfs-utils-0.1.20-7.el5.i386.rpm

各サーバでricciを起動し、サーバを再起動する。
# chkconfig ricci on
# reboot

■クラスタ管理サーバでLuciを起動、管理WEBへアクセス
# chkconfig luci on
# luci_admin init
 → パスワード設定
 → https://rhcs-master.sol-net.jp:8084

■クラスタへ参加


参加後の状態
[root@rhcs-node1 ~]# clustat
Cluster Status for cluster01 @ Thu Aug 12 17:34:19 2010
Member Status: Quorate

 Member Name                                     ID   Status
 ------ ----                                     ---- ------
 rhcs-node1.sol-net.jp                               1 Online, Local
 rhcs-node2.sol-net.jp                               2 Online
 rhcs-node3.sol-net.jp                               3 Online

またクラスタへ参加することで、LVMのDLM(分散ロックマネージャが有効になる)
cat /etc/lvm/lvm.conf
---------抜粋----------
# Type of locking to use. Defaults to local file-based locking (1).
# Turn locking off by setting to 0 (dangerous: risks metadata corruption
# if LVM2 commands get run concurrently).
# Type 2 uses the external shared library locking_library.
# Type 3 uses built-in clustered locking.
# Type 4 uses read-only locking which forbids any operations that might
# change metadata.
locking_type = 3
-----------------------

■グローバルファイルシステムの作成
(1)ZFSからiscsiの切り出し
root@sol10-u24 17:42:52>zfs create -V 100GB spool/iscsi/gfs01
root@sol10-u24 17:43:25>zfs set shareiscsi=on spool/iscsi/gfs01

(2)各ノードからiSCSI領域を認識
root@rhcs-node1> iscsiadm -m discovery -t sendtargets -p 192.168.1.10
root@rhcs-node2> iscsiadm -m discovery -t sendtargets -p 192.168.1.10
root@rhcs-node3> iscsiadm -m discovery -t sendtargets -p 192.168.1.10

root@rhcs-node1> iscsiadm -m node -l
root@rhcs-node2> iscsiadm -m node -l
root@rhcs-node3> iscsiadm -m node -l

root@rhcs-node1> fdisk /dev/sda
root@rhcs-node1> partprobe /dev/sda
root@rhcs-node2> partprobe /dev/sda
root@rhcs-node3> partprobe /dev/sda

(3)GFSの作成と各ノードからマウント
root@rhcs-node1> gfs_mkfs -j 3 -p lock_dlm -t cluster01:gfs01 /dev/sda1

root@rhcs-node1> mount -t gfs /dev/sda1 /mnt/gfs01
root@rhcs-node2> mount -t gfs /dev/sda1 /mnt/gfs01
root@rhcs-node3> mount -t gfs /dev/sda1 /mnt/gfs01


■フェイルオーバードメイン、リソース、サービスを作成

(1)hadoopという名前のフェイルオーバーグループの作成し、以下のパラメータで設定する。
名前:hadoop
フェイルオーバーメンバ:rhcs-node1, rhcs-node2
フェイルオーバーパラメータ:プライオリティ、ドメイン内のでのフェイルオーバー

(2)リソースの作成
GFS、IPアドレスと作成

(3)サービスの作成
作成したリソースをサービスに追加
名前:hadoop
自動起動ON
フェイルオーバードメイン:hadoop
サービス再起動ポリシー:Relocate

以上の作業で以下の状態になる。
# clustat
Cluster Status for cluster01 @ Thu Aug 12 18:26:30 2010
Member Status: Quorate

 Member Name                                     ID   Status
 ------ ----                                     ---- ------
 rhcs-node1.sol-net.jp                               1 Online, Local, rgmanager
 rhcs-node2.sol-net.jp                               2 Online, rgmanager
 rhcs-node3.sol-net.jp                               3 Online, rgmanager

 Service Name                           Owner (Last)                           State
 ------- ----                           ----- ------                           -----
 service:hadoop                         rhcs-node1.sol-net.jp                  started

RHCSで割り当てられているIPアドレスはifconfigでは分からず、ip arrd listでないと確認できない。
# ip addr list
1: lo:  mtu 16436 qdisc noqueue
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 54:52:00:6d:97:56 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.102/24 brd 192.168.1.255 scope global eth0
    inet 192.168.1.105/24 scope global secondary eth0
    inet6 fe80::5652:ff:fe6d:9756/64 scope link
       valid_lft forever preferred_lft forever
3: eth1:  mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 54:52:00:62:27:65 brd ff:ff:ff:ff:ff:ff
    inet 10.0.254.102/24 brd 10.0.254.255 scope global eth1
    inet6 fe80::5652:ff:fe62:2765/64 scope link
       valid_lft forever preferred_lft forever
4: sit0:  mtu 1480 qdisc noop
    link/sit 0.0.0.0 brd 0.0.0.0

まずはここまで。続く

Hadoop

Hadoop

価格:4,830円(税込、送料別)