[実践編] Ubuntu Serverをスケールアウト型サーバーに配備する(前編)

2014年3月12日(水)
古賀 政純

BIOS, RAID, 遠隔管理チップの設定の自動化の必要性

何百台、何千台のサーバーを管理する場合、サーバーのBIOSやRAID、遠隔管理チップの設定を管理者が1台ずつ設定すると非常に手間がかかります。初期セットアップだけでなく日々の運用や、購入後の利用目的の変更によってハードウェアの設定を変更することがあるため、これらの設定を複数台まとめて自動的に行うことが必要になってきます。

筆者の所属するHPでは、ProLiantサーバーDL、SL、ML、BLシリーズのBIOS、RAIDコントローラー、遠隔管理チップiLO4の設定情報の取得および配布を行うScripting Toolkit for Linux(以下STK)を提供しています。STKを使えば、管理対象サーバーにOSをインストールする前段階において、大量のHP ProLiantサーバーのハードウェア配備の手間を大幅に削減することができます。

実践編第1回の前編では、STKによるハードウェア情報の取得と配布を実現するサーバーをUbuntu Serverで構築する手順を述べます。後編では、Ubuntu Serverを自動インストールするサーバーの構築手順を述べます。

図1:スケールアウト型基盤におけるUbuntu Serverの自動配備のための必要な技術要素(クリックで拡大)

STKの配布に必要なUbuntu Serverのサービスと基本設定

STKを構築する管理サーバーには、Ubuntu Server 12.04.x LTSをインストールし、DHCP、TFTP、NFSサーバーを構築する必要があります。Ubuntu Serverを管理サーバーにインストール後、これらの各種サービスをOS起動時に自動起動させるかどうかの設定を行うため、rc-sysv-confをインストールしておくとよいでしょう。rc-sysv-confは、RHEL/CentOS系のchkconfigに相当します。chkconfigと管理手法が似ているため、chkconfigに慣れているRHEL/CentOSユーザーにお勧めです。

# apt-get install sysv-rc-conf

Ubuntu ServerにおけるDHCPサーバーの設定

STKは、管理対象サーバーをオンメモリで利用するため、管理対象サーバーをネットワークブートさせる必要があります。ネットワークブートには、管理対象サーバーに搭載されているNICのPXE(Preboot Execution Environment)機能を利用します。PXE機能を使ったサーバーの起動をPXEブートといい、多くのスケールアウト型のクラウド環境で利用されている基礎技術です。管理対象サーバーをPXEブートさせるために必要なサービスにDHCPサービスがあります。

Ubuntu Serverにおいて利用可能なDHCPサービスのパッケージはいくつか存在しますが、今回はisc-dhcp-serverを使用して管理サーバーにDHCPサーバーを構築してみましょう。

# apt-get install isc-dhcp-server

DHCPサービスを提供するUbuntu ServerのIPアドレスを172.16.12.1/16として、DHCPサーバーの設定を行います。DHCPサービスを提供するNIC(ここではeth0)を指定します。

# vi /etc/default/isc-dhcp-server
INTERFACES="eth0"

isc-dhcp-serverの設定ファイルdhcpd.confファイルを編集します。以下は、管理対象サーバーにDHCPでIPアドレスを付与し、pxelinux.0ファイルを付与するための設定例です。一般的に、スケールアウト基盤においては、管理対象サーバーのMACアドレスとIPアドレスをDHCPサーバーによって管理しますが、ここでは、MACアドレスの指定による管理は省略しています。実際の本番環境では、MACアドレス等による管理をDHCPサーバーで行うかどうかの検討を行ってください。

# vi /etc/dhcp/dhcpd.conf
  ...
  ddns-update-style none;
  default-lease-time 600;
  max-lease-time 7200;
  subnet 172.16.0.0 netmask 255.255.0.0 {
  option routers            172.16.12.1;
  option domain-name            "jpn.linux.hp.com";
  option domain-name-servers	172.16.1.254;
  range	                    172.16.0.1 172.16.0.254;
  next-server                  	172.16.12.1;
  filename                     	"pxelinux.0";←管理対象にDHCPで配布するファイル
  }
  ...

serviceコマンドでDHCPサービスを起動します。

# sysv-rc-conf isc-dhcp-server on
# service isc-dhcp-server start

Ubuntu Server におけるTFTPサーバーの設定

管理対象サーバーへブートイメージを転送するため、TFTPサーバーを構築します。Ubuntu Serverで利用可能なTFTPサーバーのパッケージはいくつか存在しますが、今回はtftpd-hpaパッケージを使用します。

# apt-get install tftpd-hpa

Ubuntu Server 12.04.xのtftpd-hpaの設定ファイル/etc/default/tftpd-hpa内の「TFTP_DIRECTORY=」行に、管理対象サーバー群へ提供するためのディレクトリ/tftpbootを指定します。

# vi /etc/default/tftpd-hpa
...
TFTP_DIRECTORY="/tftpboot"
...

dhcpd.confファイル内のfilenameの行に「"pxelinux.0";」を指定し、tftp-hpaファイル内のTFTP_DIRECTORYに「/tftpboot」を指定しているため、管理サーバーの/tftpbootディレクトリにpxelinux.0ファイルを配置する必要があります。上記設定ファイルを記述したら、TFTPサービスを起動します。

# sysv-rc-conf tftpd-hpa on
# service tftpd-hpa restart

Ubuntu ServerにおけるNFSサーバーの設定

BIOS、RAID、遠隔管理チップの設定情報を取得するには、管理対象サーバーから管理サーバーにNFSマウントを行いますので、管理サーバーにNFSサーバーを構築します。NFSサーバー上にSTKを配備するためのディレクトリ/nfsrootを作成し、/nfsrootをNFSクライアントに提供できるように、NFSサーバーの/etc/exportsを記述します。

# apt-get install nfs-kernel-server
# mkdir -p /nfsroot
# vi /etc/exports
/nfsroot *(rw,no_root_squash) ←NFS提供ディレクトリと権限を記述

テスト利用の場合には、上記exportsファイルにおいて全てのホストにNFSサービスを提供するように記述しても構いませんが、実際の本番環境のスケールアウト型システムでは、マルチテナント利用やセキュリティ要件を考慮し、NFSサービスを提供するIPアドレスに範囲を設ける必要がありますので注意してください。exportsファイルを記述したら、NFSの関連サービスを起動し、/nfsrootディレクトリがNFSサービスとして提供されているかをshowmountコマンドで確認します。

# service nfs-kernel-server start
# sysv-rc-conf nfs-kernel-server on
# showmount -e localhost
Export list for localhost:
/nfsroot *

Scripting Toolkit for LinuxをUbuntu Serverに配備する

近年、スケールアウト型システムでは、システムインテグレーターや顧客側でOSだけでなく、ハードウェアの自動化のためのサーバー環境を整備するケースが増えて来ています。これを実現するためのツールの一つとしてScripting Toolkit for Linux (STK)が存在します。STKは、ProLiantサーバーのBIOS、RAID、遠隔管理チップの設定の取得や配布を可能にするコマンド類をツールキットとしてまとめたものです。

一般的に、ハードウェアベンダーのBIOSやRAIDコントローラー、サーバーのマザーボードに搭載された遠隔管理チップの設定には、ベンダーが提供する設定ユーティリティが提供されていますが、HPでは、設定ユーティリティを集めたコマンドラインベースのツールキットを無償で提供していますので、スクリプトやcron等による自動化、ユーザー独自の管理ツールへの組み込み等が可能です。

他にも、VMwareやHyper-V等を組み込んだプライベートクラウド基盤向けのアプライアンス製品では、OSを配備する前段階のハードウェア(サーバー、ストレージ、ネットワーク等)の設定の自動化をベンダー提供のアプライアンス向けの管理ツールを使って行うように整備されています。

一方、Linux系のスケールアウト型クラウド基盤向けにもベンダー提供の管理ツールが整備されていますが、BIOS、RAID、管理チップに限定すれば、STKを使うことでハードウェア設定の自動化を実現することができます。以下では、Ubuntu Server上にSTKを配備する手順をご紹介します。

STKのキット「hp-scripting-toolkit-linux-9.50.tar.gz」はHPのWebサイトから入手可能です。保守サポートはありませんが、無償で利用することができます。STKをNFSサーバーに展開し、/nfsrootディレクトリにコピーします。

# tar xzvf hp-scripting-toolkit-linux-9.50.tar.gz -C /tmp/
# cp -a /tmp/hp-scripting-toolkit-linux-9.50/* /nfsroot/

管理対象サーバーがPXEブートするのに必要なファイルvmlinuz、initrd.img、pxelinux.0は、STKに含まれています。これらのファイルをUbuntu ServerのTFTPサービスを提供するディレクトリに配置します。

# mkdir -p /tftpboot/stk950
# cd /nfsroot/boot_files/
# cp -a vmlinuz initrd.img /tftpboot/stk950/
# cp -a pxelinux.0 /tftpboot/

次に、管理対象サーバーのPXEブート後にSTKがロードされるために必要な設定をdefaultファイルに記述します。NFSサーバーの/tftpboot/stk950ディレクトリに配置したvmlinuzファイルとinitrd.imgファイルを参照できるように、kernel行とappend行に相対パスで記述します。

# mkdir -p /tftpboot/pxelinux.cfg
# vi /tftpboot/pxelinux.cfg/default
default  stk950cap ←PXEブート後にデフォルトで利用されるラベル名を記述
#default  stk950dep ←先頭に#を入れてコメントアウトにしておく
prompt  1
timeout 300
label stk950cap ←default行で指定したラベル名を記述
kernel stk950/vmlinuz ←STKで提供されているvmlinuzを指定
append initrd=stk950/initrd.img root=/dev/ram0 rw ramdisk_size=475844 ide=nodma ide=noraid pnpbios=off media=net numa=off iso1=nfs://172.16.12.1/nfsroot sstk_conf=toolkit.conf sstk_script=/capall.sh ←実際には1行で記述
  
label stk950dep ←default行で指定したラベル名を記述
kernel stk950/vmlinuz ←STKで提供されているvmlinuzを指定
append initrd=stk950/initrd.img root=/dev/ram0 rw ramdisk_size=475844 ide=nodma ide=noraid pnpbios=off media=net numa=off iso1=nfs://172.16.12.1/nfsroot sstk_conf=toolkit.conf sstk_script=/depall.sh ←実際には1行で記述

「iso1=nfs://172.16.12.1/nfsroot」では、NFSサーバーのIPアドレスを指定します。capall.shとdepall.shというスクリプトが記載されていますが、これは、STKをロードするためのバッチ・スクリプトです。

BIOS設定情報を取得、配布するスクリプトの作成

BIOSの設定情報を取得するスクリプトcapbios.shを作成してみましょう。capbios.shスクリプトの例を以下に示します。

# vi /nfsroot/scripts/capbios.sh
#!/bin/bash
/bin/mount -t nfs -o rw,nolock 172.16.12.1:/nfsroot /mnt ←NFSマウント
cd /TOOLKIT/
./conrep -s -f /mnt/data_files/bios.cfg ←conrepでBIOS情報をbios.cfgに記録
cd
/bin/umount /mnt

capbios.shは、管理対象サーバーがPXEブートした後、STKのconrepコマンドが実行され、BIOS設定情報を含むbios.cfgファイルをNFSサーバーの/nfsroot/data_filesディレクトリに保存します。STKで提供されているconrepは、BIOS設定情報の取得や配布を行うことが可能なコマンドです。同様に、BIOS設定情報を配布するSTKのスクリプトも作成しておきましょう。

# vi /nfsroot/scripts/depbios.sh
#!/bin/bash
/bin/mount -t nfs -o rw,nolock 172.16.12.1:/nfsroot /mnt ←NFSマウント
cd /TOOLKIT/
./conrep -l -f /mnt/data_files/bios.cfg ←bios.cfgに基づきconrepでBIOSを設定
cd
/bin/umount /mnt

RAIDコントローラーの設定情報の取得、配布を行うスクリプトの作成

HP ProLiantサーバーで採用されているSmartArray RAIDコントローラーの設定情報を取得するには、STKに含まれるhpssascriptingコマンドを利用します。BIOSと同様、RAIDの設定情報の取得用スクリプトcaphpsa.shと配布用スクリプトdephpsa.shを作成します。

# vi /nfsroot/scripts/caphpsa.sh
#!/bin/bash
/bin/mount -t nfs -o rw,nolock 172.16.12.1:/nfsroot /mnt ←NFSマウント
cd /TOOLKIT/hpssacli/
./hpssascripting -c /mnt/data_files/hpsa.cfg -internal ←RAID情報を取得
cd
/bin/umount /mnt

# vi /nfsroot/scripts/dephpsa.sh
#!/bin/bash
/bin/mount -t nfs -o rw,nolock 172.16.12.1:/nfsroot /mnt ←NFSマウント
cd /TOOLKIT/hpssacli/
./hpssascripting -i /mnt/data_files/hpsa.cfg -internal -reset ←RAIDを設定
cd
/bin/umount /mnt

遠隔管理用チップの設定情報の取得、配布を行うスクリプトの作成

管理対象サーバーの電源操作や仮想コンソールによる操作を行うための遠隔管理チップの設定情報の取得、配布を行うには、STKのhponcfgコマンドを使用します。以下に遠隔管理チップの設定情報取得および配布スクリプトの例を示します。

# vi /nfsroot/scripts/capilo4.sh
#!/bin/bash
/bin/mount -t nfs -o rw,nolock 172.16.12.1:/nfsroot /mnt ←NFSマウント
cd /TOOLKIT/
/bin/modprobe hpilo
./hponcfg -w /mnt/data_files/ilo4.cfg ←遠隔管理チップの情報を取得
cd
/bin/umount /mnt

# vi /nfsroot/scripts/depilo4.sh
#!/bin/bash
/bin/mount -t nfs -o rw,nolock 172.16.12.1:/nfsroot /mnt ←NFSマウント
cd /TOOLKIT/
/bin/modprobe hpilo
./hponcfg -f /mnt/data_files/ilo4.cfg ←遠隔管理チップを設定
cd
/bin/umount /mnt

管理対象サーバーの電源をOFFにするスクリプトの必要性

サーバーに搭載された遠隔管理チップを使って管理対象サーバーの電源をOFFにするスクリプトを作成しておくことをお勧めします。このスクリプトは、管理対象サーバーがPXEブートと再起動を無限に繰り返すことを防ぐ役目を担っています。

# vi /nfsroot/scripts/poweroff.sh
#!/bin/bash
/bin/mount -t nfs -o rw,nolock 172.16.12.1:/nfsroot /mnt ←NFSマウント
cd /TOOLKIT/
/bin/modprobe hpilo
./hponcfg -f /mnt/data_files/Set_Virtual_Power_BTN.xml ←管理対象マシンの電源断

poweroff.shは、遠隔管理チップiLO4の仮想電源ボタンの機能を使って管理対象サーバーの電源をOFFにします。iLO4ではXMLファイルによって様々な制御が可能ですが、ここでは、電源をOFFにするXMLファイルを指定しています。上記スクリプトで指定しているXMLファイルの記述例を以下に示します。

# vi /nfsroot/data_files/Set_Virtual_Power_BTN.xml
<RIBCL VERSION="2.0">
<LOGIN USER_LOGIN="adminname" PASSWORD="password">
<SERVER_INFO MODE="write">
<HOLD_PWR_BTN/>
</SERVER_INFO>
</LOGIN>
</RIBCL>

[参考情報]

無償提供の「HP Lights-Out XML PERL Scripting Sample for Linux」と呼ばれるソフトウェアに、様々なXMLファイルの雛型が収録されています。

BIOS、RAID、遠隔管理チップの設定情報の取得、配布を行うバッチ・スクリプト

上記の取得用スクリプトcapbios.sh、caphpsa.sh、capilo4.sh、poweroff.shを一括して実行するようなバッチ・スクリプトを作成しておくとよいでしょう。バッチ・スクリプトcapall.shとdepall.shは、defaultファイル内で指定したものです。管理対象サーバーがPXEブート後、オンメモリでバッチ・スクリプトがロードされ、STKが実行されます。

# vi /nfsroot/scripts/capall.sh
#!/bin/sh
./capbios.sh
./caphpsa.sh
./capilo4.sh
./poweroff.sh

# vi /nfsroot/scripts/depall.sh
#!/bin/sh
./depbios.sh
./dephpsa.sh
./depilo4.sh
./poweroff.sh

# cd /nfsroot/scripts/
# chmod 755 *.sh

BIOS、RAID、遠隔管理チップの設定情報の取得テスト

DHCP、TFTP、NFSサービスを提供するUbuntu Serverと同一LANセグメントに設置した管理対象サーバーの電源を投入し、管理対象サーバーをPXEブートさせます。NFSサーバーの/nfsroot/data_filesディレクトリにbios.cfg、hpsa.cfg、ilo4.cfgファイルが自動的にアップロードされるはずです。

図2:管理対象サーバーのPXEブートの様子(クリックで拡大)
図3:管理対象サーバーでSTKが実行されている様子(クリックで拡大)
図4:NFSサーバーの/nfsroot/data_filesディレクトリにbios.cfg、hpsa.cfg、ilo4.cfgファイルがアップロードされた様子(クリックで拡大)

BIOS、RAID、遠隔管理チップの設定情報の配布

スケールアウト型基盤では、取得したBIOS設定情報やRAID設定情報等を他の同機種のサーバーに一斉に展開する運用が見られます。これを実施するには、STKによってdepall.shがロードされるように、defaultファイルの「default stk950cap」をコメントアウトし、「default stk950dep」のコメントアウトの記号「#」を外します。

# vi /tftpboot/pxelinux.cfg/default
#default stk950cap
default stk950dep
...

以上で、BIOS、RAID、遠隔管理チップの設定を自動で取得、配布する管理サーバーをUbuntu Serverで構築することができました。スケールアウト型システムにおいては、ハードウェア設定の自動化だけでなく、OS配備の自動化も必要です。さらに、ベアメタル配備と仮想化基盤の両方に対応したスケールアウト型のクラウド基盤では、ハードウェア設定とOSのインストールの両方で自動化が必要になる場合が少なくありません。本連載で記載した手順で、Ubuntu Serverを入れる前のProLiantサーバーのハードウェア設定の自動化に是非挑戦してみてください。

<後編に続きます。>

日本ヒューレット・パッカード株式会社 プリセールス統括本部 ソリューションセンター OSS・Linux担当 シニアITスペシャリスト

兵庫県伊丹市出身。1996年頃からオープンソースに携わる。2000年よりUNIXサーバーのSE及びスーパーコンピューターの並列計算プログラミング講師を担当。科学技術計算サーバーのSI経験も持つ。2005年、大手製造業向けLinuxサーバー提案で日本HP社長賞受賞。2006年、米国HPからLinux技術の伝道師に与えられる「OpenSource and Linux Ambassador Hall of Fame」を2年連続受賞。日本HPプリセールスMVPを4度受賞。現在は、Linux、FreeBSD、Hadoop等のOSSを駆使したスケールアウト型サーバー基盤のプリセールスSE、技術検証、技術文書執筆を担当。日本HPのオープンソース・Linuxテクノロジーエバンジェリストとして講演活動も行っている。Red Hat Certified Engineer、Red Hat Certified Virtualization Administrator、Novell Certified Linux Professional、EXIN Cloud Computing Foundation Certificate、HP Accredited Systems Engineer Cloud Architect、Red Hat Certified System Administrator in Red Hat OpenStack、Cloudera Certified Administrator for Apache Hadoop認定技術者。HP公式ブログ執筆者。趣味はレーシングカートとビリヤード

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています