はじめに
MariaDB Galera Clusterでマルチマスタレプリケーションをキメているみなさんこんにちは。
マルチマスタの場合、クラスタを構成する各ノードで衝突が起きないようにGaleraがイイ感じにしてくれてるわけですが、AUTO_INCREMENTもイイ感じにしてくれているようです。
AUTO_INCREMENT
そもそもAUTO_INCREMENTって何という方は前回記事を書きましたのでご参照ください。
上記の記事にも書いていますが、マルチマスタの場合、クラスタサイズ分のINCREMENTを設定し、OFFSETは1ずつズラす必要があります。
wsrep_auto_increment_control
そこで登場するのがこのパラメータです。
wsrep-auto-increment-control - Galera Cluster Documentation
まさにクラスタ内のAUTO_INCREMENTで使う値をイイ感じにしてくれると書いてますね!
Galera用語で言うところのPrimary Componentsに接続しているノードの数にincrementとoffsetを調節してくれます。これによって2つのノードが同じincrementの値を使う可能性を下げてくれます。
defaultでONのパラメタなので、特に気にする必要はないですが、シングルマスタの場合は明示的にOFFにしてもいいかもしれません。
値を確認してみる
検証環境で実際に確認してみました。以下、3ノードのクラスタです。
[root@mariadb1 ~]# mysql -u root -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 3 |
+--------------------+-------+
[root@mariadb1 ~]# mysql -uroot -e "SHOW VARIABLES LIKE '%auto_inc%';"
+------------------------------+-------+
| Variable_name | Value |
+------------------------------+-------+
| auto_increment_increment | 3 |
| auto_increment_offset | 2 |
| wsrep_auto_increment_control | ON |
+------------------------------+-------+
[root@mariadb2 ~]# mysql -uroot -e "SHOW VARIABLES LIKE '%auto_inc%';"
+------------------------------+-------+
| Variable_name | Value |
+------------------------------+-------+
| auto_increment_increment | 3 |
| auto_increment_offset | 3 |
| wsrep_auto_increment_control | ON |
+------------------------------+-------+
[root@mariadb3 ~]# mysql -uroot -e "SHOW VARIABLES LIKE '%auto_inc%';"
+------------------------------+-------+
| Variable_name | Value |
+------------------------------+-------+
| auto_increment_increment | 3 |
| auto_increment_offset | 1 |
| wsrep_auto_increment_control | ON |
+------------------------------+-------+
incrementはクラスタサイズになっていて、offsetはちゃんとズレてますね!
おわりに
逆にマルチマスタじゃないひとのほうが気を付けるべきパラメータでしたね。
参考
- Auto increments in Galera
- MariaDBでGalera Clusterを構成する(CentOS 7使用) ... 構築メモで、wsrep_auto_increment_controlはOFFにしている。マルチマスタで使うかどうかは明示していない。
- MariaDB Galera Cluster での AUTO_INCREMENT の扱いについて ... IDがINTだと枯渇しちゃうから気を付けようねという記事。確かに。
- Multi-Valued INSERTs, AUTO_INCREMENT & Percona XtraDB Cluster ... マルチマスタの場合、PK重複でレプリケーションが壊れてしまう例を示す。master-slave構成ではもっとも高いINCREMENTはmasterが持つべきであり、その構成の場合slaveはwsrep_auto_increment_controlをOFFにすべきと指摘している