[実践編] Ubuntu Serverをスケールアウト型サーバーに配備する(前編)
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を自動インストールするサーバーの構築手順を述べます。
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ファイルが自動的にアップロードされるはずです。
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サーバーのハードウェア設定の自動化に是非挑戦してみてください。
<後編に続きます。>
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- [実践編] Ubuntu Serverをスケールアウト型サーバーに配備する(後編)
- ブレードサーバとLinux
- [実践編] Ubuntu Serverの運用・管理、商用製品の利用メリットと今後の展望(前編)
- [実践編] MaaSとJujuによるOSS配備、Ubuntu Serverの運用・管理(前編)
- Equinixのベアメタルサービスの中核となるTinkerbellの概要を紹介
- インストールとNICの設定
- 10のインストール!
- デスクトップ仮想化を支える技術
- IPアドレスを管理する「DHCPサーバ」と通信の橋渡し「NATルータ」
- IPアドレスを管理する「DHCPサーバ」と通信の橋渡し「NATルータ」