DRBDに基づく無料のVMware vSphere Storage Applianceの交換

最近、VMwareはvSphere 5ラインの新製品を発表しましたが、VMware vSphere Storage Applianceとは何ですか?



要するに、本質は、外部ストレージなしでフォールトトレラントな仮想インフラストラクチャを構築する可能性にあります。 実装のために、2つまたは3つの仮想マシンがインストールされ(ホストごとに1つ)、ESXiサーバーのディスクサブシステムの空き領域を複製し、すべての同じESXiホストに共有ストレージとして提供します。 ここで説明されているロシアのストレージアプライアンスの詳細。



興味深いアイデアですが、価格は噛みつきます-約$ 6K。 また、パフォーマンスについて考えると、ディスクアレイの速度が低下する可能性がありますか? 一方、問題にアプローチする場合、外部ストレージを整理する他の多くの方法を考えることができます。 たとえば、必要な数のディスクとインストールされたソフトウェアOpenfiler、FreeNAS、Nexenta、Open-Eを備えたほぼすべてのハードウェアから外部ストレージを作成できます。これらのソフトウェア製品では、システム間で複製が可能です。



このアプローチは、十分なパフォーマンスと信頼性を提供する有名なメーカーの高価なストレージシステムを購入する機会がない多くの企業によって実践されています。 通常、このようなシステムには、2つのコントローラー、冗長電源システム、高速ディスクなどが装備されています...



ただし、最初に戻って、VMwareが提供するスキームを見てください。











何が見えますか? 仮想マシンがデプロイされた3つのESXiホスト(各ホストに1つ)。 マシンはクラスター化され、外部ドライブとして内部ドライブを提供します。



利用可能なツールから同様のソリューションをまとめるというアイデアは長い間空中にありましたが、正当な理由を見つけることができませんでした。 そして、VMware自体が、テスト環境ですべてを試すために弾みをつけました。



フォールトトレラントストレージを構築するためのソリューション-たとえば、Openfiler + DRBD + Heartbeatに基づいた束。 しかし、これらすべての決定の中心には、外部ストレージを構築するというアイデアがあります。 同様のことを試してみませんか?



基盤として、OS Ubuntuを備えた2台の仮想マシン、フェールオーバーiSCSIターゲットの構築に関するUbuntuドキュメントを用意し、独自のアプライアンスを作成してみてください。



クラスターの両方のノードでのディスクパーティション:



/dev/sda1 - 10 GB / (primary' ext3, Bootable flag: on)

/dev/sda5 - 1 GB swap (logical)



/dev/sdb1 - 1 GB (primary) DRBD meta-. .

/dev/sdc1 - 1 GB (primary) DRBD , iSCSI. .

/dev/sdd1 - 50 GB (primary) DRBD iSCSI-target.








例として、sdd1ディスクサイズが選択されています。 実際、ESXiホストのローカルストレージ上の残りの空き領域がすべて使用されます。



iSCSIネットワーク:

iSCSI server1: node1.demo.local IP address: 10.11.55.55

iSCSI server2: node2.demo.local IP address: 10.11.55.56

iSCSI Virtual IP address 10.11.55.50








プライベートネットワーク:

iSCSI server1: node1-private IP address: 192.168.22.11

iSCSI server2: node2-private IP address: 192.168.22.12








/ etc / network / interfaces:



node1の場合:

auto eth0

iface eth0 inet static

address 10.11.55.55

netmask 255.0.0.0

gateway 10.0.0.1



auto eth1

iface eth1 inet static

address 192.168.22.11

netmask 255.255.255.0








node2の場合:

auto eth0

iface eth0 inet static

address 10.11.55.56

netmask 255.0.0.0

gateway 10.0.0.1



auto eth1

iface eth1 inet static

address 192.168.22.12

netmask 255.255.255.0








両方のノードの/ etc / hostsファイル:



127.0.0.1 localhost

10.11.55.55 node1.demo.local node1

10.11.55.56 node2.demo.local node2

192.168.22.11 node1-private

192.168.22.12 node2-private








パッケージのインストール:

apt-get -y install ntp ssh drbd8-utils heartbeat jfsutils







サーバーを再起動します。



ファイルの所有者と許可を変更します。

chgrp haclient /sbin/drbdsetup

chmod ox /sbin/drbdsetup

chmod u+s /sbin/drbdsetup

chgrp haclient /sbin/drbdmeta

chmod ox /sbin/drbdmeta

chmod u+s /sbin/drbdmeta








/etc/drbd.confを使用して構成を記述します。 2つのリソースを定義します。

1. iSCSI構成ファイルを含むDRBDデバイス。

2. DRBDデバイス。iSCSIターゲットになります。



node1の場合:



/etc/drbd.conf:



resource iscsi.config {

protocol C;



handlers {

pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f";

pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt -f";

local-io-error "echo o > /proc/sysrq-trigger ; halt -f";

outdate-peer "/usr/lib/heartbeat/drbd-peer-outdater -t 5";

}



startup {

degr-wfc-timeout 120;

}



disk {

on-io-error detach;

}



net {

cram-hmac-alg sha1;

shared-secret "password";

after-sb-0pri disconnect;

after-sb-1pri disconnect;

after-sb-2pri disconnect;

rr-conflict disconnect;

}



syncer {

rate 100M;

verify-alg sha1;

al-extents 257;

}



on node1 {

device /dev/drbd0;

disk /dev/sdc1;

address 192.168.22.11:7788;

meta-disk /dev/sdb1[0];

}



on node2 {

device /dev/drbd0;

disk /dev/sdc1;

address 192.168.22.12:7788;

meta-disk /dev/sdb1[0];

}

}



resource iscsi.target.0 {

protocol C;



handlers {

pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f";

pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt -f";

local-io-error "echo o > /proc/sysrq-trigger ; halt -f";

outdate-peer "/usr/lib/heartbeat/drbd-peer-outdater -t 5";

}



startup {

degr-wfc-timeout 120;

}



disk {

on-io-error detach;

}



net {

cram-hmac-alg sha1;

shared-secret "password";

after-sb-0pri disconnect;

after-sb-1pri disconnect;

after-sb-2pri disconnect;

rr-conflict disconnect;

}



syncer {

rate 100M;

verify-alg sha1;

al-extents 257;

}



on node1 {

device /dev/drbd1;

disk /dev/sdd1;

address 192.168.22.11:7789;

meta-disk /dev/sdb1[1];

}



on node2 {

device /dev/drbd1;

disk /dev/sdd1;

address 192.168.22.12:7789;

meta-disk /dev/sdb1[1];

}

}








構成を2番目のノードにコピーします。

scp /etc/drbd.conf root@10.11.55.56:/etc/







両方のサーバーでメタデータディスクを初期化します。

[node1]dd if=/dev/zero of=/dev/sd1

[node1]dd if=/dev/zero of=/dev/sdd1

[node1]drbdadm create-md iscsi.config

[node1]drbdadm create-md iscsi.target.0



[node2]dd if=/dev/zero of=/dev/sd1

[node2]dd if=/dev/zero of=/dev/sdd1

[node2]drbdadm create-md iscsi.config

[node2]drbdadm create-md iscsi.target.0








drbdを開始します。

[node1]/etc/init.d/drbd start

[node2]/etc/init.d/drbd start








次に、ディスク間で同期するために、プライマリとして機能するサーバーとセカンダリとして機能するサーバーを決定する必要があります。 プライマリがnode1であると仮定します。

最初のノードでコマンドを実行します。

[node1]drbdadm -- --overwrite-data-of-peer primary iscsi.config







チーム出力

cat /proc/drbd:



version: 8.3.9 (api:88/proto:86-95)

srcversion: CF228D42875CF3A43F2945A

0: cs:Connected ro: Primary/Secondary ds:UpToDate/UpToDate C r-----

ns:1048542 nr:0 dw:0 dr:1048747 al:0 bm:64 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

1: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----

ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:52428768








/ dev / drbd0パーティションをフォーマットしてマウントします。

[node1]mkfs.ext3 /dev/drbd0

[node1]mkdir -p /srv/data

[node1]mount /dev/drbd0 /srv/data








最初のノードでファイルを作成し、2番目のノードをプライマリモードに切り替えます。

[node1]dd if=/dev/zero of=/srv/data/test.zeros bs=1M count=100







node1の場合:

[node1]umount /srv/data

[node1]drbdadm secondary iscsi.config








node2の場合:

[node2]mkdir -p /srv/data

[node2]drbdadm primary iscsi.config

[node2]mount /dev/drbd0 /srv/data








2番目のノードでは、サイズが100 MBのファイルが表示されます。

ls –l /srv/data







それを削除して、最初のノードに再び切り替えます。



node2で:

[node2]rm /srv/data/test.zeros

[node2]umount /srv/data

[node2]drbdadm secondary iscsi.config








node1で:

[node1]drbdadm primary iscsi.config

[node1]mount /dev/drbd0 /srv/data








コマンドls / srv / dataを実行します。 パーティションにデータがなければ、レプリケーションは成功しました。



iSCSIターゲットのインストールに進みます。 最初のノードをプライマリとして選択し、パーティションを同期します。

[node1]drbdadm -- --overwrite-data-of-peer primary iscsi.target.0



cat /proc/drbd



version: 8.3.9 (api:88/proto:86-95)

srcversion: CF228D42875CF3A43F2945A

0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----

ns:135933 nr:96 dw:136029 dr:834 al:39 bm:8 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

1: cs:SyncSource ro: Primary/Secondary ds:UpToDate/Inconsistent C r-----

ns:1012864 nr:0 dw:0 dr:1021261 al:0 bm:61 lo:1 pe:4 ua:64 ap:0 ep:1 wo:f oos:51416288

[>....................] sync'ed: 2.0% (50208/51196)M

finish: 0:08:27 speed: 101,248 (101,248) K/sec








同期を待ちましょう...



cat /proc/drbd



version: 8.3.9 (api:88/proto:86-95)

srcversion: CF228D42875CF3A43F2945A

0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----

ns:135933 nr:96 dw:136029 dr:834 al:39 bm:8 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

1: cs:Connected ro: Primary/Secondary ds:UpToDate/UpToDate C r-----

ns:52428766 nr:0 dw:0 dr:52428971 al:0 bm:3200 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0








両方のノードにiscsitargetパッケージをインストールします。

[node1]apt-get -y install iscsitarget

[node2]apt-get -y install iscsitarget








iscsiをサービスとして開始するオプションを有効にします。

[node1]sed -is/false/true/ /etc/default/iscsitarget

[node2]sed -is/false/true/ /etc/default/iscsitarget








すべてのスクリプトからエントリを削除します。

[node1]update-rc.d -f iscsitarget remove

[node2]update-rc.d -f iscsitarget remove








構成ファイルをdrbdセクションに移動します。

[node1]mkdir /srv/data/iscsi

[node1] mv /etc/iet/ietd.conf /srv/data/iscsi

[node1]ln -s /srv/data/iscsi/ietd.conf /etc/iet/ietd.conf

[node2]rm /etc/iet/ietd.conf

[node2]ln -s /srv/data/iscsi/ietd.conf /etc/iet/ietd.conf








ファイル/srv/data/iscsi/ietd.confでiSCSIターゲットを説明します。



Target iqn.2011-08.local.demo:storage.disk.0

# IncomingUser geekshlby secret - ,

# OutgoingUser geekshlby password

Lun 0 Path=/dev/drbd1,Type=blockio

Alias disk0

MaxConnections 1

InitialR2T Yes

ImmediateData No

MaxRecvDataSegmentLength 8192

MaxXmitDataSegmentLength 8192

MaxBurstLength 262144

FirstBurstLength 65536

DefaultTime2Wait 2

DefaultTime2Retain 20

MaxOutstandingR2T 8

DataPDUInOrder Yes

DataSequenceInOrder Yes

ErrorRecoveryLevel 0

HeaderDigest CRC32C,None

DataDigest CRC32C,None

Wthreads 8








ここで、ノードに障害が発生したときにiSCSIターゲットの仮想IPアドレスを制御するようにハートビートを構成する必要があります。



/etc/heartbeat/ha.cfファイルでクラスターを説明します。



logfacility local0

keepalive 2

deadtime 30

warntime 10

initdead 120

bcast eth0

bcast eth1

node node1

node node2








認証メカニズム

/etc/heartbeat/authkeys:



auth 2

2 sha1 NoOneKnowsIt








ファイル/ etc / heartbeat / authkeysのアクセス許可を変更します。

chmod 600 /etc/heartbeat/authkeys







ファイル/ etc / heartbeat / haresources-起動されるメインノード、仮想IP、ファイルシステム、およびサービスでクラスターリソースを説明します。



/etc/heartbeat/haresources



node1 drbddisk::iscsi.config Filesystem::/dev/drbd0::/srv/data::ext3

node1 IPaddr::10.11.55.50/8/eth0 drbddisk::iscsi.target.0 iscsitarget








構成を2番目のノードにコピーします。

[node1]scp /etc/heartbeat/ha.cf root@10.11.55.56:/etc/heartbeat/

[node1]scp /etc/heartbeat/authkeys root@10.11.55.56:/etc/heartbeat/

[node1]scp /etc/heartbeat/haresources root@10.11.55.56:/etc/heartbeat/








アンマウント/ srv / data、最初のノードをセカンダリとして作成します。

ハートビートを開始する

[node1]/etc/init.d/heartbeat start







両方のサーバーを再起動します。



[node1]/etc/init.d/drbd start

[node2]/etc/init.d/drbd start



[node1]drbdadm secondary iscsi.config -

[node1]drbdadm secondary iscsi.target.0 -



[node2]drbdadm primary iscsi.config

[node2]drbdadm primary iscsi.target.0



[node1]cat /proc/drbd



[node1]/etc/init.d/heartbeat start








ハートビートを開始した後、最初のノードをプライマリモードに変換し、2番目のノードをセカンダリモードに変換します(それ以外の場合は起動しません)。



[node2]drbdadm secondary iscsi.config

[node2]drbdadm secondary iscsi.target.0



[node1]drbdadm primary iscsi.config

[node1]drbdadm primary iscsi.target.0








tail –f / var / log / syslogを参照してください

私たちは待っています...

しばらくして...



Aug 26 08:32:14 node1 harc[11878]: info: Running /etc/ha.d//rc.d/ip-request-resp ip-request-resp

Aug 26 08:32:14 node1 ip-request-resp[11878]: received ip-request-resp IPaddr::10.11.55.50/8/eth0 OK yes

Aug 26 08:32:14 node1 ResourceManager[11899]: info: Acquiring resource group: node1 IPaddr::10.11.55.50/8/eth0 drbddisk::iscsi.target.0 iscsitarget

Aug 26 08:32:14 node1 IPaddr[11926]: INFO: Resource is stopped

Aug 26 08:32:14 node1 ResourceManager[11899]: info: Running /etc/ha.d/resource.d/IPaddr 10.11.55.50/8/eth0 start

Aug 26 08:32:14 node1 IPaddr[12006]: INFO: Using calculated netmask for 10.11.55.50: 255.0.0.0

Aug 26 08:32:14 node1 IPaddr[12006]: INFO: eval ifconfig eth0:0 10.11.55.50 netmask 255.0.0.0 broadcast 10.255.255.255

Aug 26 08:32:14 node1 avahi-daemon[477]: Registering new address record for 10.11.55.50 on eth0.IPv4.

Aug 26 08:32:14 node1 IPaddr[11982]: INFO: Success

Aug 26 08:32:15 node1 ResourceManager[11899]: info: Running /etc/init.d/iscsitarget start

Aug 26 08:32:15 node1 kernel: [ 5402.722552] iSCSI Enterprise Target Software - version 1.4.20.2

Aug 26 08:32:15 node1 kernel: [ 5402.723978] iscsi_trgt: Registered io type fileio

Aug 26 08:32:15 node1 kernel: [ 5402.724057] iscsi_trgt: Registered io type blockio

Aug 26 08:32:15 node1 kernel: [ 5402.724061] iscsi_trgt: Registered io type nullio

Aug 26 08:32:15 node1 heartbeat: [12129]: debug: notify_world: setting SIGCHLD Handler to SIG_DFL

Aug 26 08:32:15 node1 harc[12129]: info: Running /etc/ha.d//rc.d/ip-request-resp ip-request-resp

Aug 26 08:32:15 node1 ip-request-resp[12129]: received ip-request-resp IPaddr::10.11.55.50/8/eth0 OK yes

Aug 26 08:32:15 node1 ResourceManager[12155]: info: Acquiring resource group: node1 IPaddr::10.11.55.50/8/eth0 drbddisk::iscsi.target.0 iscsitarget

Aug 26 08:32:15 node1 IPaddr[12186]: INFO: Running OK

Aug 26 08:33:08 node1 ntpd[1634]: Listen normally on 11 eth0:0 10.11.55.50 UDP 123

Aug 26 08:33:08 node1 ntpd[1634]: new interface(s) found: waking up resolver








ifconfig

eth0 Link encap:Ethernet HWaddr 00:50:56:20:f9:6c

inet addr:10.11.55.55 Bcast:10.255.255.255 Mask:255.0.0.0

inet6 addr: fe80::20c:29ff:fe20:f96c/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:3622 errors:0 dropped:0 overruns:0 frame:0

TX packets:8081 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:302472 (302.4 KB) TX bytes:6943622 (6.9 MB)

Interrupt:19 Base address:0x2000



eth0:0 Link encap:Ethernet HWaddr 00:50:56:20:f9:6c

inet addr:10.11.55.50 Bcast:10.255.255.255 Mask:255.0.0.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

Interrupt:19 Base address:0x2000




eth1 Link encap:Ethernet HWaddr 00:50:56:20:f9:76

inet addr:192.168.22.11 Bcast:192.168.22.255 Mask:255.255.255.0

inet6 addr: fe80::20c:29ff:fe20:f976/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:1765 errors:0 dropped:0 overruns:0 frame:0

TX packets:3064 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:171179 (171.1 KB) TX bytes:492567 (492.5 KB)

Interrupt:19 Base address:0x2080








結果のiSCSIターゲットを両方のESX(i)ホストに接続します。 両方のホストがストレージを見た後、HAクラスターを組み立てます。 ホスト自体に仮想マシンを作成するためのスペースは残っていませんが、このスペースは仮想ストレージのように見えます。 いずれかのノードで障害が発生した場合、2番目のノードの仮想マシンはプライマリモードになり、iSCSIターゲットとして動作し続けます。



hdparmを使用して、target'eにインストールされた仮想マシンのディスクの速度を測定しました。











当然のことながら、このようなストレージシステムは、本格的な生産システムには適していません。 ただし、負荷の高い仮想マシンがない場合、またはHAクラスターを構築する可能性をテストする必要がある場合、共有ストレージを提供するこの方法には生命権があります。



この資料を読んだ後、多くの人は「間違っている」、「パフォーマンスに欠点がある」、「両方のノードで障害が発生する可能性がある」などと言うでしょう。 はい! そうかもしれませんが、何らかの理由でVMwareがストレージアプライアンスをリリースしましたか?



PS:ところで、すべてを手動でシャベルするのが面倒な人には、DRBDクラスターをセットアップするための管理コンソールhttp://www.drbd.org/mc/screenshot-gallery/があります



マッドバグ

シニアシステムエンジニアDEPO Computers



All Articles