MySQL関連のミドルウェアとしてMySQL Routerというものがあります。MySQL Routerは、
今回はMySQL Routerを使い、
MySQL Routerのインストール
MySQL RouterはLinux、
$ wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm $ sudo rpm -Uvh mysql80-community-release-el7-3.noarch.rpm $ sudo yum install mysql-router
これでインストール完了です。mysqlrouterコマンドを利用して、
$ mysqlrouter -V MySQL Router Ver 8.0.19 for Linux on x86_64 (MySQL Community - GPL)
MySQL Routerのバージョンが適切に表示されました。また、--help
または-?
でヘルプを確認することができます。
もし、
MySQL Routerの設定
yumコマンドを用いてインストールしたMySQL Routerは、/etc/
をデフォルトの設定ファイルとして読み込みます。コメントアウト以外の部分を表示してみると、
$ grep -v '#' /etc/mysqlrouter/mysqlrouter.conf [DEFAULT] logging_folder = /var/log/mysqlrouter runtime_folder = /var/run/mysqlrouter config_folder = /etc/mysqlrouter [logger] level = INFO [keepalive] interval = 60
MySQL RouterはMySQLサーバーのmy.
の設定と同じように、[section name]
のセクション名とoption名 = 値
の形式で記述します。今回は、
$ vim /etc/mysqlrouter/mysqlrouter.conf ~ ~ ## 下記設定を追加 [routing] bind_address = 127.0.0.1 bind_port = 3318 destinations = 127.0.0.1:3308, 127.0.0.1:3309 routing_strategy = round-robin
今回設定したオプションは以下の通りです。
オプション名 | 説明 |
---|---|
bind_ |
アプリケーションで接続するホスト情報を設定 |
bind_ |
アプリケーションで接続するポート情報を設定 |
destinations | カンマ区切りでルーティングの宛先を設定 |
routing_ |
MySQL Routerがどのようにルーティングするかを設定 |
より詳細な設定については、
MySQL Roouterの動作確認
それでは設定したMySQL Routerを起動して、
# systemctl start mysqlrouter # systemctl status mysqlrouter ● mysqlrouter.service - MySQL Router Loaded: loaded (/usr/lib/systemd/system/mysqlrouter.service; disabled; vendor preset: disabled) Active: active (running) since Thu 2020-03-19 02:25:56 JST; 13s ago Main PID: 22387 (main) CGroup: /system.slice/mysqlrouter.service └─22387 /usr/bin/mysqlrouter -c /etc/mysqlrouter/mysqlrouter.conf
起動が確認できました。
実際にログファイル/var/
を確認してみましょう。
# tail -f /var/log/mysqlrouter/mysqlrouter.log 2020-03-19 02:25:56 keepalive INFO [7f3728c9f700] keepalive started with interval 60 2020-03-19 02:25:56 keepalive INFO [7f3728c9f700] keepalive 2020-03-19 02:25:56 routing INFO [7f3723fff700] [routing] started: listening on 127.0.0.1:3318, routing strategy = round-robin 2020-03-19 02:26:56 keepalive INFO [7f3728c9f700] keepalive
127.
でLISTENするようになりました。
ssコマンドで確認してみると、
$ ss -natu | grep 3318 tcp LISTEN 0 128 127.0.0.1:3318 *:*
mysqlクライアントを利用して127.
$ mysql -u root -h 127.0.0.1 -P 3318 -p mysql> SELECT @@port; +--------+ | @@port | +--------+ | 3308 | +--------+ 1 row in set (0.00 sec)
ポート3308のMySQLサーバーに接続されました。もう一度127.
$ mysql -u root -h 127.0.0.1 -P 3318 -p mysql> SELECT @@port; +--------+ | @@port | +--------+ | 3309 | +--------+ 1 row in set (0.02 sec)
今度はポート3309のMySQLサーバーに接続しました。実際に何度か接続を繰り返すと、
続いて、kill
コマンドでMySQLのプロセスを落とし、
mysql> SELECT @@port; +--------+ | @@port | +--------+ | 3308 | +--------+ 1 row in set (0.00 sec)
何度接続しても、
このように、
まとめ
今回はMySQL Routerを用いてスレーブの負荷分散として、