LoginSignup
7
7

More than 5 years have passed since last update.

IDCFクラウド 東西間でDRBDでMariaDBしてみた

Last updated at Posted at 2015-12-18

IDCFクラウド Advent Calendar 18日目の記事です。中の人です。

今回の構成

Screenshot from 2015-12-18 12-18-03.png

Virtual Routerを経由させず東西を裏側で接続することもできるので、本当はそうしたかったんですが、今回は間に合わずVirtual Router経由になってしまいました。本気で使うのであれば、裏で東西を接続してDRBDのSyncは裏側を通した方が良いと思います。

上記の構成以外に、比較のため、DRBD無しと同一ゾーン内(Henry)でのDRBD環境も作成しました。

DRBDの設定

実はDRBDを設定したのは初めてです。今回は特に特別なことは設定しないシンプルな設定です。global_common.confの方は、特に何も変更していません。もしかすると、もっと適切な設定が可能なのかもしれませんが、まぁなにぶん初めてなもんで。

利用環境

ということで、DRBDは下記の形でインストール設定しています。DRBDはメジャーなツールなので、詳しく知りたい方は調べてください。いっぱい出てきますので。

  • インスタンスタイプはhighcpu.L8のVMを利用
  • IDCF CloudのCentOS 7をyum updateで最新にした物を利用
  • 東西それぞれのVMにStaticNATを設定(別にポートフォワードでも出来たかも)
  • DRBDのsync対象としてボリュームを追加
  • DRBDはELRepoのdrbd-8.4を利用

インストールまでの流れ

インストールまでの流れ
# yum -y update

ここでreboot

# yum install http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
# yum install drbd84-utils kmod-drbd84

DRBDのコンフィグ

コンフィグファイルとしては/etc/drbd.d/global_common.conf/etc/drbd.d/*.resとなります。*.resは各リソースの設定(要するにsyncさせたいディスクの設定)となります。今回は*.resresource1.resとしています。
/etc/drbd.d/global_common.confについては、今回は特に何も変更せず、デフォルトのままです。

/etc/drbd.d/resource1.res
resource resource1 {
    net {
        protocol C;
    }
    volume 0 {
        device    minor 0;
        disk      /dev/sdb;
        meta-disk internal;
    }
    on drbd1.csdidcfcloud.internal {
        address 10.5.0.184:7788;
    }
    on drbd2.cs30idcfcloud.internal {
        address 210.152.xxx.xxx:7788;
    }
}
  • 注意点
    • disk/dev/sdbとしている部分(環境によりますが、ボリュームを1台接続した状態ではsdbになるはずです。)のデバイス名が正しいかどうか。
    • on HOSTNAMEの部分のHOSTNAMEの部分ですが、uname -nで表示されるホスト名を記載する必要がある。
    • addressの部分は、自分自身の設定についてはPrivateIP Addressの方を記載する必要があります。相手側はNATしたPublicIP Addressを記載。
    • 東西でIP以外は同一の設定OK
    • Protocolはレプリケーションモードの設定で、Cは同期レプリケーションの設定になります。

DRBDの起動

それではDRBDを起動しましょう。

起動までの流れ、1台目,2台目、双方で実行
# drbdadm create-md resource1
New drbd meta data block successfully created.

# drbdadm up resource1

# cat /proc/drbd
version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by phil@Build64R7, 2015-04-10 05:13:52
 0: 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:41941724

cs:Connected ro:Secondary/SecondaryになればOKです。

初期SyncをPrimaryのHenry側だけで実行
# drbdadm --force primary resource1

# cat /proc/drbd
version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by phil@Build64R7, 2015-04-10 05:13:52
 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
    ns:794524 nr:0 dw:0 dr:795436 al:0 bm:0 lo:0 pe:1 ua:0 ap:0 ep:1 wo:f oos:41147712
        [>....................] sync'ed:  2.0% (40180/40956)M
        finish: 0:37:18 speed: 18,372 (14,980) K/sec

/proc/drbdで進行状況が確認できます。100%になれば完了。

/proc/drbd
# cat /proc/drbd
version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by phil@Build64R7, 2015-04-10 05:13:52
 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
    ns:41941946 nr:0 dw:20862 dr:41923957 al:10 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

100%になると、cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDateになります。

mariadb-serverを入れてdrbdの領域を使う

ここからは普通にディスクを追加するのと同じ作業です。デバイス名が/dev/drbd0になるだけです。

MariaDBインストール

CentOS7のMariaDB 5.5をそのまま使いました。

# yum install mariadb-server

MariaDBの設定

今回のVMはインスタンスタイプがhighcpu.L8なので、メモリ8GBです。8GBに合せて、ざっくり下記だけ設定しました。まぁ、適当です。

/etc/my.cnf.d/server.cnf
[mysqld]
innodb_buffer_pool_size = 6529M
innodb_log_file_size    = 1632M
innodb_fast_shutdown    = 0

DRBD領域のフォーマット

format
# mkfs.xfs /dev/drbd0
meta-data=/dev/drbd0             isize=256    agcount=4, agsize=2621358 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=10485431, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal log           bsize=4096   blocks=5119, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

DRBDをマウント

# mount /dev/drbd0 /var/lib/mysql
# chown mysql:mysql /var/lib/mysql

MariaDBを起動

# systemctl start mariadb

sysbench

sysbench 0.4.2 oltpテストの設定

比較のために、DRBDなしローカルボリューム、DRBDで同一ゾーン(Henry)でも計測しています。sysbenchのオプションは次のとおりです。--num-threadsは50,100,150で計測しました。

sysbench --test=oltp \
  --db-driver=mysql \
  --mysql-host=10.5.0.184 \
  --mysql-user=sbtest \
  --mysql-password=sbtest \
  --oltp-table-size=5000000 \
  --num-threads=50 \
  --max-requests=0 \
  --max-time=180 \
  --oltp-test-mode=complex run

初期データは5,000,000レコード作成しています。(上記の最期をrunではなくprepareでそのまま実行。)

sysbench結果

Transaction / Sec

Threads DRBD無し DRBD Local DRBD E/W
50 1587.13 1466.94 511.75
100 1528.78 1537.17 1033.83
150 1508.27 1465.59 1487.42

なかなか優秀ですね。IDCFの東西のネットワーク早いですね!(単にDRBDが優秀とかもあるかもしれないけど。。。もしくは、MariaDBの設定が効きすぎているのか。。。)
良くわからないのは、DRBD E/Wで50Threadsの落ち込みが激しい事ですかね。今回はサーバ側を全然見ていないので、何が起きてるのか見れていないのですが、どうなんだろうか。

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7