会社の検証機で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のRead Write Splittingでは、通常ではマスターは書き込みのみが割り当てられ、通常のSELECT文は割り振られないようになっている。
これを、マスターにもSELECT文を割り当てたい場合は、以下の設定値を「/etc/maxscale.cnf」に追記する。
master_accept_reads=true
仕事で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クエリを正規表現で書き換えて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 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では、設定ファイルにモニタリング・接続するGalera ClusterのID/PWを記述する必要があるのだけど、そのままの生パスワードだと、やはりセキュリティ的によろしくない。
というわけで、MaxscaleにはそのパスワードをHash化して記述することができるようになっている。
まず、以下のコマンドで鍵ファイルを設置する「/usr/local/maxscale」ディレクトリを作成し、maxscale用の鍵ファイル「.secrets」を生成する。
mkdir -p /usr/local/maxscale
maxkeys /usr/local/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の場合、各ノードで書き込み・読込みがされるのだけど、そうなると同じ行に同時タイミングで複数ノードから書き込みをしようとしてデッドロックになる事がある。
これを防ぐため、MariaDBでは専用のロードバランサー用に『Maxscale』というものが用意されている。
実際、会社でも使っているソフトなので、今回はこれをインストールし、GaleraClusterに接続してみよう。
1.Maxscaleの概要
Maxscaleの概要についてだが、細かく説明するとすごく大変そうなので、とりあえず以下のようなイメージだけ覚えておくと良いだろう。
...