「レプリケーション PostgreSQL スラブ マルチ」の版間の差分
1行目: | 1行目: | ||
+ | <span data-link_translate_pl_title="Replikacja wielu słowiańskich PostgreSQL" data-link_translate_pl_url="Replikacja+wielu+s%C5%82owia%C5%84skich+PostgreSQL"></span>[[:pl:Replikacja wielu słowiańskich PostgreSQL]][[pl:Replikacja wielu słowiańskich PostgreSQL]] | ||
<span data-link_translate_ar_title="النسخ المتماثل السلافية كيو متعدد" data-link_translate_ar_url="%D8%A7%D9%84%D9%86%D8%B3%D8%AE+%D8%A7%D9%84%D9%85%D8%AA%D9%85%D8%A7%D8%AB%D9%84+%D8%A7%D9%84%D8%B3%D9%84%D8%A7%D9%81%D9%8A%D8%A9+%D9%83%D9%8A%D9%88+%D9%85%D8%AA%D8%B9%D8%AF%D8%AF"></span>[[:ar:النسخ المتماثل السلافية كيو متعدد]][[ar:النسخ المتماثل السلافية كيو متعدد]] | <span data-link_translate_ar_title="النسخ المتماثل السلافية كيو متعدد" data-link_translate_ar_url="%D8%A7%D9%84%D9%86%D8%B3%D8%AE+%D8%A7%D9%84%D9%85%D8%AA%D9%85%D8%A7%D8%AB%D9%84+%D8%A7%D9%84%D8%B3%D9%84%D8%A7%D9%81%D9%8A%D8%A9+%D9%83%D9%8A%D9%88+%D9%85%D8%AA%D8%B9%D8%AF%D8%AF"></span>[[:ar:النسخ المتماثل السلافية كيو متعدد]][[ar:النسخ المتماثل السلافية كيو متعدد]] | ||
<span data-link_translate_zh_title="复制 PostgreSQL 斯拉夫语多" data-link_translate_zh_url="%E5%A4%8D%E5%88%B6+PostgreSQL+%E6%96%AF%E6%8B%89%E5%A4%AB%E8%AF%AD%E5%A4%9A"></span>[[:zh:复制 PostgreSQL 斯拉夫语多]][[zh:复制 PostgreSQL 斯拉夫语多]] | <span data-link_translate_zh_title="复制 PostgreSQL 斯拉夫语多" data-link_translate_zh_url="%E5%A4%8D%E5%88%B6+PostgreSQL+%E6%96%AF%E6%8B%89%E5%A4%AB%E8%AF%AD%E5%A4%9A"></span>[[:zh:复制 PostgreSQL 斯拉夫语多]][[zh:复制 PostgreSQL 斯拉夫语多]] |
2016年6月2日 (木) 19:30時点における版
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;
コメントの自動更新を有効化