2011/01/21

CentOS 5.X 設定 No.18 RAID6について

鯖の構成を変更するにあたって、データ領域をmdadmを使用しRAID6で作った訳ですが。。。
ここで落とし穴が。。。
その落とし穴とは!!
CentOSのkernelのバージョンが古過ぎて(2.6.18系統)RAID6にHDDが追加できない!
(RAID6の領域拡張は2.6.21系統かららしい)
というものです。
情報元: 「データ用HDDの準備@CentOSでホームサーバを作ろう」
これは致命的です。
かと言ってkernelの入れ替えが出来る程腕がある訳でもなく。。。
(前に一度やってみたんですが、OS自体起動しなくなるという最悪の事態になったので。)
途方に暮れる事2日。

ふと考えついたのが、
mdadmでのRAID情報はスーパーブロックに記録され、RAIDを構成しているHDD自体に残っている。

kernelが新しいOSのLiveCDで起動し、RAID6の領域を拡張すればいいのでは?
という考えに至りました。
前回のLVM事件でデータは欠損したものの、バックアップは辛うじて存在しているので試してみようかな。!

という訳で、FedoraのLiveCDを落としてきます。
HPを覗いてみると、結構種類があるんですね。
まぁGNOMEで問題ないですし(というか、GNOMEしか使った事がないというのが正しい)、汎用性を考えi686(32bit)版で。
いつの間に32nitはi386からi686に変わったんでしょうかね?
(まぁ適したCPUの世代が異なるというだけなんで、あまり気にしなくてもいいんでしょうけど。)

LiveCDから起動して、Applications > System Tools > Terminal で作業してもいいのですが、SSHでメインマシンから入れるようにします。
System > Preferences > Network Connections からIPを固定。
System > Administration > Firewall でファイヤーウォール自体を殺すか、SSHを許可。
Applications > System Tools > Terminal で以下のコマンドを。
[liveuser@localhost ~]$ su - #パスワードが設定されていないので簡単にrootになれる
[root@localhost ~]# getenforce #SELinuxの状態を確認
Enforcing #SELinuxが有効
[root@localhost ~]# setenforce 0 #SELinuxを無効化
[root@localhost ~]# getenforce
Permissive #SELinuxが無効
[root@localhost ~]# service sshd start #SSHを起動
[root@localhost ~]# passwd root #rootのパスワードを設定, 設定しないとメインマシンからSSHで入れない
ここまでくればメインマシンからSSHでログイン出来るようになりました。
Fedoraから直でRAIDをいじってもいいのですが、キーボードの設定変更しないと調べ物が大変なので。

ここからはメインマシンからの操作
(別に直で操作しても可)
構成としてはHDD4発(sd[abcd]1)で構成されているRAID6に、HDD1発(sde1)を追加して領域を拡張したい。
CentOSの時にsde1は追加済みで、スペアとして認識されている。
[root@localhost ~]# mdadm -D /dev/md/X_X #CentOSと異なり/dev/md/の配下にある
[root@localhost ~]# mdadm --manage /dev/md/X_X --add /dev/sdc1 #sdc1が外れていたので、アレイに戻す。この際リビルドが発生。
[root@localhost ~]# mdadm --grow /dev/md/X_X --raid-disks=5 #スペアを合わせて5発なので。因みにリビルドの時間は2TBで約10時間でスピードは40~60MBps
[root@localhost ~]# mdadm -D /dev/md/X_X #アレイに問題がない事を確認
[root@localhost ~]# yum info mdadm #念の為mdadmのバージョンを記載
Name : mdadm
Arch : i686
Version : 3.1.3
Release : 0.git20100722.2.fc14
Size : 680 k
Repo : installed
From repo : fedora
リビルドが終わったところで、CentOSに戻します。
だがしかし!!
やっぱり認識してくれていなかった。。。
OSによって/dev/sdXの認識の仕方が異なるらしく、アレイからHDDが外れているという事態に!
まぁ1発なので、問題はないのですが。
やはりRAID6の領域拡張は無理なのでしょう。
CentOS 6で出来る事を祈りつつ、早くリリースされる事を願っています。
因みに、CentOS 5.5でのmdadmのバージョンは
Name : mdadm
Arch : i386
Version : 2.6.9
Release : 3.el5
Size : 1.8 M
Repo : installed
です。

RAID5ならCentOS 5.5でも領域拡張出来るのかな?
RAID6からRAID5にオンラインダウングレード出来るのかな?
RAID5からRAID6へのオンラインアップデートは?
上記3つが出来るなら時間は掛かるがCentOS 5.5でもなんとかなるんだけど。

2011/01/19

CentOS 5.X 設定 No.16 munin No.02 複数台の場合

[CentOS 5.X 設定 No.12 munin No.01 1台のみの場合]の続きです。
今回は各サーバではデータを収集する(munin-node)のみとし、1台でグラフ化(munin)したいと思います。
標準リポジトリにはmuninが入っておらず、「RPMforgeリポジトリ」にはあるので、リポジトリを追加したいと思います。
「CentOS 5.X 設定 No.15 RPMforgeリポジトリ追加」を参考にして下さい。

  • データをグラフ化するサーバの設定(監視サイド, マスター)
[root@CentOS ~]# yum --enablerepo=rpmforge install -y munin
[root@CentOS ~]# cp -p /etc/munin/munin.conf /etc/munin/munin.conf.back
[root@CentOS ~]# vi /etc/munin/munin.conf
#追記
[Server] #サーバの表記名, スペースが入らないように
address 192.168.XXX.XXX #監視先サーバのIP
use_node_name yes

  • データを収集するサーバの設定(被監視サイド, ノード)
[root@CentOS ~]# yum --enablerepo=rpmforge install -y munin-node #nunin-nodeのインストール
[root@CentOS ~]# chkconfig munin-node on #起動時にmunin-nodeを自動起動させる
[root@CentOS ~]# chkconfig --list munin-node #ランレベルに応じて起動するかどうかの確認。3&5がonであれば問題ない
[root@CentOS ~]# service munin-node start munin-nodeを起動させる
このままではlocalhostからのアクセスしか許可されておらず、マスターからデータを取得する事は出来ません。
なので、マスターからのアクセスを許可する必要があります。
[root@CentOS ~]# cp -p /etc/munin/munin-node.conf /etc/munin/munin-node.conf.back
[root@CentOS ~]# vi /etc/munin/munin-node.conf
#一番最後の行
allow ^127\.0\.0\.1$ #localhostからのアクセス
allow ^192\.168\.1\.1$ #マスターのIPを追加
[root@CentOS ~]# service munin-node restart

デフォルトのままでは調べたいもののデータが収集されていない場合があります。
例えばHDDの温度。
デフォルトではIDE接続と見なされている/dev/hdXのHDDしかデータが収集されていません。
そこで、/dev/sdXのHDDのデータを収集するようにします。
(これを行うと/dev/hdXのデータは収集されなくなります。)
[root@CentOS ~]# yum install smartmontools
[root@CentOS ~]# ln -s /usr/share/munin/plugins/hddtemp_smartctl /etc/munin/plugins
[root@CentOS ~]# cp -p /etc/munin/plugin-conf.d/hddtemp_smartctl /etc/munin/plugin-conf.d/hddtemp_smartctl.back
[root@CentOS ~]# vi /etc/munin/plugin-conf.d/hddtemp_smartctl
user root
env.drives sda sdb #追加 (sda&sdbの温度を収集する場合)
env.args_sda --all -d ata #追加
env.args_sdb --all -d ata #追加
[root@CentOS ~]# serice munin-node restart

生の状態はmuninでいいのですが、CPUとかHDDの型番等を忘れる時が偶にあります。
/procの配下を調べれば判るのですが、それぞれ見ていくのは面倒です。
なので、一覧表示してくれる「hardinfo」をインストールします。
これは標準リポジトリにはないので、RPMforgeリポジトリからインストールします。
色々と表示されるので、ファイルにリダイレクションしてから見た方がいいかも知れません。

2011/01/18

CentOS5.X 設定 No.17 LVM No.02

「CentOS5.X 設定 No.13 LVM No.01」では、LVMの基礎と失敗について書きました。
今回はLVMのVolume Group(VG)にあるHDDの外し方を書きたいと思います。
まず最初に用語の復習を。
LVM: 正式名称は「Logical Volume Manager」, 日本語としては「論理ボリュームマネージャ」
PE: 正式名称は「Physical Extents」, 日本語としては「物理エクステント」, 最小単位
PV: 正式名称は「Physical Volume」, 日本語としては「物理ボリューム」, 追加されたHDD, PE単位に分割されVGとなる
VG: 正式名称は「Volume Group」, 日本語としては「ボリュームグループ」, パーティションに分割する前の総容量
LV: 正式名称は「Logical Volume」, 日本語としては「論理ボリューム」, VGをパーティションに分けた物

[root@CentOS ~]# pvscan #PVの各使用量
PV /dev/sdb1 VG VolumeX lvm2 [1.82 TB / 0 free]
PV /dev/sdc1 VG VolumeX lvm2 [1.82 TB / 0 free]
PV /dev/sdd1 VG VolumeX lvm2 [1.82 TB / 0 free]
PV /dev/sde1 VG VolumeX lvm2 [1.82 TB / 79.25 GB free]
PV /dev/sdf1 VG VolumeX lvm2 [1.36 TB / 1.36 TB free]
Total: 5 [8.64 TB] / in use: 5 [8.64 TB] / in no VG: 0 [0 ]
[root@CentOS ~]# pvdisplay #PVの詳細
--- Physical volume ---
PV Name /dev/sdX #HDD
VG Name VolumeX #使用されているVG
PV Size X.XXTB / not usable XXX.XX KB #PVとして使用されている容量 / PVとして使用されていない容量
Allocatable yes
PE Size (KByte) 4096 #1PEあたりの容量
Total PE XXXXXX #PEの総数, PV Size = PE Size * Total PE
Free PE XXXXXX #総PE中未使用PE数
Allocated PE 0
PV UUID XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXXX
[root@CentOS ~]# vgdisplay #VGの詳細
--- Volume group ---
VG Name VolumeX #VGの名前
System ID
Format lvm2 #ファイルシステム
Metadata Areas 4 #アクティブなPV(HDD)数?
Metadata Sequence No 5 #VGに使用されているPV(HDD)数?
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 5 #VGに使用されているPV(HDD)数?
Act PV 5
VG Size X.XX TB #VGの総容量
PE Size 4.00 MB #1PEサイズ
Total PE XXXXXXX #総PEサイズ
Alloc PE / Size XXXXXXX / X.XX TB #LVとして使用されているPE数 / LVの総容量
Free PE / Size XXXXXX / X.XX TB #未使用PE数 / 空き容量
VG UUID XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXXX
[root@CentOS ~]# lvdisplay #LVの詳細
--- Logical volume ---
LV Name /dev/VolumeX/LogVolX #LVの名前
VG Name VolumeX #使用しているVGの名前
LV UUID XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXXX
LV Write Access read/write
LV Status available
# open 1
LV Size X.XX TB #LVの総容量
Current LE XXXXXXX #総PE数?
Segments 4 #使用されているPV(HDD)数?
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0

現状4発のHDD(sd[abcd])で構成してあるLVMのHDDを交換(sd[abce])してみたいと思います。
順序としては HDD追加 → データの移動 → HDD外す となると思います。
[root@CentOS ~]# pvcreate /dev/sde #新しいHDD(sde)をPVに追加
[root@CentOS ~]# vgextend VolumeX /dev/sde #新しいHDD(sde)をVGに追加
[root@CentOS ~]# pvdisplay #「交換する予定のHDDのAllocated PE」 < 追加したHDDのFree FE」となっている必要がある, (追加したHDDの容量が小さい場合は以下のlvreduceを行う)
[root@CentOS ~]# lvreduce -L X.XXTB /dev/VolumeX/LogVolX #必要であればLVの容量を減らしておく。(追加したHDDの容量が小さい場合)
[root@CentOS ~]# pvmove /dev/sdf1 /devsde1
WARNING: dev_open(/dev/sdf1) called while suspended
Volume group VolumeX metadata is inconsistent
WARNING: dev_open(/dev/sdf1) called while suspended
Volume group VolumeX metadata is inconsistent
ここでエラーが発生した為、以下の方法を試した。
[root@CentOS ~]# vgcfgrestore VolumeX -f /etc/lvm/archive/VolumeX_XXXXX.vg #現在の構成の1つ前くらいを指定
しかしデータが復旧出来ず、500GB程のデータが失われた。
[root@CentOS ~]# vgreduce VolumeX /dev/sdf1 #VolumeXからsdf1を外す
[root@CentOS ~]# pvscan #VGから外れているかどうかを確認
[root@CentOS ~]# pvremove /dev/sdf1 #PVからsdf1を外す
[root@CentOS ~]# pvscan #PVから外れているかどうかを確認
LVMって怖いわ。
やっぱり自分は使うのやめておこう。
頻繁にパーティションを変更することもないし。
容量増加はRAIDでHDD交換で対応します。

2011/01/15

CentOS 5.X 設定 No.15 RPMforgeリポジトリ追加

標準リポジトリには入っていない物を使用したい時には
  • ソースを拾ってきてコンパイル
  • .rpmファイルを拾ってきてインストール
  • リポジトリを追加してインストール
の3つが考えられます。
上から順に簡単な方法です。
なので、今回はリポジトリを追加する方法を書きます。
[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.2-2.el5.rf.i386.rpm #RPMforgeリポジトリをダウンロード
[root@CentOS ~]# rpm -ivh rpmforge-release-0.5.2-2.el5.rf.i386.rpm #RPMforgeリポジトリを追加
これで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 [オプション] [パッケージ]