eyemovic inc.

Works blog仕事の取り組み・ビジョン

2015.04.07

AWS EC2にMariaDB Galera Clusterを構築し、EC-CUBE用にチューニングしてみました

EC-CUBEとAWSを利用した案件の調査で、容易にスケールアウトできパフォーマンスがでるデータベースを調べてたときのメモを公開します。

 

eccube_hat
1428434256_Compute__Networking_copy_Amazon_EC2---128ice_logo-5dcea9e47b780ff52f75c3c3304d54827f56211e

 

まず、なぜメジャーなMySQLやPostgreSQLではなくMariaDBを選んだかというと
・CentOSやGoogleではすでにMariaDBにシフトしている
・すべてのインスタンスがマスターで動作する。EC-CUBE側をマスター・スレーブ対応のためカスタマイズさせて隠れたバグを作りたくないので、ハードウェア側で吸収でき容易に負荷分散ができる。
という条件でした。

 

では実際に設定時に気をつけたこと、パフォーマンスが出た設定を書いていきます。

 

*今回利用したインスタンスとネットワーク情報

AMI    :Amazon Linux AMI 2015.03 (HVM), SSD Volume Type – ami-cbf90ecb
タイプ   :c3.2xlarge(vCPU:8、ECU:28、メモリ:15GB)
ストレージ :Provisioned IOPS(SSD) 720IOPS
ネットワーク:VPCを利用し1台目:10.0.2.10、2台目:10.0.2.11、3台目:10.0.2.12とする。内部向けELBを利用し先の3台を紐付けます

 

 

1. TCPの接続要求を格納するキュー最大長を増やします。

※初期値は128だと各ノード間のrsync、クエリの受付が追いつかないんじゃないかという想定

 

2. MariaDBのレポジトリを登録します。

※Amazon Linux AMI 2015.03だとまだ標準では入っていないようです。※今回動作検証できたものは10.0系のバージョンです。10.1系はまたちょっと違って上手くいかなったかので次回

 

3. MariaDBをインストール

 

4. ログ出力の対象ディレクトリが生成されていないので作成します。

5. メモリ周りとクラスター周りの設定

※アプリやその他環境によって設定が異なりますので、メモリ設定あたりは参考まで

6. これから複数台作成するので、一旦インスタンスを停止しAMI化します。

7. AMI化が終われば、再度スタートします。

8. インスタンスが起動したら、1台目のMariaDB Galera Clusterを起動します。

 

9. 起動状況を確認します。

 

10. 2台目を作成するため、AMIよりインスタンス起動させます。※IPは2台目(10.0.2.11)

11. 起動したら、MariaDBの設定を2台目用に加工します。

 

12. 3台目を作成するため、AMIよりインスタンス起動させます。※IPは3台目(10.0.2.12)

13. 起動したら、MariaDBの設定を3台目用に加工します。

14. すべてのクラスターが起動しているのを確認後、サブネットの前段にELBを配置して3306ポートを負荷分散します。

15. アプリ側からはELBのDNS名とポート番号3306を指定して接続させます。

 

以上です。

実際利用してみてのパフォーマンスは3台目以降はノード同士が同期し合うネットワークがボトルネックなのでしょうか。単にキャッシュヒット率が下がるからなのでしょうか。パフォーマンスの伸び率は落ち着いてしまいます。

 

けれどELBで負荷分散できちゃうし、すべてマスターという心強さ、名前からしてすでにカッコイイので気に入っています。

愛媛県松山市でWeb開発一筋15年、700サイト以上の構築実績!

Webサイト制作・システム開発・スマホアプリ開発・組込ソフトウェア開発ならアイムービックにお任せ下さい。