DRBD/Heartbeat/Pacemakerで作るKVM仮想化クラスタ

15,000 views
14,791 views

Published on

DRBD、Heartbeat、Pacemakerを使って、たった2台のIAサーバのみでライブマイグレーション可能な高可用KVM仮想クラスタを構築しました。これは、このシステムの設計、ネットワークやストレージ構成の工夫箇所、パフォーマンスなどについて説明した資料です。
2011年3月4日に「オープンソースカンファレンス2011 Tokyo/Spring」で発表したときの発表資料です。

Published in: Technology
0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
15,000
On SlideShare
0
From Embeds
0
Number of Embeds
180
Actions
Shares
0
Downloads
161
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide

DRBD/Heartbeat/Pacemakerで作るKVM仮想化クラスタ

  1. 1. DRBD/Heartbeat/Pacemaker で作る KVM 仮想化クラスタ 株式会社サードウェア 久保 元治 2 台のサーバのみで ライブマイグレーションを実現
  2. 2. 目次 <ul><li>目的
  3. 3. 設計
  4. 4. iSCSIストレージ・クラスタ
  5. 5. ネットワーク
  6. 6. パフォーマンス </li></ul>
  7. 7. 目的 <ul><li>仮想化の可能性と問題の検証 </li><ul><li>Nagios、JP1 (Windows)など監視系から載せてみたい
  8. 8. ライブマイグレーションは実現したい </li></ul><li>冗長構成 </li><ul><li>物理サーバの故障やメンテナンスに備える </li></ul><li>予算の制約 </li><ul><li>物理サーバ2台でどこまで実現できるか </li></ul></ul>
  9. 9. 設計 <ul><li>CentOS 5.5、KVMを採用
  10. 10. iSCSIターゲットをHAクラスタで構成 </li><ul><li>2台のサーバのどちらかでiSCSIターゲットが動作
  11. 11. 2台のiSCSIイニシエータは仮想IPアドレスにアクセス </li></ul><li>ネットワークの工夫 </li><ul><li>ボンディングとジャンボフレーム </li></ul><li>ゲストOSの追加・削除に対応させる </li><ul><li>DRBDの上でLVMを動作させる </li></ul></ul>
  12. 12. 設計 リアルタイム・レプリケーション サーバ 1 KVM DRBD QEMU QEMU ゲスト OS 1 ゲスト OS 2 LVM2 iSCSI ターゲット iSCSI イニシエータ サーバ 1 KVM DRBD ( プライマリ ) QEMU QEMU ゲスト OS 1 ゲスト OS 2 LVM2 iSCSI ターゲット 1 2 3 4 iSCSI イニシエータ サーバ 1 KVM DRBD QEMU QEMU ゲスト OS 1 ゲスト OS 2 LVM2 iSCSI ターゲット iSCSI イニシエータ サーバ 2 KVM QEMU QEMU ゲスト OS 3 ゲスト OS 4 LVM2 iSCSI ターゲット iSCSI イニシエータ DRBD ( セカンダリ )
  13. 13. 設計 リアルタイム・レプリケーション サーバ 1 KVM DRBD QEMU ゲスト OS 2 LVM2 iSCSI ターゲット iSCSI イニシエータ サーバ 1 KVM DRBD ( プライマリ ) QEMU ゲスト OS 2 LVM2 iSCSI ターゲット 1 2 3 4 iSCSI イニシエータ サーバ 1 KVM DRBD QEMU QEMU ゲスト OS 1 ゲスト OS 2 LVM2 iSCSI ターゲット iSCSI イニシエータ サーバ 2 KVM QEMU QEMU ゲスト OS 3 ゲスト OS 4 LVM2 iSCSI ターゲット iSCSI イニシエータ DRBD ( セカンダリ ) QEMU ゲスト OS 1 QEMU ゲスト OS 1 ライブマイグレーション
  14. 14. 設計 リアルタイム・レプリケーション サーバ 1 KVM QEMU QEMU ゲスト OS 1 ゲスト OS 2 iSCSI イニシエータ サーバ 1 KVM QEMU QEMU ゲスト OS 1 ゲスト OS 2 iSCSI イニシエータ サーバ 1 KVM DRBD QEMU QEMU ゲスト OS 1 ゲスト OS 2 LVM2 iSCSI ターゲット サーバ 2 KVM QEMU QEMU ゲスト OS 3 ゲスト OS 4 LVM2 iSCSI ターゲット iSCSI イニシエータ DRBD ( セカンダリ ) DRBD LVM2 iSCSI ターゲット DRBD ( プライマリ ) LVM2 iSCSI ターゲット 1 2 3 4 フェールオーバ
  15. 15. 設計 リアルタイム・レプリケーション サーバ 1 KVM DRBD QEMU QEMU ゲスト OS 1 ゲスト OS 2 LVM2 iSCSI ターゲット iSCSI イニシエータ サーバ 1 KVM DRBD ( プライマリ ) QEMU QEMU ゲスト OS 1 ゲスト OS 2 LVM2 iSCSI ターゲット iSCSI イニシエータ サーバ 1 KVM DRBD QEMU QEMU ゲスト OS 1 ゲスト OS 2 LVM2 iSCSI ターゲット サーバ 2 KVM QEMU QEMU ゲスト OS 3 ゲスト OS 4 LVM2 1 2 3 4 iSCSI イニシエータ DRBD ( プライマリ ) QEMU QEMU ゲスト OS 1 ゲスト OS 2 QEMU QEMU ゲスト OS 1 ゲスト OS 2 ダウン! 物理サーバがダウン
  16. 16. 設計 ボンディング iSCSI アクセス用 ボンディング DRBD データ用 SAS SAS SAS SAS RAID (BBWC) eth0 eth1 eth2 eth3 eth4 eth5 SAS SAS SAS SAS RAID (BBWC) eth0 eth1 eth2 eth3 eth4 eth5 LAN 監視用
  17. 17. iSCSIストレージクラスタ <ul><li>iSCSIターゲット </li><ul><li>DRBD/Heartbeat/Pacemaker/ietd
  18. 18. DRBD上にLVMを構成
  19. 19. 注意点 </li><ul><li>iSCSIイニシエータ、libvirtdはiSCSIターゲット起動後に起動するよう、クラスタリソースとして制御する </li></ul></ul></ul>
  20. 20. iSCSIストレージクラスタ primitive main_t01_target ocf:heartbeat:iSCSITarget params implementation=&quot;iet&quot; iqn=&quot;iqn.2006-05.jp.onisi:kvmsv:t01&quot; tid=&quot;1&quot; portals=&quot;10.0.1.65:3260&quot; op start interval=&quot;0&quot; timeout=&quot;30&quot; op stop interval=&quot;0&quot; timeout=&quot;30&quot; op monitor interval=&quot;50&quot; timeout=&quot;30&quot; primitive main_t01lv01 ocf:heartbeat:iSCSILogicalUnit params implementation=&quot;iet&quot; lun=&quot;1&quot; target_iqn=&quot;iqn.2006-05.jp.onisi:kvmsv:t01&quot; path=&quot;/dev/vg/t01lv01&quot; op start interval=&quot;0&quot; timeout=&quot;30&quot; op stop interval=&quot;0&quot; timeout=&quot;30&quot; op monitor interval=&quot;50&quot; timeout=&quot;30&quot; primitive post_ip1 ocf:heartbeat:IPaddr2 params ip=&quot;10.0.xxx.yyy&quot; cidr_netmask=&quot;24&quot; op monitor interval=&quot;50&quot; timeout=&quot;30&quot; primitive post_ip2 ocf:heartbeat:IPaddr2 params ip=&quot;192.168.aaa.bbb&quot; cidr_netmask=&quot;24&quot; op monitor interval=&quot;50&quot; timeout=&quot;30&quot; primitive post_portunblock _iscsi ocf:heartbeat:portblock params protocol=&quot;tcp&quot; action=&quot;unblock&quot; portno=&quot;3260&quot; op start interval=&quot;0&quot; timeout=&quot;30&quot; op stop interval=&quot;0&quot; timeout=&quot;30&quot; op monitor interval=&quot;50&quot; timeout=&quot;30&quot; primitive pre_lvm ocf:heartbeat:LVM params volgrpname=&quot;vg&quot; op monitor interval=&quot;50&quot; timeout=&quot;30&quot; op start interval=&quot;0&quot; timeout=&quot;30&quot; op stop interval=&quot;0&quot; timeout=&quot;30&quot; primitive pre_portblock_iscsi ocf:heartbeat:portblock params protocol=&quot;tcp&quot; action=&quot;block&quot; portno=&quot;3260&quot; op start interval=&quot;0&quot; timeout=&quot;30&quot; op stop interval=&quot;0&quot; timeout=&quot;30&quot; op monitor interval=&quot;50&quot; timeout=&quot;30&quot;
  21. 21. iSCSIストレージクラスタ primitive res_drbd_r0 ocf:linbit:drbd params drbd_resource=&quot;r0&quot; op monitor interval=&quot;10&quot; op start interval=&quot;0&quot; timeout=&quot;240&quot; op stop interval=&quot;0&quot; timeout=&quot;100&quot; primitive res_iscsi lsb:iscsi primitive res_libvirtd lsb:libvirtd op start interval=&quot;0&quot; timeout=&quot;120&quot; op stop interval=&quot;0&quot; timeout=&quot;300&quot; group all pre_portblock_iscsi pre_lvm main_t01_target main_t01lv01 post_ip1 post_ip2 post_portunblock_iscsi ms ms_drbd_r0 res_drbd_r0 meta master-max=&quot;1&quot; master-node-max=&quot;1&quot; clone-max=&quot;2&quot; clone-node-max=&quot;1&quot; notify=&quot;true&quot; clone c_iscsi res_iscsi meta clone-node-max=&quot;1&quot; clone-max=&quot;2&quot; globally-unique=&quot;false&quot; clone c_libvirtd res_libvirtd meta clone-node-max=&quot;1&quot; clone-max=&quot;2&quot; globally-unique=&quot;false&quot; location l_all all 100: kvmsv001.onisi.jp colocation col_all inf: all ms_drbd_r0:Master order o_all 0: ms_drbd_r0:promote all:start order o_all_iscsi inf: all c_iscsi order o_iscsi_libvirtd inf: c_iscsi c_libvirtd property default-resource-stickiness=&quot;200&quot; no-quorum-policy=&quot;ignore&quot; stonith-enabled=&quot;false&quot;
  22. 22. ネットワーク <ul><li>230MB/sec >> 1G bps </li><ul><li>ネットワークがボトルネックに
  23. 23. ボンディング(mode=0)だけでは不十分
  24. 24. ジャンボフレーム(mtu 9000)を追加 </li></ul></ul>
  25. 25. ネットワーク 参考: KVMネットワーク構成ガイド for RHEL 5.4 ( 日本 IBM Linux/OSS サポート・センター ) eth0 eth1 eth2 eth3 eth4 eth5 bond0 bond1 VLAN サービス提供 サーバ管理 Heartbeat DRBD レプリケーション Heartbeat iSCSI アクセス ゲスト間通信
  26. 26. パフォーマンス <ul><li>ネットワーク性能はnetperfで測定
  27. 27. DRBDの性能測定 dd if=/dev/zero of=.... bs=100M count=50 oflag=dsync </li><ul><li>bonnie++なども有用だが実施できず </li></ul></ul>
  28. 28. パフォーマンス サーバ本体 HP Proliant DL 360 G7 メモリ 18GB RAID コントローラ P410i (BBWC 512MB) ハードディスク SAS 300GB 10,000rpm×6 (RAID5) ネットワーク 1000BaseT
  29. 29. パフォーマンス eth0 bonding (eth0+eth1) bonding (eth0+eth1+eth2) bonding (eth0+eth1+eth2+eth3) 1500 940 Mbps 1500 1213 Mbps 1500 1498 Mbps 1500 2092 Mbps bonding (eth0+eth1) 9000 1964 Mbps ネットワーク構成 MTU 性能
  30. 30. パフォーマンス DRBD 構成前の HDD への直接書き込み 141 MB/sec DRBD 領域に直接書き込み 230 MB/sec ローカル iSCSI ターゲットに書き込み リモート iSCSI ターゲットに書き込み 1 ゲスト、仮想ディスクに書き込み 2 ゲスト、仮想ディスクに同時書き込み 310 MB/sec 122 MB/sec 172 MB/sec 126 MB/sec
  31. 31. 最後に <ul><li>多少のスケーラビリティ </li><ul><li>KVMホスト追加可能 </li></ul><li>仮想環境入門に最適
  32. 32. ゲストOS管理は課題 </li><ul><li>コマンドベースでの追加・削除が必要
  33. 33. virt-managerはまだVLANをサポートしていない </li></ul></ul>

×