GNU/Linux >> Linux の 問題 >  >> Ubuntu

Ubuntu16.04でPostgreSQL9.6のマスタースレーブレプリケーションを設定する方法

PostgreSQLまたはPostgresは、15年以上にわたって活発に開発されてきたオープンソースのオブジェクトリレーショナルデータベース管理システム(ORDBMS)です。これは強力なデータベースサーバーであり、高いワークロードを処理できます。 PostgreSQLは、Linux、Unix、BSD、およびWindowsサーバーで使用できます。

マスター/スレーブデータベースレプリケーションは、あるサーバー(マスター)のデータベースから別のサーバー(スレーブ)のデータベースにデータをコピー(同期)するプロセスです。このプロセスの主な利点は、データベースを複数のマシンに分散することです。そのため、マスターサーバーに問題が発生した場合でも、同じデータを使用してリクエストを中断することなく処理できるバックアップマシンがあります。

PostgreSQLは、データベースを複製するいくつかの方法を提供します。バックアップの目的で使用でき、高可用性データベースサーバーを提供します。このチュートリアルでは、Ubuntu16.04サーバーにPostgreSQL9.6マスタースレーブレプリケーションをインストールして構成する方法を示します。ホットスタンバイモードを使用します。これは、PostgreSQLを深く学ぶための非常に良い出発点です。

私たちが行うこと:

  1. PostgreSQL9.6をインストールします。
  2. UFWファイアウォールを設定します。
  3. MASTERサーバーを構成します。
  4. SLAVEサーバーを構成します。
  5. PostgreSQLデータをMASTERからSLAVEにコピーします。
  6. テスト。

前提条件:

  • 1Ubuntu16.04サーバー
    • マスター -読み取りと書き込みの許可-IP:10.0.15.10
  • 1Ubuntu16.04サーバー
    • スレーブ -読み取り専用-IP:10.0.15.11
  • ルート権限
ステップ1-PostgreSQL9.6をインストールします

このチュートリアルでは、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ユーザーのパスワードが更新されました。

ステップ2-UFWファイアウォールを設定する

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を実行します。

ステップ3-PostgreSQLMASTERサーバーを構成します

マスターサーバーの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サーバーの構成が完了しました。

ステップ4-SLAVEサーバーを構成する

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

ファイルを保存してエディタを終了します。

ステップ5-PostgreSQLデータをマスターからスレーブにコピーします

次に、' 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サーバーのデータ転送と構成が完了しました。

ステップ6-テスト

テストでは、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のインストールと構成は成功しました。


Ubuntu
  1. Ubuntu18.04にPostgreSQLをインストールする方法

  2. Ubuntu 18.04 に PostgreSQL サーバーをインストールする方法

  3. 初心者向けの Ubuntu サーバー

  1. Ubuntu20.04PostgreSQLのインストール

  2. Ubuntu22.04PostgreSQLのインストール

  3. Ubuntu18.04にMySQLをインストールする方法

  1. Ubuntu18.04にMattermostをデプロイする方法

  2. Ubuntu18.04でMySQLマスタースレーブレプリケーションを構成する方法

  3. Ubuntu20.04にPostgreSQLとpgAdmin4をインストールする方法