その他
    ホーム 技術発信 DoRuby DRBDのインストール

    DRBDのインストール

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    こんにちはtacchiです。

    DRBD

    DRBDとはDistributed Replicated Block Deviceの略で、本家WEBサイトは http://www.drbd.org/です。

    ブロックデバイス全体をネットワーク経由でミラーリングしています。
    要は、昔はrsyncとcronを利用してミラーリングしていたものを、DRBDでできちゃうよということです。

    Ruby案件で必要だったのでDRBDとHeartBeatを利用させてもらいました。
    なかなか苦戦しましたが、先駆者がのこしてくれているありがたい情報を元に設定を行っていきました。
    参考にさせていただいたのは、以下のサイトです。

    Webサーバが2台あり、テストサーバから本番サーバへのデプロイを同時に反映させること、差異のないアプリケーションを稼働させるという意図から、DRBDを利用。
    テストサーバとWebサーバをDRBDで結ぶという案もありましたが、実際に稼働しているアプリケーションを容易に変更できないようにという意図から、テストサーバとWebサーバ間はrsyncで結び、デプロイシェルを作成し、それを叩けば本番に反映できるようにしました。
    (やり方は、沢山考えられますが、今回はこれで行きました。)


    じゃぁ実際の設定を以下に示します。


    ■まず、DRBDのインストールから(Web01とWeb02にインストール)wget http://oss.linbit.com/drbd/8.0/drbd-8.0.5.tar.gz
    tar zxvf drbd-8.0.5.tar.gz
    cd drbd-8.0.5
    make rpm
    cd dist/RPMS/x86_64
    rpm -ivh drbd-8.0.5-3.x86_64.rpm drbd-km-2.6.18_8.1.8.el5-8.0.5-3.x86_64.rpm
    drbd-debuginfo-8.0.5-3.x86_64.rpm


    ■設定ファイルをいじりましょう。(/etc/drbd.conf)
    ※もちろんWeb01とWeb02に設定resource r0 {

    protocol C;

    startup {
    degr-wfc-timeout 120; # 2 minutes.
    }

    disk {
    on-io-error detach;
    }

    syncer {
    rate 100M;
    }

    on hogeweb01 {
    device /dev/drbd0;
    disk /dev/sda3;
    address 192.168.2.79:7789;
    flexible-meta-disk internal;
    }

    on hogeweb02 {
    device /dev/drbd0;
    disk /dev/sda3;
    address 192.168.2.222:7789;
    meta-disk internal;
    }


    ■iptablesを利用しているならiptablesの設定も必要!
    tcpの7789ポートを利用しますので、アクセス許可を行います。
    ※もちろんWeb01とWeb02に設定/sbin/iptables -I INPUT -p tcp -m tcp –dport 7789 –syn -j ACCEPT
    /etc/rc.d/init.d/iptables save
    service iptables restart


    ■サービスの起動をしてみましょう 
    ※Web01とWeb02で起動。service drbd start


    ■使ってみましょう
     Web01 以下を実行cat /proc/drbd
    上記コマンドをたたくと以下が表示される。今は両方セカンダリですよーって表示。
    cs:Connected st:Secondary/Secondary


    ■じゃぁWeb01をプライマリに変更しましょう。(Web01で実行)drbdsetup /dev/drbd0 primary
    cat /proc/drbd
    以下の表示に変わったはず。
    cs:Connected st:Primary/Secondary


    ■じゃぁマウントしてみましょう。(Web01で実行)mount /dev/drbd0 /mnt/drbd0


    ■ファイルを作っておいてみる(Web01で実行)touch /mnt/drbd0/test


    ■マウント解除して、Web02の方でmountできるようにsecondaryにする。(Web02で実行)umount /dev/drbd0
    drbdsetup /dev/drbd0 secondarydrbdsetup /dev/drbd0 primary
    (primaryにする。)
    mount /dev/drbd0 /mnt/drbd0
    ls /mnt/drbd0


    こちらにもtestができてればOK

    これで設定完了です。