hshinjiの日記

2010-04-06

DRBDを動かしてみた備忘録

参考サイト

いつものように、ゲストOS 2台で構築。OSCentOS 5.4です。

1台目のホスト名を"drbd_prim"、IPアドレスを192.168.1.96、2台目のホスト名を"drbd_second"、IPアドレスを192.168.1.97とします。

また、DRBDデバイスは/dev/drbd0とします。

まず、ゲストOS一つを準備してその後それをコピーします。

1台目

先日作っておいた素のCentOS 5.4(先日の「ゲストOSインストールCentOS)」のところまでのもの)をコピー。

# virt-clone -o centos.base -n drbd_prim -f /var/lib/libvirt/images/drbd_prim.img

で、ハードディスクを追加。virt-manager等で追加してください。

ここでは、/dev/hdbに16Gを作っています。

起動してパッケージインストール

ゲストを起動して、必要なパッケージのインストールをしていきます。

まずはアップデート

# yum -y update

DRBDのビルドに必要なパッケージをインストール

# yum -y install make gcc flex kernel-devel rpm-build
DRBDのビルドインストール

適当なディレクトリでDRBDのソースを取得して展開します。

# mkdir work
# cd work/
# wget http://oss.linbit.com/drbd/8.3/drbd-8.3.7.tar.gz
# tar zxf drbd-8.3.7.tar.gz 
# cd drbd-8.3.7
# 

で、続いてrpmビルド

# ./configure
# make rpm
# make km-rpm
#

/usr/src/redhat/RPMS/*/ 以下にrpmパッケージが8個作成されるので、これらをインストール

# rpm -ivh /usr/src/redhat/RPMS/*/drbd-*
準備中...                ########################################### [100%]
   1:drbd-utils             ########################################### [ 13%]
   2:drbd-bash-completion   ########################################### [ 25%]
   3:drbd-heartbeat         ########################################### [ 38%]
   4:drbd-pacemaker         ########################################### [ 50%]
   5:drbd-udev              ########################################### [ 63%]
   6:drbd-xen               ########################################### [ 75%]
   7:drbd                   ########################################### [ 88%]
   8:drbd-km-2.6.18_164.15.1########################################### [100%]
#
DRBDの設定

DRBDの設定は、/etc/drbd.d/に、*.resとして作成します。(/etc/drbd.confを直接編集してもいいですが。)

# cat /etc/drbd.d/test.res 
resource test {
    device /dev/drbd0;
    disk /dev/hdb1;
    meta-disk internal;
    on drbd_prim {
        address 192.168.1.96:7789;
    }
    on drbd_second {
        address 192.168.1.97:7789;
    }
}
#

因みに設定ファイルの例は、ソースコードの scripts/drbd.conf.example にあります。

続いて、追加したハードディスクはfdiskでパーティション(/dev/hdb1)を作成しておきます。

# fdisk -l /dev/hdb

Disk /dev/hdb: 17.1 GB, 17179868672 bytes
255 heads, 63 sectors/track, 2088 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot      Start         End      Blocks   Id  System
/dev/hdb1               1        2088    16771828+  83  Linux
# 

ネットワーク設定は、以下のように赤いところを編集し、また、ifcfg-eth0.bakは削除します。

# cat /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=drbd_prim  ← ホスト名
# rm /etc/sysconfig/network-scripts/ifcfg-eth0.bak
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none  ← 固定IPアドレス
ONBOOT=yes
HWADDR=00:16:36:4d:6f:90
IPADDR=192.168.1.96
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
# 

一旦ここまで完了したら、シャットダウンし、2台目のゲストを作成します。

2台目のゲスト作成

virt-cloneコマンドを使ってdrbd_primをdrbd_secondとしてコピーします。

# virt-clone -o drbd_prim -n drbd_second
What would you like to use as the cloned disk (file path) for '/var/lib/libvirt/
images/drbd_prim.img'? /var/lib/libvirt/images/drbd_second.img
 What would you like to use as the cloned disk (file path) for '/var/lib/libvirt
/images/drbd_prim_sync.img'? /var/lib/libvirt/images/drbd_second_sync.img
Cloning /var/lib/libvirt/ 100% |=========================|  16 GB    01:34     
Cloning /var/lib/libvirt/ 100% |=========================|  16 GB    01:39     
 
Clone 'drbd_second' created successfully.
# 

で、2台とも起動します。(2台目はこの後ネットワークなどの設定をします。)

# virsh start drbd_prim
# virsh start drbd_second
#
1台目の続き

1台目にログインし、カーネルモジュールを読み込みます。

# modprobe drbd
# cat /proc/drbd  ← 確認
version: 8.3.7 (api:88/proto:86-91)
GIT-hash: ea9e28dbff98e331a62bcbcc63a6135808fe2917 build by root@drbd_prim, 2010-04-05 23:10:16
# 

drbdのメタデータを作ります。

# drbdadm create-md test
md_offset 17174347776
al_offset 17174315008
bm_offset 17173790720

Found ext3 filesystem
      104388 kB data area apparently used
    16771280 kB left usable by current configuration

Even though it looks like this would place the new meta data into
unused space, you still need to confirm, as this is only a guess.

Do you want to proceed?
[need to type 'yes' to confirm] yes  ← ここで"yes"を入力

Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
success
# 

次にDRBDのデーモンを開始します。

# /etc/init.d/drbd start
Starting DRBD resources: [ d(test) n(test) ]..........
 **************************************************************
 DRBD's startup script waits for the peer node(s) to appear.
 - In case this node was already a degraded cluster before the
   reboot the timeout is 0 seconds. [degr-wfc-timeout]
 - If the peer was available before the reboot the timeout will
   expire after 0 seconds. [wfc-timeout]
   (These values are for resource 'test'; 0 sec -> wait forever)
 To abort waiting enter 'yes' [  13]:yes  ← "yes"を入力

.
#

/proc/drbdを確認すると"Secondary/Unknown"になっているのが分かります(2台目はまだ未設定なのでUnknownです)。

# cat /proc/drbd 
version: 8.3.7 (api:88/proto:86-91)
GIT-hash: ea9e28dbff98e331a62bcbcc63a6135808fe2917 build by root@drbd_prim, 2010-04-05 23:10:16
 0: cs:StandAlone ro:Secondary/Unknown ds:Inconsistent/DUnknown   r----
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:16771280
#

これをPrimaryにしてやります。

# drbdsetup /dev/drbd0 primary -o
# cat /proc/drbd  ← 確認すると"Primary/Unknown"になりました。
version: 8.3.7 (api:88/proto:86-91)
GIT-hash: ea9e28dbff98e331a62bcbcc63a6135808fe2917 build by root@drbd_prim, 2010-04-05 23:10:16
 0: cs:StandAlone ro:Primary/Unknown ds:UpToDate/DUnknown   r----
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:16771280
#

これでDRBDデバイスが使えるようになったので、/dev/drbd0 をフォーマットしてやります。

# mkfs.ext3 /dev/drbd0
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
<中略>

This filesystem will be automatically checked every 38 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
#

マウントすれば使えるようになっています。

# mount /dev/drbd0 /mnt/
# df
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/mapper/VolGroup00-LogVol00
                      15109112   2679456  11649780  19% /
/dev/hda1               101086     19114     76753  20% /boot
tmpfs                   255024         0    255024   0% /dev/shm
/dev/drbd0            16508024    176244  15493216   2% /mnt
# 

2台目

2台目はまずネットワークを設定してやります(赤いところを編集、ifcfg-eth0.bakは削除)。

# cat /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=drbd_second  ← ホスト名
# rm /etc/sysconfig/network-scripts/ifcfg-eth0.bak
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none  ← 固定IPアドレス
ONBOOT=yes
HWADDR=00:16:36:0f:62:75
IPADDR=192.168.1.97
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
# reboot  再起動

あとは、再起動後にDRBDのメタデータの作成とデーモンを起動するだけ。

# drbdadm create-md test
md_offset 17174347776
al_offset 17174315008
bm_offset 17173790720

Found ext3 filesystem
      104388 kB data area apparently used
    16771280 kB left usable by current configuration

Even though it looks like this would place the new meta data into
unused space, you still need to confirm, as this is only a guess.

Do you want to proceed?
[need to type 'yes' to confirm] yes  ← "yes"を入力

Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
success
# /etc/init.d/drbd start
Starting DRBD resources: [ d(test) ].
# cat /proc/drbd 
version: 8.3.7 (api:88/proto:86-91)
GIT-hash: ea9e28dbff98e331a62bcbcc63a6135808fe2917 build by root@drbd_prim, 2010-04-05 23:10:16
 0: cs:SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C r----
    ns:0 nr:3200 dw:3200 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:16768080
        [>....................] sync'ed:  0.1% (16372/16376)M
        finish: 11:38:40 speed: 352 (352) K/sec
# 

勝手に同期が始まります。

2010-03-25

Hadoopインストール

Hadoopインストールに手間取ったので、備忘録


前提条件

以下の環境で動作させています。

また、Hadoopのマスターノードのホスト名を「hmaster」、スレーブを「hslave1, hslave2, ...」とします。


ゲストOSインストールCentOS

KVM上で動作するCentOSのイメージを一つ作成します。各ノードはこのイメージのコピーを使用します。

再起動後の最初の設定では、FirewallとSELinuxを無効にしておきます。

その他のCentOSインストール自体の説明はここでは省略しますので、あしからず。

ログイン後、ホスト側から扱い易いように、コンソールの設定をしておきます。/etc/inittabに、"co:2345:respawn:/sbin/agetty ttyS0 115200 vt100-nav"を追加しておけば良いです。これでホスト側から「virsh console <ホスト名>」でアクセスできます。

また、OSアップデートしておきましょう。


共通項目のインストール・設定

SunのJavaインストール

ここからJDK(現在はJDK 6 Update 18)をダウンロードし、インストールします。(インストールの詳細は略)

Hadoopインストール

yumリポジトリを登録して、「hadoop-0.20」をインストールします。(rootで作業します。)

# cd /etc/yum.repos.d/
# wget http://archive.cloudera.com/redhat/cdh/cloudera-testing.repo
# yum -y install hadoop-0.20

この後、仮想マシンを終了させます。


マスターノードの設定

マスターノード用の仮想マシンの準備

まずホスト上で、作成した仮想マシンイメージをコピーしてマスターノード用の仮想マシンイメージを作成します。次のコマンドを使います。

virt-clone -o 元のゲスト名 -n 新しいゲスト名 -f ディスクイメージ名

例えば、

$ sudo virt-clone -o centos54 -n hmaster -f /var/lib/libvirt/images/hmaster.img

とします。

その後、マスターノード仮想マシンを起動し、コンソールで接続します。

$ virsh start hmaster
$ sudo virsh console hmaster

一般ユーザでログインした後、suコマンドでrootにスイッチします。

ネットワークの設定

まず、ネットワーク関連を設定します。

仮想マシンをコピーした際に作成される ifcfg-eth0.bak は削除し、ifcfg-eth0 に、ダイナミックDNSにホスト名を登録するための設定をします。

# rm /etc/sysconfig/network-scripts/ifcfg-eth0.bak
# echo 'DHCP_HOSTNAME=hmaster' >> /etc/sysconfig/network-scripts/ifcfg-eth0

また、/etc/sysconfig/network に書かれたホスト名を編集します。

# cat /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=hmaster
#

あと、/etc/hosts 内の127.0.0.1は、「localhost.localdomain localhost」だけになるようにします。

インストール時にホスト名を設定したりすると、ここに追記されたりするので)

ここで一旦ネットワーク再起動しましょう。

# /etc/init.d/network restart
Hadoopの設定

ここでは、/etc/hadoop/conf/ 以下のファイルを編集します。

  • core-site.xml
<configuration>
  <property>
    <name>fs.default.name</name>
    <value>hdfs://hmaster:8020</value>
  </property>
</configuration>
<configuration>
  <property>
    <name>dfs.replication</name>
    <value>3</value>  ← スレーブノードの数(ここでは3つ)
  </property>
</configuration>
  • mapred-site.xml
<configuration>
  <property>
    <name>mapred.job.tracker</name>
    <value>hmaster:8021</value>
  </property>
</configuration>
  • masters
hmaster
  • slaves
hslave1
hslave2
hslave3

次にHDFSのフォーマットを行います。

# sudo -u hadoop hadoop-0.20 namenode -format

最後に、起動時にHadoopデーモンを開始出来るように設定します。

# chkconfig --add hadoop-0.20-namenode
# chkconfig --add hadoop-0.20-jobtracker

NFSの設定

/etc/hadoop/ 以下をスレーブと共有できるよう、NFSの設定を行います。

まず、/etc/exports を編集します。

/etc/hadoop     hslave*(rw,no_all_squash,sync)

その後、NFSデーモンを起動し、起動時に開始できるようにします。

# /etc/init.d/nfs start
# chkconfig nfs on

ここまで完了したら再起動し、スレーブの設定に進みましょう。


スレーブノードの設定

ここではhslave1のスレーブノードについて説明します。他のhslave2, hslave3は、ホスト名を変更して作業してください。

マスターノードと同様、仮想マシンイメージをコピーします。

$ sudo virt-clone -o centos54 -n hslave1 -f /var/lib/libvirt/images/hslave1.img

その後、スレーブノード仮想マシンを起動し、コンソールで接続します。

$ virsh start hslave1
$ sudo virsh console hslave1

一般ユーザでログインした後、suコマンドでrootにスイッチし、マスターノードと同じようにネットワーク関連を設定します。

# rm /etc/sysconfig/network-scripts/ifcfg-eth0.bak
# echo 'DHCP_HOSTNAME=hslave1' >> /etc/sysconfig/network-scripts/ifcfg-eth0

/etc/sysconfig/network に書かれたホスト名を修正します。

# cat /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=hslave1
#

そして一旦ネットワーク再起動します。

# /etc/init.d/network restart
NFSの設定

起動時にマスターノードの/etc/hadoopをスレーブの/etc/hadoopにマウントするようにします。

# rm -rf /etc/hadoop/*
# echo 'hmaster:/etc/hadoop /etc/hadoop nfs defaults 0 0' >> /etc/fstab
Hadoopデーモンの設定

起動時にHadoopデーモンを開始出来るように設定します。

# chkconfig --add hadoop-0.20-datanode
# chkconfig --add hadoop-0.20-tasktracker

そしてリブートし、他のマスターノードについても同じ設定を行います。


確認

Web経由でマスターノードにアクセスし、確認します。


スレーブノードの追加

  1. まず /etc/hadoop/conf/hdfs-site.xml で設定した数を必要な分だけ増やす。
  2. /etc/hadoop/conf/slaves にスレーブノードを追加する。
  3. スレーブノードを上記のとおりに作成し、リブートする。

2009-11-16

2009-11-12 はてぶを初めてからちょうど4年

[]TOMOYO Linux 1.7.1がリリース

昨日、TOMOYO Linux 1.7.1がリリースされました。

このTOMOYO LinuxOSSとしてリリースされたのが4年前の11月11日です。

私がこのはてぶを開始したのがその次の日の11月12日で、その日にTOMOYO Linuxに触れています。その時はここまでTOMOYO Linuxに関わるとは思ってもいませんでしたね。

[]TOMOYO GUI on Mandriva Linux 2010

TOMOYO Linuxがつぶやき始めましたが、その中に「Mandriva Linux 2010 is Finally Out with TOMOYO Linux」と言うのがありました。

「ふ〜ん。」と思ってそこにあるリンク先を見てみると、

Mandriva Control Center also bring improvements in tools: new netprofile management tool, gui for Tomoyo security framework, and parental control.

とあるではないですか。「以前作っていたEclipseベースのGUIかな?」と思ってもう少し調べてみるとこんな記事が見つかり、どうもEclipseベースではないようです。


ということで、Mandriva Linux 2010を動かして試してみます。


Mandriva Linux 2010のインストール

公式サイトから、インストールDVDのイメージをダウンロードします。

後は略。


TOMOYO GUIインストール

デフォルトでは、TOMOYO GUIインストールされていませんので、インストールから始めます。


まずメインメニューから「ツール」→「システムツール」→「コンピュータを設定」を選択(もしくはパネルの「コンピュータを設定」アイコンをクリック)してコントロールセンターを開きます。

f:id:hshinji:20091112013423p:image


そして「RPMインストールアンインストール」を選ぶと「ソフトウェアの管理」が開きます。

f:id:hshinji:20091112014022p:image


左上のプルダウンメニューが「GUIのあるパッケージ」となっていれば、「すべて」に変更してやります。

f:id:hshinji:20091112014457p:image


右の「検索対象」に「tomoyo-gui」と入力して検索すると、パッケージが表示されます。

f:id:hshinji:20091112014600p:image


後は、パッケージを選択して「適用」ボタンを押すと、関連するパッケージも一緒にインストールされます。

f:id:hshinji:20091112014852p:image


インストール完了後は、一旦コントロールセンターを終了します。


TOMOYO GUIを使ってみる(初期化

再度、コントロールセンターを起動し、左のメニューから「セキュリティ」を選択すると、「Configure TOMOYO Linux policy」という項目が追加されているので、それを選択します。

f:id:hshinji:20091112015704p:image


コントロールセンター内でTOMOYO GUIが動作しますが、ポリシーはまだないので、初期化するかどうか聞いてきます。

f:id:hshinji:20091112020518p:image


初期化が完了すると、再起動するように促されるので、再起動してやります。

f:id:hshinji:20091112020259p:image


TOMOYO GUIを使ってみる(ポリシー設定)

ふたたびTOMOYO GUIを起動すると、こんどはドメインが出来上がっています。

f:id:hshinji:20091112030532p:image


また、例外ポリシーも出来上がってます。

f:id:hshinji:20091112030524p:image


「Help」のタグを開いてみると、誇らしげなTOMOYOペンギンがあらわれます。いいですね〜。

f:id:hshinji:20091112031311p:image


「All domains」のタグでドメインを選択(ShiftキーやCtrlキーを使って複数選択も可能)すると、各ドメインの詳細が表示されます。

f:id:hshinji:20091112032042p:image


右端にはドメインのプロファイルがプルダウンメニューで選択できるようになっています。

f:id:hshinji:20091112032045p:image


以下は、いくつかをLearningモードにして再起動した結果で、Disabledモード以外のドメインが強調表示され、学習した結果が下に表示されます。(強調されているドメインは、「Active domains」タブで見ることが出きるようになります)

f:id:hshinji:20091112033958p:image


学習した結果にマウスを持っていくとアンダーラインが表示され、

f:id:hshinji:20091112035446p:image

そこをクリックすると、「編集」か「削除」を選べます。

f:id:hshinji:20091112035445p:image

「編集」を選ぶと編集画面が表示され、そこで修正することができます。

f:id:hshinji:20091112035444p:image


使ってみて

GUITOMOYO Linuxのポリシー編集作業が行えるのはいいですね。ccs-editpolicyは便利ですが、初めての人にはGUIであるというだけで抵抗感は少なくなると思います。

ただ、ポリシーの修正や削除はできても、追加ができないのはちょっとやりにくいですね。

まあ、そのうち改善されるんでしょうが。

2009-10-24

[]CentOS 5.4

CentOS 5.4では、KVMが追加されましたね。

インストーラでもKVMが選択できるようになっています。

f:id:hshinji:20091024075153p:image

でも、選択肢が何か変?

Xen」と「KVM」の選択肢にならんのですかね。