レプリケーションでは、役割ごとにサーバーを以下のように呼びます。
- 読み書き可能なサーバー:プライマリー (マスター等)
- 読み取りのみ可能なサーバー:レプリカ (セカンダリ/スレーブ/スタンバイ等)
なお、レプリケーションとバックアップの違いは以下のとおりです。
レプリケーション | バックアップ | |
---|---|---|
読み取り性能の向上 | ⭕️ある (レプリカも読み取りに使える) | ❎ない |
可用性 | ⭕️高い (レプリカを予備として使える) | ❎低い (リストアの時間が必要) |
複製するデータ | 更新ログ (MySQL ではバイナリログ) | 完全なデータ |
コスト | ❎高い (レプリカのサーバー代) | ⭕️低い |
関連記事:データベースの基礎知識編 | |||||
---|---|---|---|---|---|
学習ロードマップ | |||||
---|---|---|---|---|---|
レプリケーションの仕組み
レプリケーションは、以下の仕組みで動作します。
MySQL のレプリケーション
PostgreSQL のレプリケーション
レプリケーションでは、プライマリーサーバーに障害が発生すると、自動でレプリカサーバーがプライマリーに昇格します。
MySQL でレプリケーションを設定
MySQL 8.0.38 を利用して、実際にレプリケーションを設定してみます。
プライマリー側の設定
sudo vim /etc/my.cnf
server-id=1 gtid-mode=on enforce-gtid-consistency=on
sudo systemctl restart mysqld
mysql -u root -p
CREATE USER 'repl'@'192.0.2.3' IDENTIFIED BY 'Repl_1234';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.0.2.3';
eixt;
mysqldump -u root -p --single-transaction --triggers --routines --events --all-databases > dump.sql
rsync dump.sql user@192.0.2.3:~/
レプリカ側の設定
sudo vim /etc/my.cnf
server-id=2 read_only gtid-mode=on enforce-gtid-consistency=on
sudo systemctl restart mysqld
mysql -u root -p < dump.sql
mysql -u root -p
CHANGE REPLICATION SOURCE TO
SOURCE_HOST = '192.0.2.2',
SOURCE_USER = 'repl',
SOURCE_PASSWORD = 'Repl_1234',
SOURCE_AUTO_POSITION = 1,
GET_MASTER_PUBLIC_KEY=1;
SOURCE_HOST = '192.0.2.2',
SOURCE_USER = 'repl',
SOURCE_PASSWORD = 'Repl_1234',
SOURCE_AUTO_POSITION = 1,
GET_MASTER_PUBLIC_KEY=1;
START REPLICA;
動作確認
CREATE TABLE rep(id int);
INSERT INTO rep VALUES(1);
SELECT * FROM rep;
+------+ | id | +------+ | 1 | +------+
SELECT * FROM rep;
+------+ | id | +------+ | 1 | +------+
SHOW REPLICA STATUS \G
関連記事
学習ロードマップ | |||||
---|---|---|---|---|---|
関連記事:データベースの基礎知識編 | |||||
---|---|---|---|---|---|
関連記事:データベース設計 | |||||
---|---|---|---|---|---|