PostgreSQLまたはPostgresは、15年以上にわたって活発に開発されてきたオープンソースのオブジェクトリレーショナルデータベース管理システム(ORDBMS)です。これは強力なデータベースサーバーであり、高いワークロードを処理できます。 PostgreSQLは、Linux、Unix、BSD、およびWindowsサーバーで使用できます。
マスター/スレーブデータベースレプリケーションは、あるサーバー(マスター)のデータベースから別のサーバー(スレーブ)のデータベースにデータをコピー(同期)するプロセスです。このプロセスの主な利点は、データベースを複数のマシンに分散することです。そのため、マスターサーバーに問題が発生した場合でも、同じデータを使用してリクエストを中断することなく処理できるバックアップマシンがあります。
PostgreSQLは、データベースを複製するいくつかの方法を提供します。バックアップの目的で使用でき、高可用性データベースサーバーを提供します。このチュートリアルでは、Ubuntu16.04サーバーにPostgreSQL9.6マスタースレーブレプリケーションをインストールして構成する方法を示します。ホットスタンバイモードを使用します。これは、PostgreSQLを深く学ぶための非常に良い出発点です。
私たちが行うこと:
- PostgreSQL9.6をインストールします。
- UFWファイアウォールを設定します。
- MASTERサーバーを構成します。
- SLAVEサーバーを構成します。
- PostgreSQLデータをMASTERからSLAVEにコピーします。
- テスト。
前提条件:
- 1Ubuntu16.04サーバー
- マスター -読み取りと書き込みの許可-IP:10.0.15.10
- 1Ubuntu16.04サーバー
- スレーブ -読み取り専用-IP:10.0.15.11
- ルート権限
このチュートリアルでは、PostgreSQL9.6の最新バージョンをインストールします。公式のUbuntuリポジトリでは、PostgreSQL 9.5のみが提供されているため、PostgreSQLリポジトリから最新バージョンを直接インストールする必要があります。
postgreSQL9.6リポジトリをsources.list.dディレクトリに追加します。
echo 'deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main' | tee /etc/apt/sources.list.d/postgresql.list
そして、PostgreSQL署名キーをシステムにインポートします。
wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | sudo apt-key add -
次に、aptコマンドを使用してシステムリポジトリを更新します。
apt-get update
次に、以下のaptコマンドを使用してPosgreSQL9.6パッケージをインストールします。
apt-get install -y postgresql-9.6 postgresql-contrib-9.6
インストールが完了している場合は、それを追加して、起動時に自動的に開始します。
systemctl enable postgresql
デフォルトでは、PostgreSQLはUbuntuのポート5432のローカルホスト(127.0.0.1)IPアドレスで実行されています。netstatコマンドで確認してください。
netstat -plntu
PostgreSQL9.6がシステムで実行されています。次のステップでは、postgresユーザーのパスワードを設定する必要があります。
rootアカウントから、suコマンドを使用してpostgresユーザーにログインし、postgresフロントエンドターミナルpsqlにアクセスします。
su - postgres
psql
postgresユーザーのパスワードを変更し、以下のpostgresクエリで接続情報を確認してください。
\password postgres
\conninfo
PostgreSQL 9.6がシステムにインストールされ、エラーなしで実行され、postgresユーザーのパスワードが更新されました。
UFWまたはUncomplicatedFirewallは、Ubuntuでiptablesベースのファイアウォールを管理するためのアプリケーションです。 UFWはUbuntuLinuxのデフォルトのファイアウォール構成ツールであり、ファイアウォールを構成するためのユーザーフレンドリーな方法を提供します。
aptコマンドを使用してメインのUbuntuリポジトリからufwをインストールできます。
apt-get install -y ufw
UFWファイアウォールに新しいサービスを追加します。以下のコマンドを使用してSSHおよびPostgreSQLサービスを追加します。
ufw allow ssh
ufw allow postgresql
UFWファイアウォールを有効にして、ステータスを確認します。
ufw enable
ufw status
UFWファイアウォールがインストールされ、PostgreSQLサービスが追加されました。
注:
MASTERおよびSLAVEサーバーでステップ1とステップ2を実行します。
マスターサーバーのIPアドレスは10.0.15.10で、postgresサービスはデフォルトのポートを使用してそのIPで実行されます。マスターサーバーには、データベースへの読み取りと書き込みの権限があり、スレーブサーバーへのストリーミングレプリケーションを実行します。
postgres構成ディレクトリに移動します'/etc/postgresql/9.6/main 'そしてpostgresql.confを編集します vimでファイルします。
cd /etc/postgresql/9.6/main/
vim postgresql.conf
'listen_addresses'行のコメントを解除し、値をマスターサーバーのIPアドレス' 10.0.15.10に変更します。 '。
listen_addresses = '10.0.15.10'
'wal_level'行のコメントを解除し、値を' hot_standbyに変更します '。
wal_level = hot_standby
同期レベルには、ローカル同期を使用します。コメントを外し、以下のように値の行を変更します。
synchronous_commit = local
アーカイブモードを有効にし、archive_commandオプションをコマンド'cp%p/var/lib/postgresql/9.6/main/archive/%f'に変更します。
archive_mode = on
archive_command = 'cp %p /var/lib/postgresql/9.6/main/archive/%f'
「レプリケーション」設定の場合、このチュートリアルでは、マスターとスレーブの2つのサーバーのみを使用し、「 wal_sender」のコメントを解除します。 '行を入力し、値を 2に変更します 、および' wal_keep_segments '値は10 。
max_wal_senders = 2
wal_keep_segments = 10
アプリケーション名については、「synchronous_standby_names」行のコメントを解除し、値を「 pgslave001」という名前に変更します。 '。
synchronous_standby_names = 'pgslave001'
ファイルを保存してエディタを終了します。
postgresql.confファイルでは、アーカイブモードが有効になっているため、アーカイブ用の新しいディレクトリを作成する必要があります。新しいアーカイブディレクトリを作成し、権限を変更して、所有者をpostgresユーザーに変更します。
mkdir -p /var/lib/postgresql/9.6/main/archive/
chmod 700 /var/lib/postgresql/9.6/main/archive/
chown -R postgres:postgres /var/lib/postgresql/9.6/main/archive/
次に、認証構成用にpg_hba.confファイルを編集します。
vim pg_hba.conf
以下の構成を行の最後に貼り付けます。
# Localhost
host replication replica 127.0.0.1/32 md5
# PostgreSQL Master IP address
host replication replica 10.0.15.10/32 md5
# PostgreSQL SLave IP address
host replication replica 10.0.15.11/32 md5
保存して終了し、PostgreSQLを再起動します。
systemctl restart postgresql
PostgreSQLはIPアドレス10.0.15.10で実行されています。netstatコマンドで確認してください。
netstat -plntu
次に、レプリケーション用の新しいユーザーを作成します。 'レプリカという名前の新しいユーザーを作成します 'パスワード付き'[メール保護] '。ここで安全なパスワードを選択して設定してください。 postgresユーザーにログインし、postgresフロントエンドターミナルpsqlにアクセスします。
su - postgres
psql
新しい'レプリカを作成する 'パスワードを持つユーザー'[メール保護] '以下のpostgresクエリを使用します。
CREATE USER replica REPLICATION LOGIN ENCRYPTED PASSWORD '[email protected]';
次に、「 du」で新しいユーザーを確認します '以下のクエリを実行すると、レプリケーション権限を持つレプリカユーザーが表示されます。
\du
MASTERサーバーの構成が完了しました。
SLAVEサーバーのIPアドレスは10.0.15.11です。また、このサーバーには、データベースへの読み取り権限のみがあります。 Postgresデータベースサーバーは、ローカルホストIPではなく、サーバーのIPアドレスで実行されます。
以下のsystemctlコマンドを使用して、スレーブサーバーでpostgresサービスを停止します。
systemctl stop postgresql
Postgres構成ディレクトリに移動します'/etc/postgresql/9.6/main '次に、構成ファイルを編集します' postgresql.conf '。
cd /etc/postgresql/9.6/main/
vim postgresql.conf
listen_addresses行のコメントを解除し、値をスレーブサーバーのIPアドレス 10.0.15.11に置き換えます。 。
listen_addresses = '10.0.15.11'
'wal_level'行のコメントを解除し、値を' hot_standbyに変更します '。
wal_level = hot_standby
同期レベルについては、synchronous_commit行のコメントを解除し、以下に示すように値を変更します。
synchronous_commit = local
レプリケーション設定の場合は、max_wal_senders行のコメントを解除し、値を' 2に置き換えます。 '2台のサーバーを使用するだけだからです。また、wal_keep_segmentsの場合は、値を' 10に変更します。 '。
max_wal_senders = 2
wal_keep_segments = 10
アプリケーション名の「synchronous_standby_names」行のコメントを解除し、値を「 pgslave001」という名前に変更します。 '。
synchronous_standby_names = 'pgslave001'
hot_standbyを有効にする 次の行のコメントを解除し、値を「オン」に変更して、スレーブサーバーの場合 '。
hot_standby = on
ファイルを保存してエディタを終了します。
次に、' SLAVEのpostgresメインディレクトリを置き換えます。 ' MASTERのメインデータディレクトリを持つサーバー 'サーバー。
SLAVEサーバーにログインし、postgresユーザーにアクセスします。
su - postgres
postgresデータディレクトリに移動します'メイン 'そして、ディレクトリ名の名前を変更してバックアップします。
cd 9.6/
mv main main-bekup
新しい'メインを作成します 'ディレクトリを'postgres 'ユーザーであり、main-bekupディレクトリのような権限を持っていることを確認してください。
mkdir main/
chmod 700 main/
次に、 pg_basebackup を使用して、メインディレクトリをMASTERサーバーからSLAVEサーバーにコピーします。 コマンドでは、レプリカユーザーを使用してこのデータコピーを実行します。
pg_basebackup -h 10.0.15.10 -U replica -D /var/lib/postgresql/9.6/main -P --xlog
Password:
データ転送が完了したら、メインデータディレクトリに移動して、新しい restorey.confを作成します。 ファイル。
cd /var/lib/postgresql/9.6/main/
vim recovery.conf
以下に設定を貼り付けます:
standby_mode = 'on'
primary_conninfo = 'host=10.0.15.10 port=5432 user=replica [email protected] application_name=pgslave001'
restore_command = 'cp /var/lib/postgresql/9.6/main/archive/%f %p'
trigger_file = '/tmp/postgresql.trigger.5432'
保存して終了し、chmodを使用してファイルのアクセス許可を600に変更します。
chmod 600 recovery.conf
次に、SLAVEサーバーでPostgreSQL 9.6を起動し、postgresサービスがnetstatを使用してIPアドレス10.0.15.11で実行されていることを確認します。
systemctl start postgresql
netstat -plntu
SLAVEサーバーのデータ転送と構成が完了しました。
テストでは、PostgreSQL 9.6のレプリケーションステータスを確認し、MASTERサーバー上に新しいテーブルを作成してから、SLAVEサーバーからのすべてのデータを確認してレプリケーションを確認します。
MASTERサーバーにログインし、postgresユーザーにログインします。
su - postgres
以下のpsqlコマンドを実行して、レプリケーションステータスを確認します。
psql -c "select application_name, state, sync_priority, sync_state from pg_stat_replication;"
psql -x -c "select * from pg_stat_replication;"
以下のような結果が得られます。
次に、MASTERサーバーから新しいテーブルを作成してみます。マスターサーバーでpostgresユーザーにログインします。
su - postgres
psql
そして、「 reply_test」という名前の新しいテーブルを作成します 'そして、以下のpostgresクエリを実行して、テーブルにデータを挿入します。
CREATE TABLE replica_test (hakase varchar(100));
INSERT INTO replica_test VALUES ('howtoforge.com');
INSERT INTO replica_test VALUES ('This is from Master');
INSERT INTO replica_test VALUES ('pg replication by hakase-labs');
次に、SLAVEサーバーでpostgresユーザーにログインし、psqlターミナルにアクセスします。
su - postgres
psql
' reply_testのデータを確認してください '以下のpostgresクエリを含むテーブル。
select * from replica_test;
また、MASTERと同じデータを取得し、MASTERサーバーからSLAVEサーバーに複製されます。
追加テスト:
以下のクエリを使用して、SLAVEサーバーでの書き込みをテストします。
INSERT INTO replica_test VALUES ('this is SLAVE');
また、「INSERTを実行できません」に関するエラーメッセージが表示されます。 'SLAVEサーバーでクエリを実行します。
Ubuntu 16.04XenialXerusでのマスタースレーブレプリケーションを使用したPostgreSQL9.6のインストールと構成は成功しました。