- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2019-11-30T20:06:13+09:00","default:nowsky","nowsky")
#author("2020-01-03T01:10:30+09:00","default:nowsky","nowsky")
*MaxScale [#s1014f46]
[[MariaDB MaxScale>+https://mariadb.com/kb/en/maxscale/]]
MariaDBのトランザクションをバックグラウンドのMariaDBにロードバランスするソフトウェア。
MaxScaleはMariaDBに特化しているが、同様のソフトとしてMySQL Routerも存在する。
ソフト単体でMaxScale自体の冗長化は出来ない為、完全二重化を行う為にはKeepalivedも組み合わせて、
VirtualIP構成を取る必要がある。
~
*インストール [#bae777be]
&size(16){&font(b){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 tcl cmake uuid libuuid-devel xz-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.4 -DBUILD_TOOLS=ON
# 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
~
&size(16){&font(b){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
~
&size(16){&font(b){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
}
~
&size(16){&font(b){4. コンフィグファイル};};
今回は下記構成を想定してコンフィグを作成する。
細かいオプションについては[[公式ドキュメント>+https://mariadb.com/kb/en/mariadb-maxscale-23-mariadb-maxscale-configuration-usage-scenarios/]]を参照。
下記ではサンプルのみ掲載。
|ホスト |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 |
#region(コンフィグサンプル)
# vi /etc/maxscale.cnf
-----
[maxscale]
threads=auto
log_warning=1
log_notice=0
log_info=0
logdir=/var/log/maxscale
cachedir=/var/lib/maxscale
[MariaDB-Monitor]
type=monitor
module=mariadbmon
servers=DB1,DB2
user=maxscale
password=max-pass
replication_user=maxscale
replication_password=max-pass
monitor_interval=2000
auto_failover=true
auto_rejoin=true
[RO-Service]
type=service
router=readconnroute
servers=DB1,DB2
user=maxscale
password=max-pass
router_options=slave
[RW-Service]
type=service
router=readwritesplit
servers=DB1,DB2
user=maxscale
password=max-pass
master_failure_mode=error_on_write
master_reconnection=true
transaction_replay=true
causal_reads=false
max_slave_connections=100%
[RO-Listener]
type=listener
service=RO-Service
protocol=mariadbclient
address=0.0.0.0
port=3305
[RW-Listener]
type=listener
service=RW-Service
protocol=mariadbclient
address=0.0.0.0
port=3306
[DB1]
type=server
address=10.0.0.1
port=3306
protocol=mariadbbackend
[DB2]
type=server
address=10.0.0.2
port=3306
protocol=mariadbbackend
#endregion
~
*レプリケーション設定 [#n874edac]
MaxScaleのバックエンドをレプリケーション構成にしている場合、
Master停止時にSlaveを自動でMasterに昇格する事が出来る。
その場合、&font(b){GTIDレプリケーションを双方向に設定};した上、
MaxScaleから&font(b){レプリカメンバーの昇格・降格を行える様に権限を追加付与};する。
- [[SmartStyle TECH BLOG>+https://www.s-style.co.jp/blog/2018/05/1877/]]
- [[Qiita>+https://qiita.com/reioto/items/2ae56e9025ef711592ea]]
- [[MySQL>+https://www.ns-lab.org/wiki/?Linux/Source/MySQL]]
- MariaDB #01
・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';
・GTIDレプリケーション
> CHANGE MASTER TO MASTER_HOST='10.0.0.2', MASTER_USER='replicate', MASTER_PASSWORD='rep-pass', MASTER_USE_GTID=slave_pos;
> CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.XXXXXX', MASTER_LOG_POS=YYYYYY;
+--------------------------------------------+
| binlog_gtid_pos("mysql-bin.XXXXXX",YYYYYY) |
+--------------------------------------------+
| 0-NNN-NNN |
+--------------------------------------------+
- MariaDB #02
・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';
・GTIDレプリケーション
> CHANGE MASTER TO MASTER_HOST='10.0.0.1', MASTER_USER='replicate', MASTER_PASSWORD='rep-pass', MASTER_USE_GTID=slave_pos;
> CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.XXXXXX', MASTER_LOG_POS=YYYYYY;
+--------------------------------------------+
| binlog_gtid_pos("mysql-bin.XXXXXX",YYYYYY) |
+--------------------------------------------+
| 0-NNN-NNN |
+--------------------------------------------+
~
*ステータス確認 [#b34bca66]
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 │
└───────┴───────────┴──────┴─────────────┴────────────────────────────┴────────────┘