maxscaleにはbinlogrouterなる機能がある。
なお、maxscaleのバージョンは2.2、mariadbのバージョンは10.3で確認しています。
これは以下のようなイメージで、バイナリログを蓄積し、他slaveへ伝播させる中継機能を持つ。
---------- mariadb master IP:192.168.35.11 ---------- | | (replication) | ---------- maxscale binlogrouter IP:192.168.35.12 ---------- | | (replication) | ---------- mariadb slave IP:192.168.35.13 ----------
これはmysqlbinlogのremote機能にも似ているが、
通常のレプリケーションと同じように扱える利点があり、
さらにCDC(Change Data Capture)という機能を利用することで、
Kafkaなんかと連携することも可能らしい。
面白いアプローチだなと思いつつ、使いどころが難しい。。。
とりあえず、構築手順だけ残しておく。
・master(192.168.35.11)
$ sudo mysql_secure_installation $ sudo mysql -u root -p [MariaDB]> CREATE USER 'admin' IDENTIFIED BY 'admin1234'; [MariaDB]> GRANT ALL PRIVILEGES ON *.* TO 'admin';
・binlogrouter(192.168.35.12)
$ sudo mkdir /var/lib/maxscale/binlog $ chown maxscale:maxscale /var/lib/maxscale/binlog
/etc/maxscale.cnf
[Replication] type=service router=binlogrouter user=admin passwd=admin1234 server_id=99 binlogdir=/var/lib/maxscale/binlog mariadb10-compatibility=1 mariadb10_master_gtid=1 [Replication Listener] type=listener service=Replication protocol=MariaDBClient port=13306
$ mysql -h 127.0.0.1 -P 13306 -u admin -padmin1234 [MariaDB]> CHANGE MASTER TO MASTER_HOST='192.168.35.11', MASTER_PORT=3306, MASTER_USER='admin', MASTER_PASSWORD='admin1234', master_use_gtid=slave_pos; [MariaDB]> start slave;
※slave_posは最初は空なので、場合によっては、「SET GLOBAL gtid_slave_pos=’XXX’;」が必要。
ここまでで、masterとbinlogrouterのレプリケーション関係が構築された。
binlogrouterはバイナリログしか持っていないので、slave_posは「欲しい状態」を指定すればよい。
・slave(192.168.35.13)
$ mysqldump -h 192.168.35.11 -u admin -padmin1234 --master-data=2 --single-transaction --routines --all-databases > master.sql $ mysql -u admin -padmin2612 < master.sql $ mysql -u admin -padmin2612 [MariaDB]> SET GLOBAL gtid_slave_pos='{master.sqlファイルに書いてあるGTIDポジション}'; [MariaDB]> CHANGE MASTER TO MASTER_HOST='192.168.35.12', MASTER_PORT=13306, MASTER_USER='admin', MASTER_PASSWORD='admin1234', master_use_gtid=slave_pos; [MariaDB]> start slave;
という手順にて、binlogrouterを介したレプリケーションができる。
あとは、有効な使い所を探すべし。。
以上
コメントがあればどうぞ