会社の検証機でMaxscaleのバージョンを1.2.1→1.4.3へ上げたところ、ちょっと引っかかったのでその備忘。
MaxscaleはCentOS 7にインストールしていたので、そのまま「yum update maxscale」でアップデートした…のだけど、その後にmysqlコマンドでDBを指定してログインしようとしたところ、ログインできなかった。で、何故かDB名を指定せずにコマンドを打つとログインできる。

以前、maxscaleユーザの権限を適切に設定してなかったので、とりあえず見直しをしてみたのだけど、その辺りはちゃんと設定されていた。
なんだろうなぁ…と少し引っかかったのだけど、こちらをみるとどうも1.4系からは追加でgrant文が必要になったようだ。
DB側で以下のSQLを実行してやり、無事ログインできるようになった。


Maxscaleとアプリケーションサーバが同居したサーバで負荷テストを行ったところ、どうも途中でDBとの通信が失敗したりする部分があった。
で、なんでなんだろと調べていく際にssコマンドを実行したところ…

[root@test-server01 ~]# ss -nap | grep ':3306' | wc -l
24299

…えっΣ(゚д゚ )
3306って、確かにMaxscaleのポートだけど…
どうも、すべてTIME-WAIT状態でローカルのTCPポート(CentOS7のデフォルトのローカルポート範囲が「61000-32768=28232」)を使い潰していたようだ。通信内容...


会社のシステム(Maxscale経由でDBに接続)で負荷テストをしていたところ、不可解な接続エラーが発生していた。どうも新しいセッションが作成出来ないとの事なのだが、後ろのMariaDB側のMax Connection値は余裕がある。で、いろいろと調べていたところ、Maxscaleのエラーログに以下のようなエラーが出ていた。

2016-04-26 16:53:56   Error 24, Too many open files. Failed to accept new client connection.

Oh...(´・ω・`)

どうやら、ファイルディスクリプタが上限を超えてし...


仕事でMaxscaleを利用しているのだが、Limitation and Knownを読んでなかったので読むことにした。
そんなに文章量も無いので、以下重要そうなトコだけ抜粋して記述していく。

MySQL Serverのハンドシェイクに圧縮は含まれない

Compression is not included in MySQL server handshake

Galera Cluster Monitorではデフォルトのマスターは「wsrep_local_index」が最も低いノードが対象となる

The default master selection is b...


Maxscaleについて調べていたところ、中継するSQL文の内容に応じて、指定したサーバにSQLを飛ばすように出来るフィルター機能(Named Server Filter)があるようなので、試してみる事にした。
なお、検証に用いたMaxscaleのバージョンは1.3.1を利用している。

今回は、SQL文に「five」という文字列があった場合は特定のサーバに行く、というような記述をしてみる。

●/etc/maxscale.cnf(Before)

[maxscale]
threads=4 # 同時処理数
log_messages=1
log_trace=1
logdir=/var...

MaxscaleでルーティングするSQLクエリの書き換えを行う

Maxscaleについて調べていたところ、中継するSQLクエリを正規表現で書き換えてDB側に伝える機能(Regex Filter)があるようだったので、少し触ってみる事にした。
※Maxscale 1.3.0以降で利用可能になったらしい。

書き換えルールについては、Maxscaleの設定ファイルに事前に書いておく必要があるので、以前書いたこちらの記事の設定を元にして記述していく。

●/etc/maxscale.cnf(Before)

[maxscale]
threads=4 # 同時処理数
log_messages=1
log_trace=1
logdir=/var/lo...

Maxscaleで特定のノードを優先的にマスターとして取り扱うようにする

※この設定は、Maxscale 1.3.1以降で利用可能。それ以前では動作しなかったので注意。
MariaDBのLBとして利用出来るMaxscaleだが、Read/Write Spliterとして動作させた場合、通常はwsrep_local_indexの値がもっとも若い番号(基本的には0)がマスター(書き込みノード)として扱われる。

で、このマスターに障害が発生した場合、Maxscale側でマスターを自動的に切り替えて書き込みを継続して出来るようにするのだが、Galera Clusterが復旧してwsrep_local_indexの値が変わると、自動的にMasterが切り替わってしま...


Maxscaleのチュートリアルを読んでいたら、Corosync & Pacemakerを用いてのMaxscaleのHA化についてあったので、試してみる事にした。
今回利用するOSはCentOS 7を用い、Maxscaleはインストール済、SELinuxとFirewalldは無効化済とする。

なお、同じHAのカテゴリとしてLsyncdを用いる手法も紹介されていたが、正直これは単にmaxscale.confを自動同期させるだけでそこまで役に立つものでもないので無視する。

1.Corosync & Pacemakerのインストール

まずは、HA化に必要となるCorosyn...


Maxscaleの設定ファイルに記述するパスワードを暗号化する

Maxscaleでは、設定ファイルにモニタリング・接続するGalera ClusterのID/PWを記述する必要があるのだけど、そのままの生パスワードだと、やはりセキュリティ的によろしくない。
というわけで、MaxscaleにはそのパスワードをHash化して記述することができるようになっている。

まず、以下のコマンドで鍵ファイルを設置する「/usr/local/maxscale」ディレクトリを作成し、maxscale用の鍵ファイル「.secrets」を生成する。

mkdir -p /usr/local/maxscale
maxkeys /usr/local/maxscale/

...


Maxscaleで指定したサーバをメンテナンスモードにする

Maxscaleを使っていて、再起動などで後ろにいる特定のDBサーバに接続させないようにしたい時もあるだろう。
そんなときは、指定したDBサーバをメンテナンスモードにすればよい。

Maxscaleで特定サーバをメンテナンスモードにしたい場合は、maxadminコマンドで以下のように実行すればよい。

maxadmin -p パスワード(初期:mariadb) set server サーバ名 maintenance

[root@BS-PUB-GFRONT-01 ~]# maxadmin -p mariadb list servers
Servers.
--------------...

MariaDB+GaleraCluster用のLBソフト『Maxscale』を使ってみる

MariaDB+GaleraClusterの場合、各ノードで書き込み・読込みがされるのだけど、そうなると同じ行に同時タイミングで複数ノードから書き込みをしようとしてデッドロックになる事がある。
これを防ぐため、MariaDBでは専用のロードバランサー用に『Maxscale』というものが用意されている。

実際、会社でも使っているソフトなので、今回はこれをインストールし、GaleraClusterに接続してみよう。

1.Maxscaleの概要

Maxscaleの概要についてだが、細かく説明するとすごく大変そうなので、とりあえず以下のようなイメージだけ覚えておくと良いだろう。

...