MaxscaleでSQLクエリの内容に応じてルーティング先のDBサーバを指定する
Pocket

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/log/maxscale

[Splitter Service]
type=service
router=readwritesplit
servers=BS-PUB-GALERA-01,BS-PUB-GALERA-02,BS-PUB-GALERA-03
max_slave_connections=100%
user=maxscale
passwd=パスワード
localhost_match_wildcard_host=true
enable_root_user=true

[Splitter Listener]
type=listener
service=Splitter Service
protocol=MySQLClient
port=3306

[Galera Monitor]
type=monitor
module=galeramon
servers=BS-PUB-GALERA-01,BS-PUB-GALERA-02,BS-PUB-GALERA-03
user=maxscale
passwd=パスワード
monitor_interval=3000
use_priority=true

[CLI]
type=service
router=cli

[CLI Listener]
type=listener
service=CLI
protocol=maxscaled
address=127.0.0.1
port=6603

[BS-PUB-GALERA-01]
type=server
address=IPアドレス
port=3306
protocol=MySQLBackend
priority=1

[BS-PUB-GALERA-02]
type=server
address=IPアドレス
port=3306
protocol=MySQLBackend
priority=2

[BS-PUB-GALERA-03]
type=server
address=IPアドレス
port=3306
protocol=MySQLBackend
priority=3
Sponsored Links

●/etc/maxscale.cnf(After)

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

[NamedServerFilter]
type=filter
module=namedserverfilter
match=five
options=ignorecase
server=BS-PUB-GALERA-02

[Splitter Service]
type=service
router=readwritesplit
servers=BS-PUB-GALERA-01,BS-PUB-GALERA-02,BS-PUB-GALERA-03
max_slave_connections=100%
user=maxscale
passwd=パスワード
localhost_match_wildcard_host=true
enable_root_user=true
filters=NamedServerFilter

[Splitter Listener]
type=listener
service=Splitter Service
protocol=MySQLClient
port=3306

[Galera Monitor]
type=monitor
module=galeramon
servers=BS-PUB-GALERA-01,BS-PUB-GALERA-02,BS-PUB-GALERA-03
user=maxscale
passwd=パスワード
monitor_interval=3000
use_priority=true

[CLI]
type=service
router=cli

[CLI Listener]
type=listener
service=CLI
protocol=maxscaled
address=127.0.0.1
port=6603

[BS-PUB-GALERA-01]
type=server
address=IPアドレス
port=3306
protocol=MySQLBackend
priority=1

[BS-PUB-GALERA-02]
type=server
address=IPアドレス
port=3306
protocol=MySQLBackend
priority=2

[BS-PUB-GALERA-03]
type=server
address=IPアドレス
port=3306
protocol=MySQLBackend
priority=3

 

このように設定することで、文字列「five」が含まれているSQLが指定したサーバに向くことをクエリーログから確認できた。
なお、一応上下関係があるようで、Read/Write Splitの方が優先されるのか、INSERT文はそのままマスターノードに行った。

 

Pocket

Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。