元のPostgreSQLの設定にレプリケーションに必要な設定項目を追加するレプリケーション用のユーザーを作って、外から繋げられるように許可するレプリケーション先のサーバで、pg_basebackupでデータベースをコピーするレプリケーション先のサーバを起動すると、同期を開始する(完了!)という感じです。Logging)という変更内容のログを書き出しているこの仕組みにより、突然クラッシュした場合でも、データベースを正しい状態に保ちながら、安全に変更を反映して再開できるある時点のデータベースファイルを保存しておいて、そこにWALを順次適用していけば、最新のデータベースを再現できるレプリケーションでは、WALをマスターからスタンバイに転送して、それをスタンバイ側で適用することで、同一のデータベースの複製を作っている通常のWALだとレプリケーションに必要な情報が足りないので、少し内容を充実させたWALを書き出すように変更が必要スタンバイの最初のデータベースの複製はpg_basebackupでネットワーク越しに簡単にできる。promoteWALをアーカイブしておくことで、任意の時点を再現(復元)することができる。md5(xxx.xxx.xxx.xxxの部分にレプリケーション先のサーバのIPv4アドレスを指定)(xxxx:xxxx::xxxxの部分にレプリケーション先のサーバのIPv6アドレスを指定)ここで一度PostgreSQLを再起動する。restartファイアウォールで接続を許可PostgreSQLのポートに、レプリケーション先のサーバから接続できるように許可する。ここでは5432で実行しているものと仮定する。firewall-cmdとufwの例をあげておく。tcp空のクラスタを作成しておくレプリケーション先となるサーバで、PostgreSQLをインストールして、データディレクトリを空にしておく。PostgreSQLは同じバージョンを使用すること。(違うバージョンでレプリケーションする方法もあるが、ここでは説明しない)だいたい/var/lib/pgsql/9.2/dataとか/var/lib/postgresql/11/mainとか。今回の目的以外でPostgreSQLを使っていないなら、実行を止めて、削除を行う。利用中の場合は、新しいクラスタを作成すること。/var/lib/postgresql/11/mainpg_basebackupでまるごと複製してくるレプリケーション先となるサーバから実行。0002設定に問題がなければ、接続して複製が開始される。5432でサービスを実行していないなどと言われる場合は、pg_hba.confの設定、ファイアウォールの設定などで、マスターに接続できる条件が整っていない。postgresql.confに設定するレプリケーション先となるサーバのpostgresql.confにホットスタンバイの設定を追記する。データディレクトリ内のpostgresql.confではなく/etc/postgresql/11/main/postgresql.conf(ディレクトリ名はバージョンとクラスタ名による)が使われるので、ホットスタンバイに限らず、必要な設定は移行しておくこと。onついでにpg_hba.confも見直しておく前項のようにデータディレクトリの中のpg_hba.confを読み込むとは限らない。/etc/postgresql/〜の場合はそちらにコピーして今後はそちらで管理するようにするか、下記を参照して設定し直すこと。ここでは、サーバ移転(引っ越し)や、待機サーバを本番に昇格することを想定し、Mastodonの実行に必要な設定と、マスターとしてレプリケーションを受け付けるための設定を合わせて記載している。データベース名はmastodon_productionとしているが、Mastodonの設置が初期の頃の場合はmastodonだったりするので、/home/mastodon/live/.env.productionのDB_NAMEを参照するなどして自分の環境に合わせて設定すること。postgresユーザーがソケットにより接続した場合だけ色々変更できるようにする。_EOS_レプリケーション先のサーバを起動するここまで来たら、あとは起動するだけで完了。自動的にrecovery.confに基づいて、マスターからWALを受け取り、レプリケーションを開始する。start本番サーバに切り替える障害の時は不要だが、マスターがまだ動いている場合は停止する。マスターと同期の完了したスタンバイを、本番サーバに切り替える。promote切り替えが完了すると、recovery.confがrecovery.doneにリネームされる。余談pg_basebackupが優秀なので、コイツを使って、手元のマシンにバックアップだけとるという手もある。レプリケーションは複数ぶら下げたり、多段にカスケードすることもできる。今回、スタンバイの更新を待って動作する同期レプリケーション、待たない非同期、WALがシンクロするのを待つか、など細かい設定については省略したので、各自で調べられたし。バージョン違いでレプリケーションしたい場合は、ロジカルレプリケーションという方法がある。