2010/12/16

CentOS5.X 設定 No.14 ソフトウェアRAID

ファイルサーバを一新するに当たり、WD20EARSでソフトウェアRAIDでRAID6を組みたいと思います。

WD20EARSですが、AFT(Advanced Format Technology)を採用しているので、パーティションの切り方に注意しなければいけません。
AFTでは何が違うかというと、従来のHDDにおける1セクタは512Byteでしたが、それを4,096Byte(= 4KB)としています。
1セクタの容量を大きくするとその分セクタ数が減る為、リードインやセクタギャップを減らす事が出来ます。
という理由で1プラッタあたりの容量を増加させる事が出来ます。
物理的には1セクタ = 4KBなのですが、OSからは1セクタ=512Bと見えています。
つまりOSからは4KBが従来通り8セクタと見えています。
OSから見た場合、セクタを8の倍数で切らないと物理的なセクタの境目になりません。
セクタの境目を跨ぐと、書き込み速度が低下します。
OSの多くは普通にパーティションを切ると63セクタを開始位置とします。
しかし、63は8の倍数ではないので、64セクタを開始位置とするようにパーティションを切ります。
62セクタ以内にはシステム情報が書き込まれる場合があるので、63セクタ以降で8の倍数となる最小の値64セクタ目を開始位置としました。

また、WD20EARSは2TB = 1.81TiBなので2TiBの壁にはぶち当たらず、MBR(Master Boot Record)での運用も可能です。
しかし、ここはGPT(GUID Partition Table)で運用します。
MBRは管理用のアドレスが32bitなので、2^32 = 4,294,967,2962セクタ = 2,199,023,255,552Byte = 2TiBの壁が存在します。
GPTは管理用のアドレスが64bitなので、2^64 = 18,446,744,073,709,551,616セクタ = 9,444,732,965,739,290,427,392Byte = 8,589,934,592TB = 8ZB
となります。
因みにGPTでのHDDを起動ディスクにする場合はOSの対応も必要ですが、ハードの対応も必要です。
正確には次世代BIOSであるEFI搭載のマザーボードが必要です。
データ置き場として使用する場合には対応OSのみで大丈夫です。

そこで実際のコマンドに移りたいと思います。
[root@CentOS ~]# parted /dev/sdX

(parted) mklabel
新しいディスクラベル? gpt
(parted) mkpart
パーティションの名前? []? primary
ファイルシステムの種類? [ext2]? ext3
開始? 64s
終了? -1s #最大セクタより1セクタ小さい所まで
警告: 32.8kB から 2000GB までのパーティションを指定されました。
可能な中で最も近いものは 32.8kB から 2000GB までのパーティションになります。それでもかまいませんか?
はい(Y)/Yes/いいえ(N)/No? y
(parted) set 1 raid on
(parted) print u s #パーティションの詳細をセクタ表示で表示
モデル: ATA WDC WD20EARS-00M (scsi)
ディスク /dev/sdX: 2000GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: gpt

番号 開始 終了 サイズ ファイルシステム 名前 フラグ
1 32.8kB 2000GB 2000GB primary raid

(parted) quit

[root@CentOS ~]# mdadm -C /dev/mdX -c512 -l6 -n4 /dev/sd[abcd]1
partedコマンド前にfdiskコマンドでパーティションを作成したのですが、うまく認識してくませんでした。
partedコマンドで作成したパーティションをfdiskコマンドで見るとセクタがおかしく見えます。
しかし、fdiskコマンドがGPTに対応してないだけだと思います。

RAIDアレイを作成するコマンドは以下の通りでも可能です。
[root@CentOS ~]# mdadm --create /dev/mdX --chunk=512 --level=6 --raid-devices=4 /dev/sd[abcd]1
見慣れないオプションに「--chunk=」がありますが、これは処理単位の大きさを指定するものです。
(データがストライプされる単位をチャンクサイズと言う。)
デフォルトでは64KBに設定されています。

参考サイト

現在の構成
  • CPU: Pentium Dual-Core E6600 3.06GHz
  • マザーボード: GA-EP45-UD3R (rev. 1.1)
  • メモリ: DDR2-6400 1GB×2枚
  • ケース: Twelve Hundred
  • グラフィックボード: WinFast PX8400GS TDH SILENT
  • HDD: WD1001FALS×4台, WD20EARS×4台
RAIDアレイの構築速度は平均15000K/secとなっている。
この調子では30時間以上かかる予想だ。

2010/12/15

CentOS5.X 設定 No.13 LVM No.01

今回はLVMでmissった事を書きます。

その前にLVMとはなんなのでしょうか?
普通ファイルを書き込める領域というのは1つのHDD(パーティション)の容量を超える事はありません。
容量が足りなくなった場合は、HDDを交換するか、増設してシンボリックリンクを貼る必要があります。
これではシステムの入れ替え等の際、大変苦労する事になります。
(自分は入れ替えの際もそうですが、Macからsanbaでアクセスするとシンボリックリンクが辿れず苦労しました。)
そこで、LVMの登場です。
LVMを例えるなら、HDDのプールですかね。
1つあたりのHDDの容量は関係なく、すべてを結合して1つの大きなHDDを見なす訳です。
そこから必要な容量だけ切り分けてパーティションとするといった感じでしょうか。
Windowsで言うならスパンボリュームですね。

複数のHDDを統合するならRAIDでもいいのでは?と思う方もいますが、RAIDの場合はHDDの使用する容量を揃えないければいけないという点が面倒です。
また、必要に応じてHDDの追加や削除を行うのが面倒です。
しかし、RAIDの場合特定のバージョンであれなHDDの故障に対する耐久度が上がるのは確かです。
LVMの場合は、複数のHDDにまたがってアクセスする為、1台でも故障するとアクセスできなくなり、最悪データが失われます。
なので、RAIDを構築し、そのアレイを使用してLVMを使用するのが柔軟性&耐久性が高いシステムになると思います。
因みに、RAIDはHDDの故障に対する耐久度は上がりますが、バックアップではありません。
バックアップというのは、過去に逆昇てファイルを救出できるようにするのもで、RAIDにそのような機能はありません。
missってファイルを削除してしまえばそれでお終いです。
バックアップがあれば、バックアップから削除してしまったファイルを戻す事が出来ますね。
あくまでもHDDが壊れてもデータが失われにくいという効果しかありません。
(まぁファイルサーバで5TBを超えてくると、バックアップを取る気が失せるというか、もう一台サーバ建てないと無理。)


上図がLVMのイメージ図になります。(OpenOffice.orgのDrawで作成)
正確に書くとPVはPE(Physical Extents, 物理エクステント)に分割され、VGとして集約される訳です。
PEの大きさはデフォルトで4MBとなっています。
ファイルサーバで大きいサイズのファイルが多い場合は、PEの大きさを大きくしたほうが効率がよくなります。
参考:「LVMとは@ITPro」

さて、ここでようやく今回の失敗に入る訳ですが。
何をしたのかというと、HDDをVGに追加した後にzero書き込みでHDDのパーティションを消してしまったんですね。
LVMはHDDをUUIDで管理しているみたいで、新たにパーティションを作成して追加しようとしても認識されず。
VGから消そうと思っても「PV Name」が不明になっており、コマンドが認識されず。
今回、このHDDにデータは入っておらず、このまま使用しても問題ないのですが、
[root@CentOS ~]# vgdisplay
と行う度に、「Couldn't find device with uuid ~」と表示されるのも目障りなので。
[root@CentOS ~]# fdisk /dev/sdX
で追加したいHDDにLVMのパーティションを作成しておく。
作成したパーティションに対し
[root@CentOS ~]# pvcreate --uuid XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXXX /dev/sdX1
を行い、PVとして登録されているUUIDと新規パーティションを結びつける。
これで、完成です。

現在、ファイルサーバのHDDをWD20EARSに交換する作業をしている最中です。
現在はRAID5のアレイを組み合わせて運用しているのですが、容量やシンボリックリンクの関係でRAID6+LVMへの移行を思案中です。
試験運用としてML110 G6 XeonモデルにLVMを構築し、ファイルサーバのデータをバックアップ中です。
WD20EARSはAFTを使用しているので、セクタの操作が必要なのですが、思うような速度が出ず試行錯誤中です。
fdiskコマンドではパーティションが作成出来ず、partedコマンドでGPTパーティションを作成した後に、fdiskコマンド開始セクタを8の倍数にしているのですが。。。
ddコマンドで100GBも書き込まないうちに33Mbpsまで落ちるのはなんでなんでしょうか。。。
まぁ一度書きこんでしまえば、後は呼び出ししかしませんので問題は少ないような気がするのですが。

2010/12/10

CentOS 5.X 設定 No.12 munin No.01 1台のみの場合

今回は「munin」をインストールして、サーバの使用状況をブラウザから監視できるようにします。
鯖の使用状況をブラウザから監視できるツールは「Nagios」や「RRDtool」が存在します。
それらに関しては、「CentOSで自宅サーバー構築」さんで解説してあります。
SSも載っていますので、見やすいものを導入してみるのが一番でしょう。

参考にしたサイトは
です。

CentOS場合、通常のリポジトリには入っていないので
  • 別途リポジトリを追加する(ver.1.2.5)
  • .rpmファイルを拾ってきて、インストールする(ver.1.4.5)
という方法が考えられます。
    依存関係が面倒なので、「別途リポジトリを追加してインストール後、muninの最新.rpmを上書きインストール」を試してみたいと思います。

    参考にしたサイトでは「dag.repo」を追加していましたが、自分は「CentOSで自宅サーバー構築」を参考にしているので、「RPMforgeリポジトリ」が追加済みです。
    RPMforgeに関しては
    を参考にしました。
    [root@CentOS ~]# yum -y install yum-priorities #yum-prioritiesインストール
    [root@CentOS ~]# vi /etc/yum.repos.d/CentOS-Base.repo #標準リポジトリ設定ファイル編集

    [base]
    name=CentOS-$releasever - Base
    mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
    #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
    gpgcheck=1
    gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
    priority=1 #追加

    #released updates
    [updates]
    name=CentOS-$releasever - Updates
    mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
    #baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
    gpgcheck=1
    gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
    priority=1 #追加

    #packages used/produced in the build but not released
    [addons]
    name=CentOS-$releasever - Addons
    mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=addons
    #baseurl=http://mirror.centos.org/centos/$releasever/addons/$basearch/
    gpgcheck=1
    gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
    priority=1 #追加

    #additional packages that may be useful
    [extras]
    name=CentOS-$releasever - Extras
    mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
    #baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
    gpgcheck=1
    gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
    priority=1 #追加

    [root@CentOS ~]# wget http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt #RPMforgeのGPGキー
    [root@CentOS ~]# rpm --import RPM-GPG-KEY.dag.txt
    [root@CentOS ~]# rm -f RPM-GPG-KEY.dag.txt
    [root@CentOS ~]# wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.i386.rpm #RPMforgeリポジトリ
    [root@CentOS ~]# rpm -ivh rpmforge-release-0.5.1-1.el5.rf.i386.rpm
    これでRPMforgeリポジトリの追加は終わりました。
    しかし、このままではyumをする度に参照してしまい、意図しない更新がおきたりやyumが遅くなります。
    よって、以下の通りに編集します。
    [root@CentOS ~]# vi /etc/yum.repos.d/rpmforge.repo #RPMforgeリポジトリ設定ファイル編集

    ### Name: RPMforge RPM Repository for Red Hat Enterprise 5 - dag
    ### URL: http://rpmforge.net/
    [rpmforge]
    name = Red Hat Enterprise $releasever - RPMforge.net - dag
    baseurl = http://apt.sw.be/redhat/el5/en/$basearch/rpmforge
    mirrorlist = http://apt.sw.be/redhat/el5/en/mirrors-rpmforge
    #mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge
    enabled = 1
    #↓変更
    enabled = 0
    protect = 0
    gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag
    gpgcheck = 1
    これで以下のコマンドを打たないとRPMforgeリポジトリを参照しません。
    [root@CentOS ~]# yum --enablerepo=rpmforge [オプション] [パッケージ]

    それではインストールに移りたいのですが、その前に。
    muninは「munin」と「munin-node」の2つのパッケージから構成されています。
    「munin」は「munin-node」からデータを収集し、グラフ化する
    「munin-node」はインストールされているサーバのデータを収集し、「munin」に対してデータを提供する
    という役割です。
    今回は1台のサーバでデータを収集してグラフ化するので、両方インストールする必要があります。
    複数台ある方は、「munin」は1台に、「munin-node」は各サーバにインストールする事になると思います。
    複数台の時の設定は次回にやりたいと思います。
    では、インストールに移ります。
    [root@CentOS ~]# yum --enablerepo=rpmforge info munin munin-node #バージョン確認

    Name : munin
    Arch : noarch
    Version : 1.2.5
    Release : 2.el5.rf
    Size : 339 k
    Repo : installed
    Summary : Network-wide graphing framework (grapher/gatherer)

    Name : munin-node
    Arch : noarch
    Version : 1.2.5
    Release : 2.el5.rf
    Size : 479 k
    Repo : installed
    Summary : Network-wide graphing framework (node)

    [root@CentOS ~]# yum --enablerepo=rpmforge install -y munin munin-node #依存確認等をすっ飛ばし、両方インストール
    [root@CentOS ~]# chkconfig munin-node on #起動時に自動的に起動させる
    [root@CentOS ~]# chkconfig --list munin-node #起動時にONになっているかどうかの確認
    [root@CentOS ~]# service munin-node start #muninを起動させる
    これで、muninのインストールは終わりです。
    しかし、muninはブラウザから監視できるようにするツールですので、Apacheがインストールされている必要があります。
    [root@CentOS ~]# yum -y httpd
    [root@CentOS ~]# chkconfig httpd on
    [root@CentOS ~]# chkconfig --list httpd
    [root@CentOS ~]# service httpd start
    これで、
    http://[muninのインストールされているサーバのIP]/munin/
    にアクセスするとグラフが表示されます。
    更新間隔は5分毎です。
    収集したファイルは「/var/lib/munin/[ノード名]/」に集められており、「.rrd」で終わる名前のファイルです。
    [root@CentOS ~]# rrdtool dump /var/lib/munin/[ノード名]/[ファイル名].rrd
    で見ることが出来ます。
    グラフ化しているファイルは、「/var/www/munin/[ノード名]/」に集められています。
    うまくいかない場合は、「/var/log/munin/」に各種のlogファイルが有りますので見てみましょう。

    さて、リポジトリからのインストールは無事に終わりましたが、バージョンが1.2.5なので最新バージョンに上げてみたいと思います。
    最新バージョンは「http://sourceforge.net/projects/munin/files/」にあります。
    今回は、安定バージョン 1.4.5を使用します。
    [root@CentOS ~]# rpm -ivh munin-1.4.5-2.el5.noarch.rpm
    エラー: 依存性の欠如:
    munin-common = 1.4.5 は munin-1.4.5-2.el5.noarch に必要とされています
    perl(Log::Log4perl) は munin-1.4.5-2.el5.noarch に必要とされています
    perl(Munin::Common::Config) は munin-1.4.5-2.el5.noarch に必要とされています
    perl(Munin::Common::Defaults) は munin-1.4.5-2.el5.noarch に必要とされています
    perl(Munin::Common::TLSClient) は munin-1.4.5-2.el5.noarch に必要とされています
    perl(Munin::Common::Timeout) は munin-1.4.5-2.el5.noarch に必要とされています
    と表示される。

    [root@CentOS ~]# yum info perl-rrdtool perl-Date-Manip perl-HTML-Template perl-Net-SNMP perl-Net-Server

    Name : perl-Date-Manip
    Arch : noarch
    Version : 5.56
    Release : 1.el5.rf
    Size : 589 k
    Repo : installed
    Summary : Date manipulation routines

    Name : perl-HTML-Template
    Arch : noarch
    Version : 2.9
    Release : 1.el5.rf
    Size : 161 k
    Repo : installed
    Summary : HTML Templates for CGI scripts

    Name : perl-Net-SNMP
    Arch : noarch
    Version : 5.2.0
    Release : 1.2.el5.rf
    Size : 340 k
    Repo : installed
    Summary : Net-SNMP Perl module

    Name : perl-Net-Server
    Arch : noarch
    Version : 0.99
    Release : 1.el5.rf
    Size : 395 k
    Repo : installed
    Summary : Perl module that implements an extensible, general Perl server engine

    Name : perl-rrdtool
    Arch : i386
    Version : 1.4.4
    Release : 1.el5.rf
    Size : 95 k
    Repo : installed
    Summary : Perl RRDtool bindings
    となっていて、すべてインストールされているように思える。
    色々面倒なので、一度ここで終わっておきましょう。
    バージョンアップや複数台の監視は次回という事で。

    2010/12/08

    運用管理ツール 「CLI Companion」

    なにか面白そうなツールを紹介していたので、紹介してみたいと思う。
    http://journal.mycom.co.jp/articles/2010/12/07/cli-companion-unix-command-tool/index.html


    詳細はマイコミに任せるとして。
    このツール、ダウンロードしに行くと.debファイル。。。
    うちのサーバは全部CentOSだし、管理はWin or MacからSSHだし。
    SSHログインを兼ねたWindows & Mac用で出してくれるととても助かるんだけどなぁ。
    そうしたらとても使いやすいと思うだけど。
    (SSHで管理しているくらいなんだから、コマンドくらい覚えておけって感じなんでしょうけど。)