レプリケーション PostgreSQL スラブ マルチ

提供: Japanese Ikoula Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

ja:レプリケーション PostgreSQL スラブ マルチ en:Replication PostgreSQL Slavic multi he:שכפול מרובה PostgreSQL סלאבית ro:Replicare PostgreSQL slave multi ru:Multi PostgreSQL славянских репликации pl:Replikacja wielu słowiańskich PostgreSQL ar:النسخ المتماثل السلافية كيو متعدد zh:复制 PostgreSQL 斯拉夫语多 de:Replikation PostgreSQL slawischen multi nl:Replicatie PostgreSQL Slavische multi it:Replica PostgreSQL slavo multi pt:Replicação PostgreSQL eslavo multi es:Replicación multi de PostgreSQL Slavic fr:Replication PostgreSQL multi slaves

この記事は、自動翻訳ソフトウェアで行うからです。 記事のソースはここを参照してくださいすることができます。

はじめに

このページは 1 つのマスターと 2 つのスレーブのレプリケーションをストリーミング非同期 PostgreSQL の実装を扱います。私たちのスラブをホット スタンバイとして構成する、クエリを実行することが可能であろうと言うことです (読み取り専用 ) これらの。


この配置のコンテキスト :


我々 が持っている 3 Debian サーバ 8 (最終更新日 ) :

Postgres 01 (10.1.1.75) : 当社のマスターになります

Postgres02 (10.1.1.90) : 奴隷になります

Postgres03 (10.1.1.199) : 2 番目のスレーブになります


付いているときに root として実行するコマンドが定める "#" Postgres システム ユーザーが付いているときとして "$".

PostgreSQL と 3 つのサーバーの事前構成のインストール

この部分のすべてのコマンドは、各サーバーで行われます。

最初のステップとしては、1 つのファイルを持っている勧め /etc/hosts このような各サーバーの一致を設定 (独自のサーバーのホスト名および ip アドレスの適応によって ) :

# cat /etc/hosts
127.0.0.1       localhost

10.1.1.75       Postgres 01
10.1.1.90       Postgres 02
10.1.1.199      Postgres 03


預金 APT PostgreSQL を追加 :

# echo "deb http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main" > /etc/apt/sources.list.d/postgres.list


我々 はこの預金の公開キーをインポート :

# gpg --keyserver pgpkeys.mit.edu --recv-key 7FCC7D46ACCC4CF8 && gpg -a --export 7FCC7D46ACCC4CF8 | apt-key add -
gpg: directory `/root/.gnupg' created
gpg: new configuration file `/root/.gnupg/gpg.conf' created
gpg: WARNING: options in `/root/.gnupg/gpg.conf' are not yet active during this run
gpg: keyring `/root/.gnupg/secring.gpg' created
gpg: keyring `/root/.gnupg/pubring.gpg' created
gpg: requesting key ACCC4CF8 from hkp server pgpkeys.mit.edu
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key ACCC4CF8: public key "PostgreSQL Debian Repository" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
OK


それは預金を考慮するように APT のキャッシュを更新 :

# apt-get update


パッケージ postgresql をインストールする (最新の安定バージョンはインストール、 9.5 これらの行が書かれた時に ) :

# apt-get install postgresql


我々 はパスワードを定義 (セキュリティで保護されたが、彼の選択の ) 生成して、ssh 鍵のペア (パスフレーズなし ) システムの postgres ユーザー :

# passwd postgres
# su - postgres
$ ssh-keygen


我々 ユーザ postgres からとコピー各サーバーとパブリックの間 ssh キー :


最初のサーバーから (postgres01 ここで ) 2 番目の方 (postgres02 私たちにとって ) troisiseme (postgres03) :

root@postgres01:~# su - postgres
postgres@postgres01:~$ ssh-copy-id postgres02
postgres@postgres01:~$ ssh-copy-id postgres03


2 番目の最初と 3 番目のサーバーから :

root@postgres02:~# su - postgres
postgres@postgres02:~$ ssh-copy-id postgres01
postgres@postgres02:~$ ssh-copy-id postgres03


3 番目の最初と 2 番目のサーバーから :

root@postgres03:~# su - postgres
postgres@postgres03:~$ ssh-copy-id postgres01
postgres@postgres03:~$ ssh-copy-id postgres02

マスター構成

マスター上でのみ行う (postgres01 ここで ) :


役割を作成します /レプリケーション ユーザー :

# su - postgres
$ psql -c "CREATE USER repuser REPLICATION LOGIN CONNECTION LIMIT 2 ENCRYPTED PASSWORD '<mot de passe repuser>';"

注 : 接続の制限の定義 2 ん 2 スラブ


主な postgresql の設定ファイルを編集 /etc/postgresql/9.5/main/postgresql.conf 次のディレクティブを設定する :

listen_addresses = '*'
wal_level = hot_standby
archive_mode = on
archive_command = 'rsync -av %p postgres@<ip du premier slave>:/var/lib/postgresql/wal_archive/%f'
max_wal_senders = 2
wal_keep_segments = 256
hot_standby = on

注 : 我々 は我々 の 2 番目のサーバーにアーカイブを有効に (サーバーの ip アドレスをカスタマイズ ) さらに多くの注意事項。我々 はパラメーター hot_standby を定義もそれが将来的にスレーブに降格する必要があります、マスターは無視されますも。


今 postgresql 認証ファイルを編集 /etc/postgresql/9.5/main/pg_hba.conf 私たちのスラブまたはファイルの末尾に次の行から接続するレプリケーション ユーザーのアクセス許可を追加する :

hostssl replication     repuser <ip du réseau de vos serveurs>/24     md5

レプリケーション、ネットワーク ユーザーの名前に基づいてこの行を適応してください (またはそれぞれの ip アドレス ) あなたのスラブの


当社の構成を考慮する postgresql サービスが再起動されます (ルートに ) :

# systemctl restart postgresql


これにより、サービスが正しく開始されて :

root@postgres01:~# systemctl status postgresql
● postgresql.service - PostgreSQL RDBMS
   Loaded: loaded (/lib/systemd/system/postgresql.service; enabled)
   Active: active (exited) since Thu 2016-06-02 12:06:28 CEST; 22s ago
  Process: 77056 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 Main PID: 77056 (code=exited, status=0/SUCCESS)


root@postgres01:~# ps -u postgres u
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
postgres  77038  0.0  4.4 227300 21836 ?        S    12:06   0:00 /usr/lib/postgresql/9.5/bin/postgres -D /var/lib/postgresql/9.
postgres  77040  0.0  0.8 227300  4160 ?        Ss   12:06   0:00 postgres: checkpointer process
postgres  77041  0.0  1.0 227300  4968 ?        Ss   12:06   0:00 postgres: writer process
postgres  77042  0.0  1.7 227300  8776 ?        Ss   12:06   0:00 postgres: wal writer process
postgres  77043  0.0  1.3 227728  6708 ?        Ss   12:06   0:00 postgres: autovacuum launcher process
postgres  77044  0.0  0.6  82244  3392 ?        Ss   12:06   0:00 postgres: archiver process
postgres  77045  0.0  0.8  82244  4244 ?        Ss   12:06   0:00 postgres: stats collector process

スラヴ人の構成

最初のスレーブの

まず、停止 postgresql サービス :

# systemctl stop postgresql


主な postgresql の設定ファイルを編集 /etc/postgresql/9.5/main/postgresql.conf コマンド rsync をいずれかをアーカイブする 2 番目のスレーブによって最初のスレーブの ip アドレスだけを調整することによって、マスターとして同じガイドラインを構成する :

listen_addresses = '*'
wal_level = hot_standby
archive_mode = on
archive_command = 'rsync -av %p postgres@<ip du second slave>:/var/lib/postgresql/wal_archive/%f'
max_wal_senders = 2
wal_keep_segments = 256
hot_standby = on


今 postgresql 認証ファイルを編集 /etc/postgresql/9.5/main/pg_hba.conf 当社の他のサーバーから接続するレプリケーション ユーザーのアクセス許可を追加する (これは、期待このスレーブは、マスターを昇格するときに使用されます ) :

hostssl replication     repuser <ip du réseau de vos serveurs>/24     md5

注 : この構成の私達のマスターのようにこれは必要な場合マスターとしてこの奴隷を簡単に促進するとなります。


システム postgres ユーザとしてログイン下の操作 :

# su – postgres


マスター アーカイブの wal の宛先ディレクトリを作成 :

$ mkdir /var/lib/postgresql/wal_archive


Postgresql のデータ ディレクトリを削除します :

$ rm -rf /var/lib/postgresql/9.5/main


ベース バックアップは、それ (あなたのマスターの ip とレプリケーション ユーザーの名前をカスタマイズする )、必要があります、レプリケーション ユーザーのパスワード :

$ pg_basebackup -h <ip de votre master> -D /var/lib/postgresql/9.5/main -U repuser -v -P --xlog


それは、ファイルを作成することでレプリケーションを構成します /var/lib/postgresql/9.5/main/recovery.conf 次のパラメーターで :

standby_mode = on
primary_conninfo = 'host=<ip de votre master> port=5432 user=repuser password=<mot de passe de repuser> sslmode=require application_name=<hostname de votre slave>'
trigger_file = '/var/lib/postgresql/9.5/postgres.trigger'

注 : トリガー ファイルは、ファイル作成彼のスレーブのレプリケーションの停止とエントリーの受付を開始したい場合、マスターとしてそれを促進する場合します。クラッシュ彼女のマスターのスレーブを昇格する前に初期マスターが破損を回避する上昇しないことを確認します。


我々 はルートを返しサービスを開始 :

# systemctl start postgresql


これにより、サービスが正常に開始 :

# systemctl status postgresql
● postgresql.service - PostgreSQL RDBMS
   Loaded: loaded (/lib/systemd/system/postgresql.service; enabled)
   Active: active (exited) since Thu 2016-06-02 12:53:42 CEST; 1min 6s ago
  Process: 8894 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 Main PID: 8894 (code=exited, status=0/SUCCESS)


# ps -u postgres u
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
postgres   8878  0.0  4.4 227308 21892 ?        S    12:53   0:00 /usr/lib/postgresql/9.5/bin/postgres -D /var/lib/postgresql/9.
postgres   8879  0.0  1.1 227376  5700 ?        Ss   12:53   0:00 postgres: startup process   recovering 00000001000000000000000
postgres   8880  0.0  0.8 227308  4140 ?        Ss   12:53   0:00 postgres: checkpointer process
postgres   8881  0.0  1.0 227308  5236 ?        Ss   12:53   0:00 postgres: writer process
postgres   8882  0.0  0.6  82252  3316 ?        Ss   12:53   0:00 postgres: stats collector process
postgres   8883  0.0  1.7 238064  8520 ?        Ss   12:53   0:00 postgres: wal receiver process   streaming 0/30003E0


私達のマスターに接続する場合、我々 はもうチェックできるマスターと最初のスレーブの間のレプリケーションが機能 :

当社のマスターに接続してシステム postgres ユーザで接続 :

# su - postgres


Postgresql に接続する :

$ psql


拡張表示可能になり、当社のレプリケーションを確認 :

postgres=# \x
Expanded display is on.
postgres=# select * from pg_stat_replication;
-[ RECORD 1 ]----+------------------------------
pid              | 78879
usesysid         | 16384
usename          | repuser
application_name | postgres02
client_addr      | 10.1.1.90
client_hostname  |
client_port      | 49009
backend_start    | 2016-06-02 12:53:36.641823+02
backend_xmin     |
state            | streaming
sent_CRElocation    | 0/30004C0
write_location   | 0/30004C0
flush_location   | 0/30004C0
replay_location  | 0/30004C0
sync_priority    | 0
sync_state       | async

最初のスレーブを持つ私たちの非同期ストリーミングのレプリケーションはよく作られています。これを期にマスター レプリケーション /古典的なスレーブ (単一のスレーブの非同期ストリーミング )

2 番目のスレーブ

我々 もこの 2 番目のスレーブのアーカイブを有効にする場合、メインの設定ファイルのアーカイブのコマンドのアドレス ファイル recovery.conf で ip ホスト名を明らかに適応させる最初のスレーブにやった同じ Redid。

私たちのマルチの検証とテスト マスター レプリケーション スラブ

それはマスターに接続し、ユーザ postgres に記録されます :

# su – postgres

Postgresql に接続する :

$ psql


拡張表示可能になり、当社のレプリケーションを確認 :

postgres=# \x
Expanded display is on.
postgres=# select * from pg_stat_replication;
-[ RECORD 1 ]----+------------------------------
pid              | 78879
usesysid         | 16384
usename          | repuser
application_name | postgres02
client_addr      | 10.1.1.90
client_hostname  |
client_port      | 49009
backend_start    | 2016-06-02 12:53:36.641823+02
backend_xmin     |
state            | streaming
sent_location    | 0/5000140
write_location   | 0/5000140
flush_location   | 0/5000140
replay_location  | 0/5000140
sync_priority    | 0
sync_state       | async
-[ RECORD 2 ]----+------------------------------
pid              | 82725
usesysid         | 16384
usename          | repuser
application_name | postgres03
client_addr      | 10.1.1.199
client_hostname  |
client_port      | 51754
backend_start    | 2016-06-02 14:31:43.759683+02
backend_xmin     |
state            | streaming
sent_location    | 0/5000140
write_location   | 0/5000140
flush_location   | 0/5000140
replay_location  | 0/5000140
sync_priority    | 0
sync_state       | async

そこも私たち 2 2 スラブ サーバーでレプリケーション (postgres02 postgres 03).


マスターの postgresql に接続したまま、それが創造的な基本 (ex : checkrep ) :

postgres=# CREATE DATABASE checkrep;


データベースがもにレプリケートされることを確認私たち 2 スラブ :

root@postgres02:~# su - postgres
postgres@postgres02:~$ psql
psql (9.5.3)
Type "help" for help.

postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 checkrep  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(4 rows)


root@postgres03:~# su - postgres
postgres@postgres03:~$ psql
psql (9.5.3)
Type "help" for help.

postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 checkrep  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(4 rows)

自動的に私たちの 2 つのスラブにレプリケート、私たちのマスターで作成したデータベースです。


マスターから削除するのには :

postgres=# DROP DATABASE checkrep;



あなたにはコメントを投稿する権限がありません。