mariadb+galeraclusterの運用事例(mysql勉強会2016-01-28)

46
MariaDB+GaleraCluster の のののの のののののののののののの のの のの 1 2016/01/28

Upload: yuji-otani

Post on 14-Feb-2017

2.903 views

Category:

Technology


2 download

TRANSCRIPT

MariaDB+GaleraClusterの

運用事例

株式会社インテリジェンス大谷 祐司

1

2016/01/28

2

・山口県下関出身の 35 歳・インテリジェンスの新規事業チームの開発責任者・企画からアプリ、インフラまで幅広くやっています・車とプログラミングを愛しています

・2児の父親です  (次男が 9日前に生まれました )

自己紹介

・MariaDBと GaleraCluster概要

・技術を選択したポイント

・運用の振り返り (良かった点、注意点 )

・きになるポイント FAQ

本日お話しすること

3

4

昨年7月に立ち上げた

転職サイト「MIIDAS」で

MariaDB/GaleraClusterを採用しました

5

MIIDASで

使っている技術

OS : CentOS7

Webサーバ : nginx1.9

DB :MariaDB10.0

インフラ管理 : Ansible

Web開発言語 : Hack(hhvm3.7)

フレームワーク : FuelPHP1.7

バッチ開発言語 : Golang

使っている技術

6

サーバ構成 (さくらクラウド )

7

Internet

LBWeb/Cache DB

BatchBackup

8

MariaDBの概要

MariaDB概要

・MySQLを forkして開発された DB

・ 2010年に最初のリリース

・最新版は 10.1系で 2015年 10月リリース

・ GPLのオープンソース

MariaDB概要

・MySQLとの互換性を保ちながら、性能や  利便性を高めるための独自機能を備えている

・複数の Linuxディストリビューションで標準採

用  (Fedora, RHEL, Arch Linuxなど )

・全ての機能がオープンソースで利用可能

MariaDB概要

・最新の 10.0系はMySQL5.5がベース

・MariaDB Galera Clusterを提供

・ InnoDB互換の Perconaの XtraDBを採用

MariaDBの機能

・スレッドプール (MySQLは有償版のみ )

・独自ストレージエンジン  (Cassandra, CONNECT, FederatedX etc)

・ InnoDBのデータ暗号化

・スロークエリログに EXPLAIN結果を出力

MariaDBの機能

・ SQL: DELETE ... RETURNING

・ SHOW EXPLAINコマンド

・並列レプリケーション (MySQL5.7〜 )

・マルチソースレプリケーション (MySQL5.7〜 )

・ InnoDBのページ圧縮 (MySQL5.7〜 )

14

MariaDBを選択した理由

・MariaDB Galera Clusterが利用できる  → Perconaでも利用できるが、より情報が多い

・今後シェアの拡大が予想されるので、社内で  運用ノウハウを持ちたい

・新しいサービスだから、技術的に挑戦しよう!

15

GaleraClusterの概要

GaleraCluster概要

・マルチマスタの同期レプリケーション

・ wsrepというプラグイン使ってクラスタを制御

GaleraCluster概要

・フィンランドの Codership社によって開発

・ 2007年から開発、 2011年に初期リリース

・ GPLのオープンソース

・ 2012年からMariaDB/Perconaに提供  (MariaDB Galera Cluster/XtraDB Cluster)

GaleraCluster概要

・MySQLでもプラグインを入れて利用可能  →パッチが当たったMySQL5.5/5.6を配布中

・最低 3台から構築できる  (1台が落ちても動作を続けられる )

・どのサーバにも Read-Write可能

・ binlogではなく、 APIでデータを同期

GaleraCluster概要

・オンラインでサーバの追加 /削除が可能

・構成サーバ同士で監視し、落ちたサーバは  クラスタから除去される

・行レベルの並列レプリケーションを実行

・my.cnfに wsrepの設定追加が必要

マルチマスタの仕組み

サーバ追加時

・ rsyncで新規サーバにデータをコピー

rsync

マルチマスタの仕組み

データの同期

・ wsrepが APIとなり命令を他サーバに伝達

wsrep wsrep

wsrep

22

・ノウハウがあるMySQLベースの運用

・ DBが単一障害点にならない

・後からスケールアウトできる状態

・高い信頼性 (データの一貫性、可用性 )

・低コストでの導入

実現できたこと

23

運用の振り返り

24

・パフォーマンスが安定している  →高トラフィックはまだまだこれから

・サービス無停止で様々なことができる  (  ディスク容量追加、パラメータ変更 etc)

・アプリケーションの特別な対応が不要

・データ同期の遅延を意識しなくてよい

採用して良かった点

25

・ユーザ情報も同期される

・ auto increment

・対応ストレージエンジンが限定される

・停止 -再開の順番

・パラメータチューニング

・デッドロックの発生

気をつけるポイント

26

・ GRANT文もレプリケーションされる  →サーバごとに ID/PASSを変更できない

・複数台で同一ユーザを使えば問題なし

ユーザ情報も同期される

27

・1ずつ増えることが保証されない  →サーバの台数ずつ増加する・数値の上限に気をつける必要がある

auto increment

28

・ GaleraClusterに対応しているのが InnoDBの

・Mroonga →を採用 全サーバに登録 /更新が必

・ Create/Alter文はレプリケーションされる

対応ストレージエンジンが限定される

29

・全台停止させてから再開する場合には、  最後に停止させたサーバから起動する

・順番が違うとエラーでサーバ追加できない  (更新が全く行われていなければ大丈夫 )

停止→起動の順番

30

innodb_flush_log_at_trx_commitを 0に変更→Write性能が 3倍向上

InnoDBログファイル書き込みタイミングを変更

公式サイト「全サーバ一斉に停止しなければ他のサーバからデータ復旧可能」

パラメータチューニング

31

リリースして少しトラフィックが増えると、デッドロックが稀に発生。以下で対応。

・トランザクション分離レベルの変更  (Repeatable Read→Read Committed)

・ innodb_locks_unsafe_for_binlogを ONに変更  →ロックの競合を減らして同時実行性能を向上

・書き込みのクエリを1台に集約  (nginx stream option→maxscale)

デッドロックの発生

32

・MySQL用プロキシ

・MariaDBにより 2015年にリリース

・更新と参照でクエリを分散できる

・ GaleraCluster専用の設定がある  →クラスタを監視して落ちたサーバを除外

MaxScaleについて

33

MaxScaleの導入

DB

Internet

LB

導入前:全てのクエリを 1対 1で処理

Web/Cache

MaxScaleの導入

DB

Internet

LB

変更後:参照系は全てのサーバに分散

Web/Cache

MaxScaleの導入

DB

Internet

LB

変更後:更新系を1台のサーバに集約

Web/Cache

36

GaleraCluster

きになるポイント FAQ

37

Read:パフォーマンス劣化しない

Write:パフォーマンス劣化する

Read Write

スケールアウトによるパフォーマンス

※検証環境での 1分間のクエリ実行数  mysqlslapで計測。

38

多数決の方式を採用

3台構成で1台が分断されると2台の方が

正しいものとして動作を継続

動作停止

動作を継続

クラスタ分断時の動作

39

読み込みは同等、書き込み性能は準同期レプリ

ケーションの方が高速

準同期レプリケーションとの速度差

Read Write※検証環境での 1分間のクエリ実行数  mysqlslapで計測。

40

・ APIは行ベースの binlogを利用する

・ binlogはデフォルトで各サーバに分散される

・my.cnfの設定で、全サーバに全ログを出力できる  (log-slave-updates = 1)  →特定サーバのレプリケーションが可能に

binlogはどう扱われるのか

41

さいごに

42

MariaDB/GaleraClusterに出会って、改めて

MySQLは素晴らしいと思いました

これからの進化が本当に楽しみです

43

MySQLという優れたデータベースに

選択肢があることは素晴らしい!

44

ご静聴ありがとうございました

45

この資料は、正確な記述を心がけて作成しており有用

だと思われますが、内容の正確性や有用性を作者は保

証しません。また、本資料は作者個人が作成したもの

であり、所属する組織・団体の見解等を表すものでは

ありません。

免責事項