「Samba 3.2 のクラスタ機能検証手順」の版間の差分
提供:Samba-JP
ナビゲーションに移動検索に移動
細編集の要約なし |
(→動作検証) |
||
(同じ利用者による、間の18版が非表示) | |||
6行目: | 6行目: | ||
なお、lenny を用いた理由は、検証に必要なパッケージがすべてデフォルトで用意されているためです。 |
なお、lenny を用いた理由は、検証に必要なパッケージがすべてデフォルトで用意されているためです。 |
||
検証環境は、メモリ 128MB の VMware 仮想マシンです。 |
|||
== iscsi ターゲットの作成 == |
== iscsi ターゲットの作成 == |
||
14行目: | 16行目: | ||
以下、 base-system のインストールのみを行った lenny を前提として手順を紹介します。 |
以下、 base-system のインストールのみを行った lenny を前提として手順を紹介します。 |
||
/etc/apt/sources.list は |
|||
<pre> |
|||
iscsi1:~# cat /etc/apt/sources.list |
|||
deb http://ftp.jp.debian.org/debian lenny main |
|||
deb http://security.debian.org/ lenny/updates main |
|||
</pre> |
|||
のように設定しています。 |
|||
* telnetd のインストール |
* telnetd のインストール |
||
74行目: | 86行目: | ||
gateway 192.168.135.2 |
gateway 192.168.135.2 |
||
</pre> |
</pre> |
||
* 再起動 |
|||
: IP アドレスの設定などを反映させるため、一度再起動します。 |
|||
: 実際には、再起動しなくても設定の反映はできますが、気持ち悪いので…… |
|||
* パッケージのインストール |
* パッケージのインストール |
||
124行目: | 140行目: | ||
iscsi1:~# |
iscsi1:~# |
||
</pre> |
</pre> |
||
* iSCSI で公開するパーティションを構成します |
|||
* 再起動の実行 |
|||
: なんでも構わないのですが、ここではループバックデバイスとして構成する方法を紹介します。なお、再起動するたびにループバックデバイスの構成を行う必要があります。 |
|||
: ここで、ホスト名の変更の反映、カーネルモジュールの組み込みなどを行うために、一度再起動を実行します。 |
|||
* ループバックデバイスの作成 |
|||
: 以下のようにして、イメージファイルを作成の上、ループバックデバイスを作成します。なお、再起動するたびにループバックデバイスの構成を行う必要があります。 |
|||
: ※うまく自動化する方法あるんでしょうか? |
: ※うまく自動化する方法あるんでしょうか? |
||
<pre> |
<pre> |
||
iscsi1:~# dd if=/dev/zero of=/var/lib/iscsi1.img bs=1M count= |
iscsi1:~# dd if=/dev/zero of=/var/lib/iscsi1.img bs=1M count=512 |
||
512+0 records in |
|||
512+0 records out |
|||
536870912 bytes (537 MB) copied, 3.21413 s, 167 MB/s |
|||
iscsi1:~# losetup /dev/loop0 /var/lib/iscsi1.img |
iscsi1:~# losetup /dev/loop0 /var/lib/iscsi1.img |
||
iscsi1:~# losetup -a |
iscsi1:~# losetup -a |
||
137行目: | 157行目: | ||
/dev/loop/0: [0301]:98270 (/var/lib/iscsi1.img) |
/dev/loop/0: [0301]:98270 (/var/lib/iscsi1.img) |
||
</pre> |
</pre> |
||
:これで、/dev/loop0 に |
:これで、/dev/loop0 に 512MB の仮想パーティションが存在することになりました。実際に存在するパーティションを用いる場合、この作業は省略できます。 |
||
* /etc/ietd.conf を編集します |
|||
: ここでは、必要最低限の設定として、認証なしで、今作成したループバックデバイスを公開する設定を行います。各パラメータの詳細については、ietd.conf(5) などを参照してください。 |
|||
<pre> |
|||
Target iqn.2008-09.com.monyo:iscsi1 |
|||
Lun 0 Path=/dev/loop0,Type=fileio |
|||
MaxConnections 1 |
|||
</pre> |
|||
* iscsitarget の再起動 |
|||
: iscsitarget サービスの再起動を行い、設定を反映します。 |
|||
<pre> |
|||
iscsi1:~# /etc/init.d/iscsitarget stop |
|||
Removing iSCSI enterprise target devices: succeeded. |
|||
Stopping iSCSI enterprise target service: succeeded. |
|||
Removing iSCSI enterprise target modules: succeeded. |
|||
iscsi1:~# /etc/init.d/iscsitarget start |
|||
Starting iSCSI enterprise target service: succeeded. |
|||
</pre> |
|||
== Samba サーバ1の構築 == |
|||
引き続き、Samba サーバを構築します。 |
|||
同じく、base-system のインストールのみを行った lenny から構築する方法を紹介します。 |
|||
* telnetd のインストール |
|||
* 作業用ユーザの作成 |
|||
* ホスト名の設定 |
|||
: ここではホスト名を「samba32a」に設定しました。 |
|||
<pre>echo samba32a > /etc/hostname</pre> |
|||
* IP アドレスの設定 |
|||
: 検証だけなら DHCP でも動作しますが、ここでは一応 192.168.135.21 というアドレスを付与しました。 |
|||
* 再起動 |
|||
: IP アドレスの設定などを反映させるため、一度再起動します。 |
|||
: 実際には、再起動しなくても設定の反映はできますが、気持ち悪いので…… |
|||
* iSCSI / gfs / Samba 関連パッケージのインストール |
|||
: 以下、順次パッケージのインストールを行っていきます。 |
|||
: クラスタファイルシステムとしては、gfs を用いました。gfs は依存パッケージが多いので、できれば ocfs2 でやりたかったんですが、ocfs2 自体の構築はできたものの、ctdb が「」というエラーでファイルのロックに失敗してしまうため、あきらめました。 |
|||
<pre> |
|||
samba32a:~# apt-get install open-iscsi |
|||
Reading package lists... Done |
|||
Building dependency tree |
|||
Reading state information... Done |
|||
The following NEW packages will be installed: |
|||
open-iscsi |
|||
0 upgraded, 1 newly installed, 0 to remove and 101 not upgraded. |
|||
Need to get 540kB of archives. |
|||
After this operation, 1315kB of additional disk space will be used. |
|||
Get:1 http://ftp.jp.debian.org lenny/main open-iscsi 2.0.869.2-2.1 [540kB] |
|||
Fetched 540kB in 1s (279kB/s) |
|||
Selecting previously deselected package open-iscsi. |
|||
(Reading database ... 11687 files and directories currently installed.) |
|||
Unpacking open-iscsi (from .../open-iscsi_2.0.869.2-2.1_i386.deb) ... |
|||
Processing triggers for man-db ... |
|||
Setting up open-iscsi (2.0.869.2-2.1) ... |
|||
Starting iSCSI initiator service: iscsid. |
|||
Setting up iSCSI targets: |
|||
iscsiadm: No records found! |
|||
. |
|||
Mounting network filesystems:. |
|||
samba32a:~# apt-get install gfs-tools cman clvm |
|||
Reading package lists... Done |
|||
Building dependency tree |
|||
Reading state information... Done |
|||
The following extra packages will be installed: |
|||
binutils bochsbios debootstrap dpkg file gfs2-tools libasound2 libbrlapi0.5 |
|||
libcman2 libdb4.5 libdevmapper1.02.1 libdirectfb-1.0-0 libdlm2 libgnutls26 |
|||
libicu38 libmagic1 libnet-snmp-perl libnet-telnet-perl libnspr4-0d |
|||
libnss3-1d libopenais2 libpcap0.8 libsdl1.2debian libsdl1.2debian-alsa |
|||
libsqlite3-0 libsvga1 libsysfs2 libts-0.0-0 libvdemgmt0 libvdeplug2 libvirt0 |
|||
libx86-1 libxenstore3.0 libxml2 linux-image-2.6.26-1-486 lvm2 lzma |
|||
mime-support openais openbios-sparc openhackware perl perl-base perl-doc |
|||
perl-modules proll psmisc python python-minimal python2.5 python2.5-minimal |
|||
qemu redhat-cluster-modules-2.6.26-1-486 sgml-base sharutils svgalibg1 vde2 |
|||
vgabios xml-core |
|||
Suggested packages: |
|||
binutils-doc libasound2-plugins gnutls-bin libcrypt-des-perl |
|||
libdigest-hmac-perl libdigest-sha1-perl libio-socket-inet6-perl |
|||
linux-doc-2.6.26 dmsetup libterm-readline-gnu-perl |
|||
libterm-readline-perl-perl groff python-doc python-tk python-profiler |
|||
python2.5-doc binfmt-support sudo samba sgml-base-doc mailx vde2-cryptcab |
|||
kvm debhelper |
|||
Recommended packages: |
|||
redhat-cluster-modules |
|||
The following NEW packages will be installed: |
|||
binutils bochsbios clvm cman debootstrap file gfs-tools gfs2-tools |
|||
libasound2 libbrlapi0.5 libcman2 libdb4.5 libdirectfb-1.0-0 libdlm2 libicu38 |
|||
libmagic1 libnet-snmp-perl libnet-telnet-perl libnspr4-0d libnss3-1d |
|||
libopenais2 libpcap0.8 libsdl1.2debian libsdl1.2debian-alsa libsqlite3-0 |
|||
libsvga1 libsysfs2 libts-0.0-0 libvdemgmt0 libvdeplug2 libvirt0 libx86-1 |
|||
libxenstore3.0 libxml2 linux-image-2.6.26-1-486 lzma mime-support openais |
|||
openbios-sparc openhackware perl perl-doc perl-modules proll psmisc python |
|||
python-minimal python2.5 python2.5-minimal qemu |
|||
redhat-cluster-modules-2.6.26-1-486 sgml-base sharutils svgalibg1 vde2 |
|||
vgabios xml-core |
|||
The following packages will be upgraded: |
|||
dpkg libdevmapper1.02.1 libgnutls26 lvm2 perl-base |
|||
5 upgraded, 57 newly installed, 0 to remove and 96 not upgraded. |
|||
Need to get 61.1MB/72.7MB of archives. |
|||
After this operation, 196MB of additional disk space will be used. |
|||
Do you want to continue [Y/n]? |
|||
Get:1 http://ftp.jp.debian.org lenny/main perl-modules 5.10.0-14 [3192kB] |
|||
Get:2 http://ftp.jp.debian.org lenny/main perl 5.10.0-14 [4547kB] |
|||
(省略) |
|||
Setting up sgml-base (1.26) ... |
|||
Setting up xml-core (0.11) ... |
|||
samba32a:~#apt-get install samba ctdb |
|||
Reading package lists... Done |
|||
Building dependency tree |
|||
Reading state information... Done |
|||
The following extra packages will be installed: |
|||
ethtool iproute libatm1 libcups2 libkeyutils1 libkrb53 libpopt0 libtalloc1 |
|||
libwbclient0 lsof samba-common tdb-tools ucf |
|||
Suggested packages: |
|||
iproute-doc cups-common krb5-doc krb5-user smbldap-tools |
|||
The following NEW packages will be installed: |
|||
ctdb ethtool iproute libatm1 libcups2 libkeyutils1 libkrb53 libtalloc1 |
|||
libwbclient0 lsof samba samba-common tdb-tools ucf |
|||
The following packages will be upgraded: |
|||
libpopt0 |
|||
1 upgraded, 14 newly installed, 0 to remove and 95 not upgraded. |
|||
Need to get 9698kB of archives. |
|||
After this operation, 25.8MB of additional disk space will be used. |
|||
Do you want to continue [Y/n]? |
|||
Get:1 http://ftp.jp.debian.org lenny/main iproute 20080725-2 [363kB] |
|||
Get:2 http://ftp.jp.debian.org lenny/main libpopt0 1.14-4 [45.9kB] |
|||
(省略) |
|||
</pre> |
|||
: Samba パッケージのインストール時の質問には、以下のように答えます。 |
|||
: * ワークグループ名: SAMBA32GFS |
|||
: * WINS の設定を DHCP から取得:しない |
|||
* 再起動 |
|||
: これで、2.6.26-1-486 のカーネルで起動します。 |
|||
* iSCSI イニシエータの設定:ディスクの認識 |
|||
: 以下のようにして、ディスクの認識を行います。 |
|||
<pre> |
|||
samba32a:~# iscsiadm -m node --targetname iqn.2008-09.com.monyo:iscsi1 -p 192.16 |
|||
8.135.20 --op new |
|||
New iSCSI node [tcp:[hw=default,ip=,net_if=default,iscsi_if=default] 192.168.135 |
|||
.20,3260,-1 iqn.2008-09.com.monyo:iscsi1] added |
|||
samba32a:~# iscsiadm -m node --targetname iqn.2008-09.com.monyo:iscsi1 -p 192.16 |
|||
8.135.20 -l |
|||
Logging in to [iface: default, target: iqn.2008-09.com.monyo:iscsi1, portal: 192 |
|||
.168.135.20,3260] |
|||
Login to [iface: default, target: iqn.2008-09.com.monyo:iscsi1, portal: 192.168. |
|||
135.20,3260]: successful |
|||
samba32a:~# fdisk -l |
|||
Disk /dev/hda: 8589 MB, 8589934592 bytes |
|||
255 heads, 63 sectors/track, 1044 cylinders |
|||
Units = cylinders of 16065 * 512 = 8225280 bytes |
|||
Disk identifier: 0x0001c09b |
|||
Device Boot Start End Blocks Id System |
|||
/dev/hda1 * 1 993 7976241 83 Linux |
|||
/dev/hda2 994 1044 409657+ 5 Extended |
|||
/dev/hda5 994 1044 409626 82 Linux swap / Solaris |
|||
Disk /dev/sda: 536 MB, 536870912 bytes |
|||
17 heads, 61 sectors/track, 1011 cylinders |
|||
Units = cylinders of 1037 * 512 = 530944 bytes |
|||
Disk identifier: 0x00000000 |
|||
Disk /dev/sda doesn't contain a valid partition table |
|||
</pre> |
|||
* iSCSI イニシエータの設定:ディスクの自動認識 |
|||
: 以下のようにして、再起動時に iSCSI ターゲットおよびディスクの認識が自動で行われるようにします。 |
|||
<pre> |
|||
samba32a:~# vi /etc/iscsi/nodes/iqn.2008-09.com.monyo\:iscsi1/192.168.135.20\,3260 |
|||
</pre> |
|||
: 以下の項目を manual から automatic に変更します。 |
|||
: * node.startup |
|||
: * node.conn[0].startup |
|||
* gfs の設定:/etc/hosts の設定 |
|||
: 自身の名前解決が可能なように設定を行います。 |
|||
<pre> |
|||
127.0.0.1 localhost |
|||
192.168.135.21 samba32a.local samba32a |
|||
# The following lines are desirable for IPv6 capable hosts |
|||
::1 localhost ip6-localhost ip6-loopback |
|||
fe00::0 ip6-localnet |
|||
ff00::0 ip6-mcastprefix |
|||
ff02::1 ip6-allnodes |
|||
ff02::2 ip6-allrouters |
|||
ff02::3 ip6-allhosts |
|||
</pre> |
|||
* gfs の設定:/etc/cluster/cluster.conf の設定 |
|||
: /etc/cluster ディレクトリを作成の上、/etc/cluster/cluster.conf ファイルを以下のように作成します。 |
|||
<pre> |
|||
<cluster name="cluster1" config_version="3"> |
|||
<cman two_node="1" expected_votes="1"/> |
|||
<clusternodes> |
|||
<clusternode name="samba32a" votes="1" nodeid="1"> |
|||
<fence> |
|||
<method name="single"> |
|||
<device name="manual" ipaddr="192.168.135.21"/> |
|||
</method> |
|||
</fence> |
|||
</clusternode> |
|||
<clusternode name="samba32b" votes="1" nodeid="2"> |
|||
<fence> |
|||
<method name="single"> |
|||
<device name="manual" ipaddr="192.168.135.22"/> |
|||
</method> |
|||
</fence> |
|||
</clusternode> |
|||
</clusternodes> |
|||
<fencedevices> |
|||
<fencedevice name="manual" agent="fence_manual"/> |
|||
</fencedevices> |
|||
</cluster> |
|||
</pre> |
|||
* パーティションの作成 |
|||
: parted をインストールの上、パーティションを作成します。 |
|||
<pre> |
|||
samba32a:~# apt-get install parted |
|||
Reading package lists... Done |
|||
Building dependency tree |
|||
Reading state information... Done |
|||
The following extra packages will be installed: |
|||
libparted1.8-10 |
|||
Suggested packages: |
|||
libparted1.8-dev libparted1.8-i18n parted-doc |
|||
The following NEW packages will be installed: |
|||
libparted1.8-10 parted |
|||
0 upgraded, 2 newly installed, 0 to remove and 95 not upgraded. |
|||
Need to get 261kB of archives. |
|||
After this operation, 569kB of additional disk space will be used. |
|||
Do you want to continue [Y/n]? |
|||
Get:1 http://ftp.jp.debian.org lenny/main libparted1.8-10 1.8.8.git.2008.03.24-9 |
|||
[197kB] |
|||
Get:2 http://ftp.jp.debian.org lenny/main parted 1.8.8.git.2008.03.24-9 [64.0kB] |
|||
Fetched 261kB in 1s (199kB/s) |
|||
Selecting previously deselected package libparted1.8-10. |
|||
(Reading database ... 19195 files and directories currently installed.) |
|||
Unpacking libparted1.8-10 (from .../libparted1.8-10_1.8.8.git.2008.03.24-9_i386. |
|||
deb) ... |
|||
Selecting previously deselected package parted. |
|||
Unpacking parted (from .../parted_1.8.8.git.2008.03.24-9_i386.deb) ... |
|||
Processing triggers for man-db ... |
|||
Setting up libparted1.8-10 (1.8.8.git.2008.03.24-9) ... |
|||
Setting up parted (1.8.8.git.2008.03.24-9) ... |
|||
samba32a:~# |
|||
samba32a:~# parted /dev/sda |
|||
GNU Parted 1.8.8 |
|||
Using /dev/sda |
|||
Welcome to GNU Parted! Type 'help' to view a list of commands. |
|||
(parted) mklabel |
|||
Warning: The existing disk label on /dev/sda will be destroyed and all data on |
|||
this disk will be lost. Do you want to continue? |
|||
Yes/No? y |
|||
New disk label type? [gpt]? |
|||
(parted) mkpart primary |
|||
File system type? [ext2]? ext3 |
|||
Start? 0 |
|||
End? 512MB |
|||
(parted) p |
|||
Model: IET VIRTUAL-DISK (scsi) |
|||
Disk /dev/sda: 537MB |
|||
Sector size (logical/physical): 512B/512B |
|||
Partition Table: gpt |
|||
Number Start End Size File system Name Flags |
|||
1 17.4kB 512MB 512MB primary |
|||
(parted) q |
|||
Information: You may need to update /etc/fstab. |
|||
samba32a:~# |
|||
</pre> |
|||
* gfs のフォーマット |
|||
: 以下のようにして、フォーマットを行います。 |
|||
<pre> |
|||
samba32a:~# gfs_mkfs -p lock_dlm -t cluster1:gfs -j 2 /dev/sda1 |
|||
This will destroy any data on /dev/sda1. |
|||
Are you sure you want to proceed? [y/n] y |
|||
Device: /dev/sda1 |
|||
Blocksize: 4096 |
|||
Filesystem Size: 59412 |
|||
Journals: 2 |
|||
Resource Groups: 8 |
|||
Locking Protocol: lock_dlm |
|||
Lock Table: cluster1:gfs |
|||
Syncing... |
|||
All Done |
|||
samba32a:~# |
|||
</pre> |
|||
== Samba サーバ2の構築 == |
|||
Sambaサーバ1と同様にして構築します。 |
|||
同じく、base-system のインストールのみを行った lenny から構築する方法を紹介します。 |
|||
* telnetd のインストール |
|||
* 作業用ユーザの作成 |
|||
* ホスト名の設定 |
|||
: ここではホスト名を「samba32b」に設定しました。 |
|||
<pre>echo samba32b > /etc/hostname</pre> |
|||
* IP アドレスの設定 |
|||
: 検証だけなら DHCP でも動作しますが、ここでは一応 192.168.135.22 というアドレスを付与しました。 |
|||
* 再起動 |
|||
: IP アドレスの設定などを反映させるため、一度再起動します。 |
|||
: 実際には、再起動しなくても設定の反映はできますが、気持ち悪いので…… |
|||
* iSCSI / gfs / Samba 関連パッケージのインストール |
|||
* 再起動 |
|||
: これで、2.6.26-1-486 のカーネルで起動します。 |
|||
* iSCSI イニシエータの設定:ディスクの認識 |
|||
== クラスタの起動 == |
|||
* cman の起動 |
|||
: samba32a と samba32b の両方で以下を実行します。 |
|||
<pre> |
|||
samba32a:~# /etc/init.d/cman start |
|||
Starting cluster manager: |
|||
Loading kernel modules: done |
|||
Mounting config filesystem: done |
|||
Starting cluster configuration system: done |
|||
Joining cluster:cman_tool: Node is already active |
|||
done |
|||
Starting daemons: groupd fenced dlm_controld gfs_controld |
|||
Joining fence domain: done ← 片方のマシンしか起動していないと、ここで無限に待たされます。 |
|||
Starting Quorum Disk daemon: done |
|||
</pre> |
|||
<pre> |
|||
samba32a:~# cman_tool nodes |
|||
Node Sts Inc Joined Name |
|||
1 M 180 2008-10-07 00:39:05 samba32a |
|||
2 M 192 2008-10-07 00:44:27 samba32b |
|||
samba32a:~# cman_tool services |
|||
type level name id state |
|||
fence 0 default 00010001 none |
|||
[1 2] |
|||
dlm 1 gfs 00020002 none |
|||
[1 2] |
|||
gfs 2 gfs 00010002 none |
|||
[1 2] |
|||
</pre> |
|||
* 起動順の変更 |
|||
<pre> |
|||
samba32a:~# update-rc.d -f open-iscsi remove |
|||
Removing any system startup links for /etc/init.d/open-iscsi ... |
|||
/etc/rc0.d/K81open-iscsi |
|||
/etc/rc6.d/K81open-iscsi |
|||
/etc/rcS.d/S45open-iscsi |
|||
samba32a:~# update-rc.d open-iscsi start 66 S . stop 81 0 6 . |
|||
Adding system startup for /etc/init.d/open-iscsi ... |
|||
/etc/rc0.d/K81open-iscsi -> ../init.d/open-iscsi |
|||
/etc/rc6.d/K81open-iscsi -> ../init.d/open-iscsi |
|||
/etc/rcS.d/S66open-iscsi -> ../init.d/open-iscsi |
|||
</pre> |
|||
* ファイルシステムのマウント |
|||
: samba32a と samba32b の両方で以下を実行します。 |
|||
<pre> |
|||
samba32a:~# mkdir /media/iscsi1 |
|||
samba32a:~# mount /dev/sda1 /media/iscsi1 |
|||
samba32a:~# df |
|||
Filesystem 1K-blocks Used Available Use% Mounted on |
|||
/dev/hda1 7850996 769208 6682976 11% / |
|||
tmpfs 63316 0 63316 0% /lib/init/rw |
|||
udev 10240 100 10140 1% /dev |
|||
tmpfs 63316 0 63316 0% /dev/shm |
|||
/dev/sda1 237648 20 237628 1% /media/iscsi1 |
|||
</pre> |
|||
* /etc/fstab の設定 |
|||
<pre> |
|||
/dev/sda1 /media/iscsi1 gfs _netdev 0 0 |
|||
</pre> |
|||
* 動作確認 |
|||
: samba32a と samba32b で以下を実行します。 |
|||
<pre> |
|||
samba32a:~# echo dame1 > /media/iscsi1/dame.txt |
|||
samba32b:~# cat /media/iscsi1/dame.txt |
|||
dame1 |
|||
samba32b:~# echo dame2 >> /media/iscsi1/dame.txt |
|||
samba32a:~# cat /media/iscsi1/dame.txt |
|||
dame1 |
|||
dame2 |
|||
</pre> |
|||
== ctdb の設定 == |
|||
* /etc/default/ctdb ファイルの設定 |
|||
: 事前に /media/iscsi1/ctdb ディレクトリを作成 |
|||
<pre> |
|||
CTDB_RECOVERY_LOCK="/media/iscsi1/ctdb/lockfile" |
|||
... |
|||
CTDB_PUBLIC_INTERFACE=eth0 |
|||
... |
|||
CTDB_PUBLIC_ADDRESSES=/etc/ctdb/public_addresses |
|||
... |
|||
CTDB_MANAGES_SAMBA=yes |
|||
... |
|||
ulimit -n 10000 |
|||
... |
|||
CTDB_NODES=/etc/ctdb/nodes |
|||
</pre> |
|||
<pre> |
|||
echo 192.168.135.29/24 eth0 > /etc/ctdb/public_addresses |
|||
echo 192.168.135.21 > /etc/ctdb/modes |
|||
echo 192.168.135.22 >> /etc/ctdb/modes |
|||
</pre> |
|||
<pre> |
|||
vi /etc/ctdb/functions |
|||
</pre> |
|||
<pre> |
|||
if [ -x /usr/bin/netcat ]; then |
|||
/usr/bin/netcat -z 127.0.0.1 $p > /dev/null || all_ok=0 |
|||
この行と elif [ -x /bin/netcat ]; then |
|||
この行を /bin/netcat -z 127.0.0.1 $p > /dev/null || all_ok=0 |
|||
追加 elif [ -x /usr/bin/nc ]; then |
|||
(2箇所) /usr/bin/nc -z 127.0.0.1 $p > /dev/null || all_ok=0 |
|||
elif [ -x /usr/bin/netstat ]; then |
|||
</pre> |
|||
<pre> |
|||
samba32b:/etc/ctdb# ctdb status |
|||
Number of nodes:2 |
|||
pnn:0 192.168.135.21 OK |
|||
pnn:1 192.168.135.22 OK (THIS NODE) |
|||
Generation:1850584080 |
|||
Size:2 |
|||
hash:0 lmaster:0 |
|||
hash:1 lmaster:1 |
|||
Recovery mode:NORMAL (0) |
|||
Recovery master:0 |
|||
</pre> |
|||
* Samba の自動起動を停止 |
|||
<pre> |
|||
samba32b:/etc/ctdb# update-rc.d -f samba remove |
|||
Removing any system startup links for /etc/init.d/samba ... |
|||
/etc/rc0.d/K19samba |
|||
/etc/rc1.d/K19samba |
|||
/etc/rc2.d/S20samba |
|||
/etc/rc3.d/S20samba |
|||
/etc/rc4.d/S20samba |
|||
/etc/rc5.d/S20samba |
|||
/etc/rc6.d/K19samba |
|||
samba32b:/etc/ctdb# update-rc.d samba stop 19 0 1 6 . |
|||
Adding system startup for /etc/init.d/samba ... |
|||
/etc/rc0.d/K19samba -> ../init.d/samba |
|||
/etc/rc1.d/K19samba -> ../init.d/samba |
|||
/etc/rc6.d/K19samba -> ../init.d/samba |
|||
</pre> |
|||
== Samba の設定 == |
|||
<pre> |
|||
[global] |
|||
netbios name = samba32 |
|||
clustering = yes |
|||
cluster addresses = 192.168.135.29 |
|||
idmap backend = tdb2 |
|||
private dir = /media/iscsi1/ctdb |
|||
ctdbd socket = /tmp/ctdb.socket |
|||
[share1] |
|||
path = /media/iscsi1/samba/share1 |
|||
writeable = yes |
|||
force create mode = 775 |
|||
force directory mode = 775 |
|||
force group = sambashare |
|||
</pre> |
|||
<pre> |
|||
samba32b:~# mkdir -p /media/iscsi1/samba/share1 |
|||
samba32b:~# chmod 2775 /media/iscsi1/samba/share1 |
|||
</pre> |
|||
<pre> |
|||
samba32b:/etc/samba# /etc/init.d/samba stop |
|||
Stopping Samba daemons: nmbd smbd. |
|||
samba32b:/etc/samba# /etc/init.d/ctdb restart |
|||
Restarting Clustered TDB: ctdb. |
|||
samba32b:/etc/samba# ps ax | grep mbd |
|||
5031 ? SNs 0:00 /usr/sbin/nmbd -D |
|||
5033 ? SNs 0:00 /usr/sbin/smbd -D |
|||
5039 ? SN 0:00 /usr/sbin/smbd -D |
|||
5200 pts/0 S+ 0:00 grep mbd |
|||
</pre> |
|||
<pre> |
|||
samba32a:/etc/samba# smbpasswd -a local |
|||
New SMB password: |
|||
Retype new SMB password: |
|||
Added user local. |
|||
samba32a:/etc/samba# |
|||
</pre> |
|||
== 動作検証 == |
|||
* Windows マシンからクラスタのIPにping |
|||
<pre> |
|||
C:\Documents and Settings\monyo>ping 192.168.135.29 |
|||
Pinging 192.168.135.29 with 32 bytes of data: |
|||
Reply from 192.168.135.29: bytes=32 time=2ms TTL=64 |
|||
Reply from 192.168.135.29: bytes=32 time<1ms TTL=64 |
|||
Reply from 192.168.135.29: bytes=32 time<1ms TTL=64 |
|||
Reply from 192.168.135.29: bytes=32 time<1ms TTL=64 |
|||
Ping statistics for 192.168.135.29: |
|||
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), |
|||
Approximate round trip times in milli-seconds: |
|||
Minimum = 0ms, Maximum = 2ms, Average = 0ms |
|||
</pre> |
|||
* マウント |
|||
<pre> |
|||
C:\Documents and Settings\monyo>net use x: \\192.168.135.29\share1 local /user:local |
|||
コマンドは正常に終了しました。 |
|||
C:\Documents and Settings\monyo>x: |
|||
X:\>dir |
|||
ドライブ X のボリューム ラベルは share1 です |
|||
ボリューム シリアル番号は 0EE5-02C7 です |
|||
X:\ のディレクトリ |
|||
2008/10/07 07:03 <DIR> . |
|||
2008/10/07 07:03 <DIR> .. |
|||
0 個のファイル 0 バイト |
|||
2 個のディレクトリ 243,306,496 バイトの空き領域 |
|||
X:\>echo test > test1.txt |
|||
X:\>dir |
|||
ドライブ X のボリューム ラベルは share1 です |
|||
ボリューム シリアル番号は 0EE5-02C7 です |
|||
X:\ のディレクトリ |
|||
2008/10/07 07:05 <DIR> . |
|||
2008/10/07 07:03 <DIR> .. |
|||
2008/10/07 07:05 7 test1.txt |
|||
1 個のファイル 7 バイト |
|||
2 個のディレクトリ 243,302,400 バイトの空き領域 |
|||
</pre> |
|||
<pre> |
|||
samba32a:/etc/samba# cat /media/iscsi1/samba/share1/test1.txt |
|||
test |
|||
samba32b:~# cat /media/iscsi1/samba/share1/test1.txt |
|||
test |
|||
</pre> |
|||
<pre> |
|||
C:\Documents and Settings\monyo>x: |
|||
X:\>mkdir test |
|||
X:\>cd test |
|||
X:\test>c: |
|||
C:\Documents and Settings\monyo>cd \windows\system32 |
|||
C:\WINDOWS\system32>copy *.* x: |
|||
... |
|||
</pre> |
|||
コピー中に |
|||
<pre> |
|||
samba32a:/etc/samba# ctdb disable |
|||
</pre> |
|||
して、コピーが継続されるか。 |
|||
なお、実際にどっちのマシンに接続されているかは |
|||
<pre> |
|||
samba32a:/etc/samba# smbstatus |
|||
Samba version 3.2.3 |
|||
PID Username Group Machine |
|||
------------------------------------------------------------------- |
|||
12817 local local medaka (::ffff:192.168.135.1) |
|||
Service pid machine Connected at |
|||
------------------------------------------------------- |
|||
share1 12817 medaka Tue Oct 7 07:09:42 2008 |
|||
No locked files |
|||
</pre> |
|||
とかで確認できる。片方を disable にしたときの状態。 |
|||
<pre> |
|||
samba32b:~# ctdb status |
|||
Number of nodes:2 |
|||
pnn:0 192.168.135.21 DISABLED |
|||
pnn:1 192.168.135.22 OK (THIS NODE) |
|||
</pre> |
|||
再度 |
|||
<pre> |
|||
samba32a:/etc/samba# ctdb enable |
|||
</pre> |
|||
して、どうなるか。 |
|||
今度は、 |
|||
<pre> |
|||
samba32a:/etc/samba# ctdb shutdown |
|||
</pre> |
|||
してどうなるか。 |
|||
<pre> |
|||
samba32b:~# smbstatus |
|||
Samba version 3.2.3 |
|||
PID Username Group Machine |
|||
------------------------------------------------------------------- |
|||
13406 local local medaka (::ffff:192.168.135.1) |
|||
Service pid machine Connected at |
|||
------------------------------------------------------- |
|||
share1 13406 medaka Tue Oct 7 07:11:54 2008 |
|||
Locked files: |
|||
Pid Uid DenyMode Access R/W Oplock Share |
|||
Path Name Time |
|||
-------------------------------------------------------------------------------- |
|||
------------------ |
|||
13406 501 DENY_ALL 0x30196 WRONLY EXCLUSIVE+BATCH /medi |
|||
a/iscsi1/samba/share1 test/avicap.dll Tue Oct 7 07:11:58 2008 |
|||
samba32b:~# ctdb status |
|||
Number of nodes:2 |
|||
pnn:0 192.168.135.21 DISCONNECTED|UNHEALTHY |
|||
pnn:1 192.168.135.22 OK (THIS NODE) |
|||
Generation:238180384 |
|||
Size:1 |
|||
hash:0 lmaster:1 |
|||
Recovery mode:NORMAL (0) |
|||
Recovery master:1 |
|||
</pre> |
|||
イメージとしては、[http://samba.org/~tridge/ctdb_movies/ CTDB Movies] っぽく、コピーが継続するはず。 |
|||
== 参考にしたページ == |
== 参考にしたページ == |
||
144行目: | 858行目: | ||
* [http://www.metainfo.jp/memo/?cat=17 open-iscsiとiscsi-targetでCHAP認証を導入する] |
* [http://www.metainfo.jp/memo/?cat=17 open-iscsiとiscsi-targetでCHAP認証を導入する] |
||
* [http://www.metainfo.jp/memo/?cat=35&paged=2 gfsとiscsiを使ったファイル共有をやってみた(構築編)] |
* [http://www.metainfo.jp/memo/?cat=35&paged=2 gfsとiscsiを使ったファイル共有をやってみた(構築編)] |
||
* [http://kenknown.blog42.fc2.com/blog-entry-73.html 【Linux小技】 GNU parted と RedHat GFSを使ったファイルシステム構築] |
|||
* [http://cafelounge.net/dev/?Cluster%2FDRBD%2F8 DRBD+GFS2 - ネットワークでミラーリング + 共有ディスク] |
|||
* [http://samba.org/~tridge/ctdb_movies/ CTDB Mobies] |
|||
* [http://archives.free.net.ph/message/20080709.175452.0147344e.ja.html aa] |
2008年10月7日 (火) 00:07時点における最新版
Samba 3.2 系列の新機能の一つにクラスタ機能があります。
以下、Debian 開発版(コードネーム lenny)を用いた、クラスタ機能の検証手順を解説します。
なお、lenny を用いた理由は、検証に必要なパッケージがすべてデフォルトで用意されているためです。
検証環境は、メモリ 128MB の VMware 仮想マシンです。
iscsi ターゲットの作成
クラスタ機能を利用するには、共有ディスクが必要です。
Samba のクラスタ機能は、共有ディスクの実装に依存しませんが、比較的手軽にできる共有ディスクとして、ここでは iSCSI のターゲットを動作させることにします。
以下、 base-system のインストールのみを行った lenny を前提として手順を紹介します。
/etc/apt/sources.list は
iscsi1:~# cat /etc/apt/sources.list deb http://ftp.jp.debian.org/debian lenny main deb http://security.debian.org/ lenny/updates main
のように設定しています。
- telnetd のインストール
- リモートマシンから設定を行うため、「telnetd」をインストールしました。なお ssh にしなかったのは、インストールするパッケージを最低限にしたかったためです。
iscsi1:~# apt-get install telnetd Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: openbsd-inetd The following NEW packages will be installed: openbsd-inetd telnetd 0 upgraded, 2 newly installed, 0 to remove and 101 not upgraded. Need to get 0B/75.5kB of archives. After this operation, 238kB of additional disk space will be used. Do you want to continue [Y/n]? Selecting previously deselected package openbsd-inetd. (Reading database ... 11668 files and directories currently installed.) Unpacking openbsd-inetd (from .../openbsd-inetd_0.20080125-1_i386.deb) ... Selecting previously deselected package telnetd. Unpacking telnetd (from .../telnetd_0.17-36_i386.deb) ... Processing triggers for man-db ... Setting up openbsd-inetd (0.20080125-1) ... Stopping internet superserver: inetd. Not starting internet superserver: no services enabled. Setting up telnetd (0.17-36) ... Adding user telnetd to group utmp
- 作業用ユーザの作成
- telnetでログインするために、「local」というユーザーを作成しました。
iscsi1:~# useradd -u 501 -m local iscsi1:~# passwd local Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully
- ホスト名の設定
- ここではホスト名を「iscsi1」に設定しました。
echo iscsi1 > /etc/hostname
- IP アドレスの設定
- 検証だけなら DHCP でも動作しますが、ここでは一応 192.168.135.20 というアドレスを付与しました。
# The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 #iface eth0 inet dhcp iface eth0 inet static address 192.168.135.20 netmask 255.255.255.0 network 192.168.135.0 broadcast 192.168.135.255 gateway 192.168.135.2
- 再起動
- IP アドレスの設定などを反映させるため、一度再起動します。
- 実際には、再起動しなくても設定の反映はできますが、気持ち悪いので……
- パッケージのインストール
- iscsitarget-modules-xxx および iscsitarget パッケージをインストールします。
iscsi1:~# apt-get install iscsitarget (エラーで終了しますが、インストールはできています) iscsi1:~# apt-get install iscsitarget-modules-2.6.26-1-686 Reading package lists... Done Building dependency tree Reading state information... Done iscsitarget is already the newest version. The following extra packages will be installed: linux-image-2.6.26-1-686 Suggested packages: linux-doc-2.6.26 The following NEW packages will be installed: iscsitarget-modules-2.6.26-1-686 linux-image-2.6.26-1-686 0 upgraded, 2 newly installed, 0 to remove and 101 not upgraded. Need to get 20.1MB of archives. After this operation, 57.4MB of additional disk space will be used. Do you want to continue [Y/n]? Get:1 http://ftp.jp.debian.org lenny/main linux-image-2.6.26-1-686 2.6.26-5 [20. 1MB] Get:2 http://ftp.jp.debian.org lenny/main iscsitarget-modules-2.6.26-1-686 2.6.2 6+0.4.16+svn162-4 [37.5kB] Fetched 20.1MB in 16s (1250kB/s) Preconfiguring packages ... Selecting previously deselected package linux-image-2.6.26-1-686. (Reading database ... 11705 files and directories currently installed.) Unpacking linux-image-2.6.26-1-686 (from .../linux-image-2.6.26-1-686_2.6.26-5_i 386.deb) ... Done. Selecting previously deselected package iscsitarget-modules-2.6.26-1-686. Unpacking iscsitarget-modules-2.6.26-1-686 (from .../iscsitarget-modules-2.6.26- 1-686_2.6.26+0.4.16+svn162-4_i386.deb) ... Setting up linux-image-2.6.26-1-686 (2.6.26-5) ... Running depmod. Running mkinitramfs-kpkg. Running postinst hook script update-grub. Searching for GRUB installation directory ... found: /boot/grub Searching for default file ... found: /boot/grub/default Testing for an existing GRUB menu.lst file ... found: /boot/grub/menu.lst Searching for splash image ... none found, skipping ... Found kernel: /boot/vmlinuz-2.6.26-1-686 Found kernel: /boot/vmlinuz-2.6.24-1-686 Updating /boot/grub/menu.lst ... done Setting up iscsitarget-modules-2.6.26-1-686 (2.6.26+0.4.16+svn162-4) ... iscsi1:~#
- 再起動の実行
- ここで、ホスト名の変更の反映、カーネルモジュールの組み込みなどを行うために、一度再起動を実行します。
- ループバックデバイスの作成
- 以下のようにして、イメージファイルを作成の上、ループバックデバイスを作成します。なお、再起動するたびにループバックデバイスの構成を行う必要があります。
- ※うまく自動化する方法あるんでしょうか?
iscsi1:~# dd if=/dev/zero of=/var/lib/iscsi1.img bs=1M count=512 512+0 records in 512+0 records out 536870912 bytes (537 MB) copied, 3.21413 s, 167 MB/s iscsi1:~# losetup /dev/loop0 /var/lib/iscsi1.img iscsi1:~# losetup -a /dev/loop0: [0301]:98270 (/var/lib/iscsi1.img) /dev/loop/0: [0301]:98270 (/var/lib/iscsi1.img)
- これで、/dev/loop0 に 512MB の仮想パーティションが存在することになりました。実際に存在するパーティションを用いる場合、この作業は省略できます。
- /etc/ietd.conf を編集します
- ここでは、必要最低限の設定として、認証なしで、今作成したループバックデバイスを公開する設定を行います。各パラメータの詳細については、ietd.conf(5) などを参照してください。
Target iqn.2008-09.com.monyo:iscsi1 Lun 0 Path=/dev/loop0,Type=fileio MaxConnections 1
- iscsitarget の再起動
- iscsitarget サービスの再起動を行い、設定を反映します。
iscsi1:~# /etc/init.d/iscsitarget stop Removing iSCSI enterprise target devices: succeeded. Stopping iSCSI enterprise target service: succeeded. Removing iSCSI enterprise target modules: succeeded. iscsi1:~# /etc/init.d/iscsitarget start Starting iSCSI enterprise target service: succeeded.
Samba サーバ1の構築
引き続き、Samba サーバを構築します。
同じく、base-system のインストールのみを行った lenny から構築する方法を紹介します。
- telnetd のインストール
- 作業用ユーザの作成
- ホスト名の設定
- ここではホスト名を「samba32a」に設定しました。
echo samba32a > /etc/hostname
- IP アドレスの設定
- 検証だけなら DHCP でも動作しますが、ここでは一応 192.168.135.21 というアドレスを付与しました。
- 再起動
- IP アドレスの設定などを反映させるため、一度再起動します。
- 実際には、再起動しなくても設定の反映はできますが、気持ち悪いので……
- iSCSI / gfs / Samba 関連パッケージのインストール
- 以下、順次パッケージのインストールを行っていきます。
- クラスタファイルシステムとしては、gfs を用いました。gfs は依存パッケージが多いので、できれば ocfs2 でやりたかったんですが、ocfs2 自体の構築はできたものの、ctdb が「」というエラーでファイルのロックに失敗してしまうため、あきらめました。
samba32a:~# apt-get install open-iscsi Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: open-iscsi 0 upgraded, 1 newly installed, 0 to remove and 101 not upgraded. Need to get 540kB of archives. After this operation, 1315kB of additional disk space will be used. Get:1 http://ftp.jp.debian.org lenny/main open-iscsi 2.0.869.2-2.1 [540kB] Fetched 540kB in 1s (279kB/s) Selecting previously deselected package open-iscsi. (Reading database ... 11687 files and directories currently installed.) Unpacking open-iscsi (from .../open-iscsi_2.0.869.2-2.1_i386.deb) ... Processing triggers for man-db ... Setting up open-iscsi (2.0.869.2-2.1) ... Starting iSCSI initiator service: iscsid. Setting up iSCSI targets: iscsiadm: No records found! . Mounting network filesystems:. samba32a:~# apt-get install gfs-tools cman clvm Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: binutils bochsbios debootstrap dpkg file gfs2-tools libasound2 libbrlapi0.5 libcman2 libdb4.5 libdevmapper1.02.1 libdirectfb-1.0-0 libdlm2 libgnutls26 libicu38 libmagic1 libnet-snmp-perl libnet-telnet-perl libnspr4-0d libnss3-1d libopenais2 libpcap0.8 libsdl1.2debian libsdl1.2debian-alsa libsqlite3-0 libsvga1 libsysfs2 libts-0.0-0 libvdemgmt0 libvdeplug2 libvirt0 libx86-1 libxenstore3.0 libxml2 linux-image-2.6.26-1-486 lvm2 lzma mime-support openais openbios-sparc openhackware perl perl-base perl-doc perl-modules proll psmisc python python-minimal python2.5 python2.5-minimal qemu redhat-cluster-modules-2.6.26-1-486 sgml-base sharutils svgalibg1 vde2 vgabios xml-core Suggested packages: binutils-doc libasound2-plugins gnutls-bin libcrypt-des-perl libdigest-hmac-perl libdigest-sha1-perl libio-socket-inet6-perl linux-doc-2.6.26 dmsetup libterm-readline-gnu-perl libterm-readline-perl-perl groff python-doc python-tk python-profiler python2.5-doc binfmt-support sudo samba sgml-base-doc mailx vde2-cryptcab kvm debhelper Recommended packages: redhat-cluster-modules The following NEW packages will be installed: binutils bochsbios clvm cman debootstrap file gfs-tools gfs2-tools libasound2 libbrlapi0.5 libcman2 libdb4.5 libdirectfb-1.0-0 libdlm2 libicu38 libmagic1 libnet-snmp-perl libnet-telnet-perl libnspr4-0d libnss3-1d libopenais2 libpcap0.8 libsdl1.2debian libsdl1.2debian-alsa libsqlite3-0 libsvga1 libsysfs2 libts-0.0-0 libvdemgmt0 libvdeplug2 libvirt0 libx86-1 libxenstore3.0 libxml2 linux-image-2.6.26-1-486 lzma mime-support openais openbios-sparc openhackware perl perl-doc perl-modules proll psmisc python python-minimal python2.5 python2.5-minimal qemu redhat-cluster-modules-2.6.26-1-486 sgml-base sharutils svgalibg1 vde2 vgabios xml-core The following packages will be upgraded: dpkg libdevmapper1.02.1 libgnutls26 lvm2 perl-base 5 upgraded, 57 newly installed, 0 to remove and 96 not upgraded. Need to get 61.1MB/72.7MB of archives. After this operation, 196MB of additional disk space will be used. Do you want to continue [Y/n]? Get:1 http://ftp.jp.debian.org lenny/main perl-modules 5.10.0-14 [3192kB] Get:2 http://ftp.jp.debian.org lenny/main perl 5.10.0-14 [4547kB] (省略) Setting up sgml-base (1.26) ... Setting up xml-core (0.11) ... samba32a:~#apt-get install samba ctdb Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: ethtool iproute libatm1 libcups2 libkeyutils1 libkrb53 libpopt0 libtalloc1 libwbclient0 lsof samba-common tdb-tools ucf Suggested packages: iproute-doc cups-common krb5-doc krb5-user smbldap-tools The following NEW packages will be installed: ctdb ethtool iproute libatm1 libcups2 libkeyutils1 libkrb53 libtalloc1 libwbclient0 lsof samba samba-common tdb-tools ucf The following packages will be upgraded: libpopt0 1 upgraded, 14 newly installed, 0 to remove and 95 not upgraded. Need to get 9698kB of archives. After this operation, 25.8MB of additional disk space will be used. Do you want to continue [Y/n]? Get:1 http://ftp.jp.debian.org lenny/main iproute 20080725-2 [363kB] Get:2 http://ftp.jp.debian.org lenny/main libpopt0 1.14-4 [45.9kB] (省略)
- Samba パッケージのインストール時の質問には、以下のように答えます。
- * ワークグループ名: SAMBA32GFS
- * WINS の設定を DHCP から取得:しない
- 再起動
- これで、2.6.26-1-486 のカーネルで起動します。
- iSCSI イニシエータの設定:ディスクの認識
- 以下のようにして、ディスクの認識を行います。
samba32a:~# iscsiadm -m node --targetname iqn.2008-09.com.monyo:iscsi1 -p 192.16 8.135.20 --op new New iSCSI node [tcp:[hw=default,ip=,net_if=default,iscsi_if=default] 192.168.135 .20,3260,-1 iqn.2008-09.com.monyo:iscsi1] added samba32a:~# iscsiadm -m node --targetname iqn.2008-09.com.monyo:iscsi1 -p 192.16 8.135.20 -l Logging in to [iface: default, target: iqn.2008-09.com.monyo:iscsi1, portal: 192 .168.135.20,3260] Login to [iface: default, target: iqn.2008-09.com.monyo:iscsi1, portal: 192.168. 135.20,3260]: successful samba32a:~# fdisk -l Disk /dev/hda: 8589 MB, 8589934592 bytes 255 heads, 63 sectors/track, 1044 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x0001c09b Device Boot Start End Blocks Id System /dev/hda1 * 1 993 7976241 83 Linux /dev/hda2 994 1044 409657+ 5 Extended /dev/hda5 994 1044 409626 82 Linux swap / Solaris Disk /dev/sda: 536 MB, 536870912 bytes 17 heads, 61 sectors/track, 1011 cylinders Units = cylinders of 1037 * 512 = 530944 bytes Disk identifier: 0x00000000 Disk /dev/sda doesn't contain a valid partition table
- iSCSI イニシエータの設定:ディスクの自動認識
- 以下のようにして、再起動時に iSCSI ターゲットおよびディスクの認識が自動で行われるようにします。
samba32a:~# vi /etc/iscsi/nodes/iqn.2008-09.com.monyo\:iscsi1/192.168.135.20\,3260
- 以下の項目を manual から automatic に変更します。
- * node.startup
- * node.conn[0].startup
- gfs の設定:/etc/hosts の設定
- 自身の名前解決が可能なように設定を行います。
127.0.0.1 localhost 192.168.135.21 samba32a.local samba32a # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts
- gfs の設定:/etc/cluster/cluster.conf の設定
- /etc/cluster ディレクトリを作成の上、/etc/cluster/cluster.conf ファイルを以下のように作成します。
<cluster name="cluster1" config_version="3"> <cman two_node="1" expected_votes="1"/> <clusternodes> <clusternode name="samba32a" votes="1" nodeid="1"> <fence> <method name="single"> <device name="manual" ipaddr="192.168.135.21"/> </method> </fence> </clusternode> <clusternode name="samba32b" votes="1" nodeid="2"> <fence> <method name="single"> <device name="manual" ipaddr="192.168.135.22"/> </method> </fence> </clusternode> </clusternodes> <fencedevices> <fencedevice name="manual" agent="fence_manual"/> </fencedevices> </cluster>
- パーティションの作成
- parted をインストールの上、パーティションを作成します。
samba32a:~# apt-get install parted Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: libparted1.8-10 Suggested packages: libparted1.8-dev libparted1.8-i18n parted-doc The following NEW packages will be installed: libparted1.8-10 parted 0 upgraded, 2 newly installed, 0 to remove and 95 not upgraded. Need to get 261kB of archives. After this operation, 569kB of additional disk space will be used. Do you want to continue [Y/n]? Get:1 http://ftp.jp.debian.org lenny/main libparted1.8-10 1.8.8.git.2008.03.24-9 [197kB] Get:2 http://ftp.jp.debian.org lenny/main parted 1.8.8.git.2008.03.24-9 [64.0kB] Fetched 261kB in 1s (199kB/s) Selecting previously deselected package libparted1.8-10. (Reading database ... 19195 files and directories currently installed.) Unpacking libparted1.8-10 (from .../libparted1.8-10_1.8.8.git.2008.03.24-9_i386. deb) ... Selecting previously deselected package parted. Unpacking parted (from .../parted_1.8.8.git.2008.03.24-9_i386.deb) ... Processing triggers for man-db ... Setting up libparted1.8-10 (1.8.8.git.2008.03.24-9) ... Setting up parted (1.8.8.git.2008.03.24-9) ... samba32a:~# samba32a:~# parted /dev/sda GNU Parted 1.8.8 Using /dev/sda Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) mklabel Warning: The existing disk label on /dev/sda will be destroyed and all data on this disk will be lost. Do you want to continue? Yes/No? y New disk label type? [gpt]? (parted) mkpart primary File system type? [ext2]? ext3 Start? 0 End? 512MB (parted) p Model: IET VIRTUAL-DISK (scsi) Disk /dev/sda: 537MB Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name Flags 1 17.4kB 512MB 512MB primary (parted) q Information: You may need to update /etc/fstab. samba32a:~#
- gfs のフォーマット
- 以下のようにして、フォーマットを行います。
samba32a:~# gfs_mkfs -p lock_dlm -t cluster1:gfs -j 2 /dev/sda1 This will destroy any data on /dev/sda1. Are you sure you want to proceed? [y/n] y Device: /dev/sda1 Blocksize: 4096 Filesystem Size: 59412 Journals: 2 Resource Groups: 8 Locking Protocol: lock_dlm Lock Table: cluster1:gfs Syncing... All Done samba32a:~#
Samba サーバ2の構築
Sambaサーバ1と同様にして構築します。
同じく、base-system のインストールのみを行った lenny から構築する方法を紹介します。
- telnetd のインストール
- 作業用ユーザの作成
- ホスト名の設定
- ここではホスト名を「samba32b」に設定しました。
echo samba32b > /etc/hostname
- IP アドレスの設定
- 検証だけなら DHCP でも動作しますが、ここでは一応 192.168.135.22 というアドレスを付与しました。
- 再起動
- IP アドレスの設定などを反映させるため、一度再起動します。
- 実際には、再起動しなくても設定の反映はできますが、気持ち悪いので……
- iSCSI / gfs / Samba 関連パッケージのインストール
- 再起動
- これで、2.6.26-1-486 のカーネルで起動します。
- iSCSI イニシエータの設定:ディスクの認識
クラスタの起動
- cman の起動
- samba32a と samba32b の両方で以下を実行します。
samba32a:~# /etc/init.d/cman start Starting cluster manager: Loading kernel modules: done Mounting config filesystem: done Starting cluster configuration system: done Joining cluster:cman_tool: Node is already active done Starting daemons: groupd fenced dlm_controld gfs_controld Joining fence domain: done ← 片方のマシンしか起動していないと、ここで無限に待たされます。 Starting Quorum Disk daemon: done
samba32a:~# cman_tool nodes Node Sts Inc Joined Name 1 M 180 2008-10-07 00:39:05 samba32a 2 M 192 2008-10-07 00:44:27 samba32b samba32a:~# cman_tool services type level name id state fence 0 default 00010001 none [1 2] dlm 1 gfs 00020002 none [1 2] gfs 2 gfs 00010002 none [1 2]
- 起動順の変更
samba32a:~# update-rc.d -f open-iscsi remove Removing any system startup links for /etc/init.d/open-iscsi ... /etc/rc0.d/K81open-iscsi /etc/rc6.d/K81open-iscsi /etc/rcS.d/S45open-iscsi samba32a:~# update-rc.d open-iscsi start 66 S . stop 81 0 6 . Adding system startup for /etc/init.d/open-iscsi ... /etc/rc0.d/K81open-iscsi -> ../init.d/open-iscsi /etc/rc6.d/K81open-iscsi -> ../init.d/open-iscsi /etc/rcS.d/S66open-iscsi -> ../init.d/open-iscsi
- ファイルシステムのマウント
- samba32a と samba32b の両方で以下を実行します。
samba32a:~# mkdir /media/iscsi1 samba32a:~# mount /dev/sda1 /media/iscsi1 samba32a:~# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/hda1 7850996 769208 6682976 11% / tmpfs 63316 0 63316 0% /lib/init/rw udev 10240 100 10140 1% /dev tmpfs 63316 0 63316 0% /dev/shm /dev/sda1 237648 20 237628 1% /media/iscsi1
- /etc/fstab の設定
/dev/sda1 /media/iscsi1 gfs _netdev 0 0
- 動作確認
- samba32a と samba32b で以下を実行します。
samba32a:~# echo dame1 > /media/iscsi1/dame.txt samba32b:~# cat /media/iscsi1/dame.txt dame1 samba32b:~# echo dame2 >> /media/iscsi1/dame.txt samba32a:~# cat /media/iscsi1/dame.txt dame1 dame2
ctdb の設定
- /etc/default/ctdb ファイルの設定
- 事前に /media/iscsi1/ctdb ディレクトリを作成
CTDB_RECOVERY_LOCK="/media/iscsi1/ctdb/lockfile" ... CTDB_PUBLIC_INTERFACE=eth0 ... CTDB_PUBLIC_ADDRESSES=/etc/ctdb/public_addresses ... CTDB_MANAGES_SAMBA=yes ... ulimit -n 10000 ... CTDB_NODES=/etc/ctdb/nodes
echo 192.168.135.29/24 eth0 > /etc/ctdb/public_addresses echo 192.168.135.21 > /etc/ctdb/modes echo 192.168.135.22 >> /etc/ctdb/modes
vi /etc/ctdb/functions
if [ -x /usr/bin/netcat ]; then /usr/bin/netcat -z 127.0.0.1 $p > /dev/null || all_ok=0 この行と elif [ -x /bin/netcat ]; then この行を /bin/netcat -z 127.0.0.1 $p > /dev/null || all_ok=0 追加 elif [ -x /usr/bin/nc ]; then (2箇所) /usr/bin/nc -z 127.0.0.1 $p > /dev/null || all_ok=0 elif [ -x /usr/bin/netstat ]; then
samba32b:/etc/ctdb# ctdb status Number of nodes:2 pnn:0 192.168.135.21 OK pnn:1 192.168.135.22 OK (THIS NODE) Generation:1850584080 Size:2 hash:0 lmaster:0 hash:1 lmaster:1 Recovery mode:NORMAL (0) Recovery master:0
- Samba の自動起動を停止
samba32b:/etc/ctdb# update-rc.d -f samba remove Removing any system startup links for /etc/init.d/samba ... /etc/rc0.d/K19samba /etc/rc1.d/K19samba /etc/rc2.d/S20samba /etc/rc3.d/S20samba /etc/rc4.d/S20samba /etc/rc5.d/S20samba /etc/rc6.d/K19samba samba32b:/etc/ctdb# update-rc.d samba stop 19 0 1 6 . Adding system startup for /etc/init.d/samba ... /etc/rc0.d/K19samba -> ../init.d/samba /etc/rc1.d/K19samba -> ../init.d/samba /etc/rc6.d/K19samba -> ../init.d/samba
Samba の設定
[global] netbios name = samba32 clustering = yes cluster addresses = 192.168.135.29 idmap backend = tdb2 private dir = /media/iscsi1/ctdb ctdbd socket = /tmp/ctdb.socket [share1] path = /media/iscsi1/samba/share1 writeable = yes force create mode = 775 force directory mode = 775 force group = sambashare
samba32b:~# mkdir -p /media/iscsi1/samba/share1 samba32b:~# chmod 2775 /media/iscsi1/samba/share1
samba32b:/etc/samba# /etc/init.d/samba stop Stopping Samba daemons: nmbd smbd. samba32b:/etc/samba# /etc/init.d/ctdb restart Restarting Clustered TDB: ctdb. samba32b:/etc/samba# ps ax | grep mbd 5031 ? SNs 0:00 /usr/sbin/nmbd -D 5033 ? SNs 0:00 /usr/sbin/smbd -D 5039 ? SN 0:00 /usr/sbin/smbd -D 5200 pts/0 S+ 0:00 grep mbd
samba32a:/etc/samba# smbpasswd -a local New SMB password: Retype new SMB password: Added user local. samba32a:/etc/samba#
動作検証
- Windows マシンからクラスタのIPにping
C:\Documents and Settings\monyo>ping 192.168.135.29 Pinging 192.168.135.29 with 32 bytes of data: Reply from 192.168.135.29: bytes=32 time=2ms TTL=64 Reply from 192.168.135.29: bytes=32 time<1ms TTL=64 Reply from 192.168.135.29: bytes=32 time<1ms TTL=64 Reply from 192.168.135.29: bytes=32 time<1ms TTL=64 Ping statistics for 192.168.135.29: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 2ms, Average = 0ms
- マウント
C:\Documents and Settings\monyo>net use x: \\192.168.135.29\share1 local /user:local コマンドは正常に終了しました。 C:\Documents and Settings\monyo>x: X:\>dir ドライブ X のボリューム ラベルは share1 です ボリューム シリアル番号は 0EE5-02C7 です X:\ のディレクトリ 2008/10/07 07:03 <DIR> . 2008/10/07 07:03 <DIR> .. 0 個のファイル 0 バイト 2 個のディレクトリ 243,306,496 バイトの空き領域 X:\>echo test > test1.txt X:\>dir ドライブ X のボリューム ラベルは share1 です ボリューム シリアル番号は 0EE5-02C7 です X:\ のディレクトリ 2008/10/07 07:05 <DIR> . 2008/10/07 07:03 <DIR> .. 2008/10/07 07:05 7 test1.txt 1 個のファイル 7 バイト 2 個のディレクトリ 243,302,400 バイトの空き領域
samba32a:/etc/samba# cat /media/iscsi1/samba/share1/test1.txt test samba32b:~# cat /media/iscsi1/samba/share1/test1.txt test
C:\Documents and Settings\monyo>x: X:\>mkdir test X:\>cd test X:\test>c: C:\Documents and Settings\monyo>cd \windows\system32 C:\WINDOWS\system32>copy *.* x: ...
コピー中に
samba32a:/etc/samba# ctdb disable
して、コピーが継続されるか。 なお、実際にどっちのマシンに接続されているかは
samba32a:/etc/samba# smbstatus Samba version 3.2.3 PID Username Group Machine ------------------------------------------------------------------- 12817 local local medaka (::ffff:192.168.135.1) Service pid machine Connected at ------------------------------------------------------- share1 12817 medaka Tue Oct 7 07:09:42 2008 No locked files
とかで確認できる。片方を disable にしたときの状態。
samba32b:~# ctdb status Number of nodes:2 pnn:0 192.168.135.21 DISABLED pnn:1 192.168.135.22 OK (THIS NODE)
再度
samba32a:/etc/samba# ctdb enable
して、どうなるか。
今度は、
samba32a:/etc/samba# ctdb shutdown
してどうなるか。
samba32b:~# smbstatus Samba version 3.2.3 PID Username Group Machine ------------------------------------------------------------------- 13406 local local medaka (::ffff:192.168.135.1) Service pid machine Connected at ------------------------------------------------------- share1 13406 medaka Tue Oct 7 07:11:54 2008 Locked files: Pid Uid DenyMode Access R/W Oplock Share Path Name Time -------------------------------------------------------------------------------- ------------------ 13406 501 DENY_ALL 0x30196 WRONLY EXCLUSIVE+BATCH /medi a/iscsi1/samba/share1 test/avicap.dll Tue Oct 7 07:11:58 2008 samba32b:~# ctdb status Number of nodes:2 pnn:0 192.168.135.21 DISCONNECTED|UNHEALTHY pnn:1 192.168.135.22 OK (THIS NODE) Generation:238180384 Size:1 hash:0 lmaster:1 Recovery mode:NORMAL (0) Recovery master:1
イメージとしては、CTDB Movies っぽく、コピーが継続するはず。