LVMおよびATAoEテクノロジーを使用して無制限に拡張できる分散ディスクストレージの編成

挑戦する



ディスクが小さく、インターネットが大きい場合、プライベートFTPサーバーの所有者は次の問題に直面しました。

VideoまたはSoftパパが各ハードドライブ上に作成され、新しいハードドライブを追加するとVideo2、Soft2などがパパになることが判明しました。

ハードドライブをより大きなドライブに変更するタスクは、データをどこかに転送する必要があるという事実につながりました。これはすべて、非自明で大きなダウンタイムで発生しました。

2005年に開発したシステムにより、3テラバイトのスケーラブルで拡張可能なオンラインの信頼できる高速アレイを組み立てることができ、ディスクまたはサーバー全体をディスクに追加できました。

ソリューション全体の価格は、ドライブ自体のコストの110%でした。 基本的に無料で、オーバーヘッドはほとんどありません。



ストレージのデバイス図の例を次に示します。









実装



これは、スーパーバイザーとノードが存在するという考え方です。 スーパーバイザーは、クライアントがアクセスするパブリックサーバーであり、ノードへの外部および内部のいくつかのギガビットボンディングインターフェイスを備えています。 スーパーバイザーは、ATAoE経由でvbladeを使用してエクスポートされたアレイまたは個々のディスクを取得し、それらの上にLVMを作成し、FTP経由でこのセクションにアクセスできるようにします。 スーパーバイザーは、ノード用のディスクレスダウンロードサーバーでもあり、ノードのファイルシステム全体を含み、ロード後にNFSを介して通信します。 ノードは純粋なディスクであり、PXEを介して起動し、etherpopulateが起動し、すべてのディスクがエクスポートされます。



1.リモートノードの読み込みの設定





ノードデバイス

ftp # ls /diskless/

bzImage node pxelinux.0 pxelinux.cfg








カーネル、ノードディレクトリ-rootfs、pxe configs

ftp # ls /diskless/node/

bin boot dev etc lib mnt proc root sbin sys tmp usr var

ftp # chroot /diskless/node/

ftp / # which vblade

/usr/sbin/vblade

ftp / # vblade

usage: vblade [ -m mac[,mac...] ] shelf slot netif filename

ftp / #








これはすべてノードで利用可能です

ftp node # cat /diskless/pxelinux.cfg/default

DEFAULT /bzImage

APPEND ip=dhcp root=/dev/nfs nfsroot=172.18.0.193:/diskless/node idebus=66






指定されたpxe、nfsrootの構成



dhcpd config、実行することを忘れないでください。

ftp etc # more dhcp/dhcpd.conf

option domain-name "domain.com";

default-lease-time 600;

max-lease-time 7200;

ddns-update-style none;



option space PXE;

option PXE.mtftp-ip code 1 = ip-address;

option PXE.mtftp-cport code 2 = unsigned integer 16;

option PXE.mtftp-sport code 3 = unsigned integer 16;

option PXE.mtftp-tmout code 4 = unsigned integer 8;

option PXE.mtftp-delay code 5 = unsigned integer 8;

option PXE.discovery-control code 6 = unsigned integer 8;

option PXE.discovery-mcast-addr code 7 = ip-address;



subnet 172.16.0.0 netmask 255.255.0.0 {

}



subnet 172.18.0.192 netmask 255.255.255.192 {

class "pxeclients" {

match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";

option vendor-class-identifier "PXEClient";

vendor-option-space PXE;

option PXE.mtftp-ip 0.0.0.0;

filename "pxelinux.0";

next-server 172.18.0.193;

}



host node-1 {

hardware ethernet 00:13:d4:68:b2:7b;

fixed-address 172.18.0.194;

}

host node-2 {

hardware ethernet 00:11:2f:45:e9:fd;

fixed-address 172.18.0.195;

}

host node-3 {

hardware ethernet 00:07:E9:2A:A9:AC;

fixed-address 172.18.0.196;

}

}








tftpdの構成

ftp etc # more /etc/conf.d/in.tftpd

# /etc/init.d/in.tftpd



# Path to server files from

INTFTPD_PATH="/diskless"



INTFTPD_USER="nobody"

# For more options, see tftpd(8)

INTFTPD_OPTS="-u ${INTFTPD_USER} -l -vvvvvv -p -c -s ${INTFTPD_PATH}"








tftpdは実行されていますか?

ftp etc # ps -ax |grep tft

Warning: bad ps syntax, perhaps a bogus '-'? See procps.sf.net/faq.html

5694 ? Ss 0:00 /usr/sbin/in.tftpd -l -u nobody -l -vvvvvv -p -c -s /diskless

31418 pts/0 R+ 0:00 grep tft








nfsの設定、実行することを忘れないでください。

ftp etc # more exports

/diskless/node 172.18.0.192/255.255.255.192(rw,sync,no_root_squash)








リモートブートのセットアップが完了し、すべてのノードが登録されました。



2.アレイのアセンブリを自動化するためのソフトウェア部分





ノードで実行されるソフトウェアは、md * raidアレイを作成し、それらをスーパーバイザーにエクスポートします。

ftp# chroot /diskless/node

ftp etc # more /usr/sbin/etherpopulate

#!/usr/bin/perl



my $action = shift();



#system('insmod /lib/modules/vb-2.6.16-rc1.ko')

# if ( -f '/lib/modules/vb-2.6.16-rc1.ko');



# Get information on node_id's of ifaces

my @ifconfig = `ifconfig`;

my $int;

my %iface;

foreach my $line (@ifconfig) {

if ($line =~ /^(\S+)/) {

$int = $1;

}

if ($line =~ /inet addr:(\d+\.\d+\.\d+\.)(\d+)/ && $1 ne '127.0.0.' && $int) {

$iface{$int} = $2;

$int = "";

}

}



my $vblade_kernel = ( -d "/sys/vblade" )?1:0;

if ( $vblade_kernel ) {

print " Using kernelspace vblade\n" if ($action eq "start");

} else {

print " Using userspace vblade\n" if ($action eq "start");

}



# Run vblade

foreach my $int (keys %iface) {

my $node_id = $iface{$int};

open(DATA, "/etc/etherpopulate.conf");

while () {

chomp;

s/#.*//;

s/^\s+//;

s/\s+$//;

next unless length;



if ($_ =~ /^node-$node_id\s+(\S+)\s+(\S+)\s+(\S.*)/) {

my $cfg_action = $1;

my $command = $2;

my $parameters = $3;



# Export disk over ATAoE

if ($action eq $cfg_action && $command eq "ataoe" && $parameters =~ /(\S+)\s+(\d+)/) {

my $disk_name = $1;

my $disk_id = $2;

if ($vblade_kernel) {

if ( $disk_name =~ /([a-z0-9]+)$/ ) {

my $disk_safe_name = $1;

system("echo 'add $disk_safe_name $disk_name' > /sys/vblade/drives");

system("echo 'add $int $node_id $disk_id' > /sys/vblade/$disk_safe_name/ports");

}

} else {

system("/sbin/start-stop-daemon --background --start --name 'vblade_$node_id_$disk_id' --exec /usr/sbin/vblade $node_id $disk_id eth0 $disk_name");

}

print " Exporting disk: $disk_name [ $node_id $disk_id ] via $int\n";

}



# Execute specified command

if ($action eq $cfg_action && $command eq "exec") {

system($parameters);

}

}

}

close(DATA);

}











3つのノードの参加によるetherpopulateの構成。 さらに2つ追加します。 各ノードからのディスクは他の目的のためにエクスポートされます(raid1のバックアップ)

ftp sbin # more /diskless/node/etc/etherpopulate.conf

# ----------------------

# Node 194 160gb

node-194 start exec /sbin/mdadm -A /dev/md0 -f /dev/hd[ah] /dev/hdl

node-194 start ataoe /dev/md0 0 # Vblade FTP array

node-194 start ataoe /dev/hdk 1 # Vblade BACKUP disk

node-194 stop exec /usr/bin/killall vblade

node-194 stop exec /sbin/mdadm -S /dev/md0



# ----------------------

# Node 195 200 gb

node-195 start exec /sbin/mdadm -A /dev/md0 /dev/hd[ab] /dev/hd[ef] /dev/hd[gh] /dev/sd[ac]

node-195 start ataoe /dev/md0 0 # Vblade FTP array

node-195 start ataoe /dev/sdd 1 # Vblade BACKUP disk

node-195 stop exec /usr/bin/killall vblade

node-195 stop exec /sbin/mdadm -S /dev/md0



# ----------------------

# Node 196 200 gb

node-196 start exec /sbin/mdadm -A /dev/md0 /dev/hd[af]

node-196 start ataoe /dev/md0 0 # Vblade FTP array

node-196 stop exec /usr/bin/killall vblade

node-196 stop exec /sbin/mdadm -S /dev/md0








3.最終作業





ノードのネジを最高速度で動作させて、信頼性を損なう

hd*_args="-d1 -X69 -udma5 -c1 -W1 -A1 -m16 -a16 -u1"







スーパーバイザーのコアを検証します。 ノード自体では、vbladeを使用して、ユーザーランドでATAoEへのエクスポートが行われます。

ftp good # grep -i OVER_ETH .config

CONFIG_ATA_OVER_ETH=y








構成に従ってetherpopulateをロードおよび開始した直後にノード自体で。

node-195 ~ # cat /proc/mdstat

Personalities : [linear] [raid0] [raid1] [raid5] [raid4] [raid6] [multipath] [faulty]

md0 : active raid5 hda[0] sdc[8] sdb[7] sda[6] hdh[5] hdg[4] hdf[3] hde[2] hdb[1]

1562887168 blocks level 5, 64k chunk, algorithm 2 [9/9] [UUUUUUUUU]



unused devices: node-195 ~ # ps -ax | grep vblade | grep md

Warning: bad ps syntax, perhaps a bogus '-'? See procps.sf.net/faq.html

2182 ? Ss 2090:41 /usr/sbin/vblade 195 0 eth0 /dev/md0



node-195 ~ # mount

rootfs on / type rootfs (rw)

/dev/root on / type nfs (ro,v2,rsize=4096,wsize=4096,hard,nolock,proto=udp,addr=172.18.0.193)

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

udev on /dev type tmpfs (rw,nosuid)

devpts on /dev/pts type devpts (rw)

none on /var/lib/init.d type tmpfs (rw)

shm on /dev/shm type tmpfs (rw,nosuid,nodev,noexec)











スーパーバイザ上のディスクからlvmを収集します。将来はこれを行う必要はありません。vgscanによってマウントする準備ができたセクションがあります



ftp / # ls -la /dev/etherd/*

cw--w---- 1 root disk 152, 3 Jun 7 2008 /dev/etherd/discover

brw-rw---- 1 root disk 152, 49920 Jun 7 2008 /dev/etherd/e194.0

brw-rw---- 1 root disk 152, 49936 Jun 7 2008 /dev/etherd/e194.1

brw-rw---- 1 root disk 152, 49920 Jun 7 2008 /dev/etherd/e195.0

brw-rw---- 1 root disk 152, 49936 Jun 7 2008 /dev/etherd/e195.1

brw-rw---- 1 root disk 152, 49920 Jun 7 2008 /dev/etherd/e196.0

cr--r----- 1 root disk 152, 2 Jun 7 2008 /dev/etherd/err

cw--w---- 1 root disk 152, 4 Jun 7 2008 /dev/etherd/interfaces








最初の2つのノードから、1つのアレイと1つのディスクがエクスポートされ、3番目のノードからは、アレイのみがエクスポートされました。

これらのデバイスをLVMスーパーバイザで使用する前に、「特別な」マークアップを作成して、LVMがディスクに内部識別子を追加する必要があります。



# pvcreate /dev/etherd/e194.0

...

...








ディスクはすぐに使用できます。 ボリュームグループを作成します。

# vgcreate cluster /dev/etherd/e194.0 /dev/etherd/e195.0 /dev/etherd/e196.0







グループはすぐにアクティブになりますが、原則として含めることができます

# vgchange -ay cluster







オンとオフ

# vgchange -an cluster







ボリュームグループに何かを追加するには

# vgextend cluster /dev/*...







利用可能なすべての場所に論理ボリュームハイパースペースを作成します。 各PEのデフォルトは4mbです。 だから

# vgdisplay cluster | grep "Total PE"

Total PE 1023445

# lvcreate -l 1023445 cluster -n hyperspace








vgdisplay、lvdisplay、pvdisplayの結果を確認できます。

vgextend、lvextend、resize_reiserfsを使用してすべてを拡張できます。

詳細はこちらhttp://tldp.org/HOWTO/LVM-HOWTO/



最終的には/ dev / cluster / hyperspaceになり、mkreiserfsにしてマウントします。 すべて準備完了です。 ftpサーバーの設定を下げます。 そうそう!







再利用



スーパーバイザ自体で、再起動の場合、実行するだけで十分です

more runme.sh

#!/bin/sh

vgscan

vgchange -ay

mount /dev/cluster/hyperspace /mnt/ftp






事前に作成された配列を使用します。



短所







結論



解決策は確かに興味深いものであり、テラバイトのネジ、ホットプラグsata、およびソフトウェアの新しい新しいバージョンで既に作成したいと考えています。 しかし、そのような偉業を誰が行うかは不明です。 たぶん、%username%?



関連リンク



http://tldp.org/HOWTO/LVM-HOWTO/

http://sourceforge.net/search/?words=ataoe&type_of_search=soft&pmode=0&words=vblade&Search=Search

http://www.gentoo.org/doc/en/diskless-howto.xml



オリジナル記事



PSスクリプトを書くための029ahへの特別なthx。



All Articles