IDCFクラウド Advent Calendar 18日目の記事です。中の人です。
今回の構成
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させたいディスクの設定)となります。今回は*.res
はresource1.res
としています。
/etc/drbd.d/global_common.conf
については、今回は特に何も変更せず、デフォルトのままです。
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を起動しましょう。
# 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です。
# 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%になれば完了。
# 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に合せて、ざっくり下記だけ設定しました。まぁ、適当です。
[mysqld]
innodb_buffer_pool_size = 6529M
innodb_log_file_size = 1632M
innodb_fast_shutdown = 0
DRBD領域のフォーマット
# 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の落ち込みが激しい事ですかね。今回はサーバ側を全然見ていないので、何が起きてるのか見れていないのですが、どうなんだろうか。