MariaDB MaxScale
MariaDBのトランザクションをバックグラウンドのMariaDBにロードバランスするソフトウェア。
MaxScaleはMariaDBに特化しているが、同様のソフトとしてMySQL Routerも存在する。
ソフト単体でMaxScale自体の冗長化は出来ない為、完全二重化を行う為にはKeepalivedも組み合わせて、
VirtualIP構成を取る必要がある。
1. ビルド・インストール
今回はCentOS 8.0.1905・MaxScale v2.4.4でビルドを行う。
ライブラリインストールにdnfを用いているが、他ディストリを利用する時は読み替える。
# dnf install openssl-devel systemd-devel sqlite-devel pam-devel libcurl-devel gnutls-devel libgcrypt-devel # dnf install npm tcl cmake uuid libuuid-devel xz-devel # wget "https://github.com/mariadb-corporation/MaxScale/archive/maxscale-2.4.4.tar.gz" # tar zxvf maxscale-2.4.4.tar.gz # cd MaxScale-maxscale-2.4.4 # cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/maxscale-2.4.5 -DBUILD_TOOLS=Y -DBUILD_CDC=N # make # make install # ln -s /usr/local/maxscale-2.4.4 /usr/local/maxscale # ln -s /usr/local/maxscale/etc/maxscale.cnf /etc/maxscale.cnf
2. サービスファイル
最近のLinuxではsystemdを用いている為、MaxScale用のサービスファイルを準備する。
今回は実行ユーザとグループを決め打ちしている為、サービスファイルに直接埋め込む。
# groupadd maxscale # useradd -g maxscale -d /var/run/maxscale -s /sbin/nologin maxscale # vi /usr/lib/systemd/system/maxscale.service ----- [Unit] Description=MariaDB MaxScale Database Proxy After=network.target [Service] Type=forking Restart=on-abort PermissionsStartOnly=true User=maxscale Group=maxscale PIDFile=/var/run/maxscale/maxscale.pid ExecStart=/usr/local/maxscale/bin/maxscale -f /etc/maxscale.cnf Environment=ASAN_OPTIONS=abort_on_error=1 ExecStartPre=/usr/bin/install -d /var/run/maxscale -o maxscale -g maxscale ExecStartPre=/usr/bin/install -d /var/lib/maxscale -o maxscale -g maxscale TimeoutStartSec=120 LimitNOFILE=65535 LimitNPROC=65535 StartLimitBurst=0 WatchdogSec=60s NotifyAccess=all [Install] WantedBy=multi-user.target
3. 起動準備
サービスファイルの登録と各ディレクトリを作成して起動準備を行う。
# systemctl enable maxscale # mkdir /var/log/maxscale # chown maxscale.maxscale /var/log/maxscale # echo '/usr/local/maxscale/lib64/maxscale' > /etc/ld.so.conf.d/maxscale.conf # vi /etc/logrotate.d/maxscale_logrotate ----- /var/log/maxscale/*.log { ifempty missingok sharedscripts postrotate kill -USR1 `/usr/bin/pgrep maxscale` endscript }
4. コンフィグファイル
今回は下記構成を想定してコンフィグを作成する。
細かいオプションについては公式ドキュメントを参照。
下記ではサンプルのみ掲載。
ホスト | IPアドレス | レプリカユーザ | レプリカパスワード | ReadOnly | ReadWrite |
MariaDB #01 | 10.0.0.1 | replicate | rep-pass | - | TCP:3306 |
MariaDB #02 | 10.0.0.2 | replicate | rep-pass | - | TCP:3306 |
MaxScale | 10.0.0.3 | maxscale | max-pass | TCP:3305 | TCP:3306 |
コンフィグサンプル |
MaxScaleのバックエンドをレプリケーション構成にしている場合、
Master停止時にSlaveを自動でMasterに昇格する事が出来る。
その場合、GTIDレプリケーションを双方向に設定した上、
MaxScaleからレプリカメンバーの昇格・降格を行える様に権限を追加付与する。
・MaxScale接続ユーザ > CREATE USER 'maxscale'@'10.0.0.3/255.255.255.255' IDENTIFIED BY 'max-pass'; > GRANT SELECT ON mysql.user TO 'maxscale'@'10.0.0.3/255.255.255.255'; > GRANT SELECT ON mysql.db TO 'maxscale'@'10.0.0.3/255.255.255.255'; > GRANT SELECT ON mysql.tables_priv TO 'maxscale'@'10.0.0.3/255.255.255.255'; > GRANT SHOW DATABASES ON *.* TO 'maxscale'@'10.0.0.3/255.255.255.255'; > GRANT REPLICATION CLIENT ON *.* TO 'maxscale'@'10.0.0.3/255.255.255.255'; > GRANT SUPER ON *.* TO 'maxscale'@'10.0.0.3/255.255.255.255'; ・バイナリポジション確認 > SHOW MASTER STATUS\G; File: mysql-bin.XXXXXX Position: YYYYYY Binlog_Do_DB: Binlog_Ignore_DB: ・ダンプ取得 # mysqldump --all-databases -u root -p --master-data=2 --single-transaction --routines > dump-01.sql # cat dump-01.sql | grep MASTER_LOG_FILE | head -n 1 -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.XXXXXX', MASTER_LOG_POS=YYYYYY; ・GTID確認 > SELECT BINLOG_GTID_POS("mysql-bin.XXXXXX", YYYYYY); +--------------------------------------------+ | binlog_gtid_pos("mysql-bin.XXXXXX",YYYYYY) | +--------------------------------------------+ | 0-NNN-NNN | +--------------------------------------------+ ・インポート # mysql -f -u root -p < dump-02.sql # mysql -u root -p ・GTIDレプリケーション > STOP SLAVE; > SET GLOBAL GTID_SLAVE_POS = '0-NNN-NNN'; > CHANGE MASTER TO MASTER_HOST='10.0.0.2', MASTER_USER='replicate', MASTER_PASSWORD='rep-pass', MASTER_USE_GTID=slave_pos; > START SLAVE; > SHOW SLAVE STATUS\G;
・MaxScale接続ユーザ > CREATE USER 'maxscale'@'10.0.0.3/255.255.255.255' IDENTIFIED BY 'max-pass'; > GRANT SELECT ON mysql.user TO 'maxscale'@'10.0.0.3/255.255.255.255'; > GRANT SELECT ON mysql.db TO 'maxscale'@'10.0.0.3/255.255.255.255'; > GRANT SELECT ON mysql.tables_priv TO 'maxscale'@'10.0.0.3/255.255.255.255'; > GRANT SHOW DATABASES ON *.* TO 'maxscale'@'10.0.0.3/255.255.255.255'; > GRANT REPLICATION CLIENT ON *.* TO 'maxscale'@'10.0.0.3/255.255.255.255'; > GRANT SUPER ON *.* TO 'maxscale'@'10.0.0.3/255.255.255.255'; ・バイナリポジション確認 > SHOW MASTER STATUS\G; File: mysql-bin.AAAAAA Position: BBBBBB Binlog_Do_DB: Binlog_Ignore_DB: ・ダンプ取得 # mysqldump --all-databases -u root -p --master-data=2 --single-transaction --routines > dump-02.sql # cat dump-02.sql | grep MASTER_LOG_FILE | head -n 1 -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.AAAAAA', MASTER_LOG_POS=BBBBBB; ・GTID確認 > SELECT BINLOG_GTID_POS("mysql-bin.AAAAAA", BBBBBB); +--------------------------------------------+ | binlog_gtid_pos("mysql-bin.AAAAAA",BBBBBB) | +--------------------------------------------+ | 0-MMM-MMM | +--------------------------------------------+ ・インポート # mysql -f -u root -p < dump-01.sql # mysql -u root -p ・GTIDレプリケーション > STOP SLAVE; > SET GLOBAL GTID_SLAVE_POS = '0-MMM-MMM'; > CHANGE MASTER TO MASTER_HOST='10.0.0.1', MASTER_USER='replicate', MASTER_PASSWORD='rep-pass', MASTER_USE_GTID=slave_pos; > START SLAVE; > SHOW SLAVE STATUS\G;
MaxScaleに同梱されているmaxctrlコマンドで、メンバーDBの稼働状況を確認出来る。
レプリカメンバーの自動昇格を有効化している場合もmaxctrlコマンドで確認する。
# maxctrl list services ┌────────────────┬────────────────┬─────────────┬──────────────────┬───────────────┐ │ Service │ Router │ Connections │ Total Connections │ Servers │ ├────────────────┼────────────────┼─────────────┼──────────────────┼───────────────┤ │ RO-Service │ readconnroute │ 0 │ 1644 │ DB1, DB2 │ ├────────────────┼────────────────┼─────────────┼──────────────────┼───────────────┤ │ RW-Service │ readwritesplit │ 0 │ 77 │ DB1, DB2 │ └────────────────┴────────────────┴─────────────┴──────────────────┴───────────────┘ # maxctrl list servers ┌───────┬───────────┬──────┬─────────────┬────────────────────────────┬────────────┐ │ Server │ Address │ Port │ Connections │ State │ GTID │ ├───────┼───────────┼──────┼─────────────┼────────────────────────────┼────────────┤ │ DB1 │ 10.0.0.1 │ 3306 │ 0 │ Master, Running │ 0-NNN-NNN │ ├───────┼───────────┼──────┼─────────────┼────────────────────────────┼────────────┤ │ DB2 │ 10.0.0.2 │ 3306 │ 0 │ Relay Master, Slave, Running │ 0-NNN-NNN │ └───────┴───────────┴──────┴─────────────┴────────────────────────────┴────────────┘