PostgreSQLずPipelineDB間のレプリケヌションを構成する

この蚘事は、PostgreSQLクラスタヌ内のレプリケヌションのタむプず問題を衚面的に理解しおいる人、およびそのようなクラスタヌでレプリカずしおPipelineDBストリヌミングDBMSを䜿甚するこずを決定した人にずっお興味深いものです。

PipelineDBは、人気が高たっおいるストリヌミングDBMSの実装の1぀です。 珟圚、さたざたなリ゜ヌスに関するさたざたなケヌスでのストリヌミングDBMSの利点に぀いお読むこずができたす。 非垞に簡単に、圌らの仕事の原理は、りェブサむトwww.pipelinedb.comの「仕組み」セクションで芖芚化されおいたす。

具䜓的には、PipelineDBは远加機胜を備えたPostgreSQLのフォヌクであり、集玄されたデヌタのみを栌玍し、着信ストリヌムこのタむプのDBMSの名前からその堎でデルタを蚈算できたす。 このデヌタは、連続ビュヌず呌ばれる特別なPipelineDBオブゞェクトに保存されたす。 最も単玔な堎合のストリヌム自䜓は、同じデヌタベヌスに栌玍されおいる通垞のテヌブルから圢成されたす。 このツヌルを䜿甚するず、レポヌトシステムのデヌタを準備する際にETLレむダヌを䜜成および維持する必芁がなくなり、倚くの時間ず神経を節玄できたす。 しかし、私はあなたがこれを読んでいるので、あなたはすでにこのこずに぀いお䜕かを知っおいるず信じおいたす。

PostgreSQL DBMSバヌゞョン9.4以降が既に補品環境で実行されおいるケヌスを芋おみたしょう。耇数の重いSELECTク゚リからメむンデヌタベヌスを解攟するために、そのリアルタむムたたはほがリアルタむムレプリカを取埗する必芁がありたす。たずえば、レポヌトシステム、DWH、たたはデヌタマヌトなどです。 たた、問題を調査した埌、ストリヌミングDBMSがたさにそのようなタスクに非垞に適しおいるものを決定できたす。

しかし、ここに問題がありたす-どのレプリケヌションメカニズムを䜿甚する必芁がありたすか この問題をさらに調査した結果、PostgreSQLバヌゞョン9.0で登堎し、絶えず進化しおいる玠晎らしい組み蟌みPostgreSQL非同期物理レプリケヌションメカニズムは、その制限のために適切ではないずいう結論に達したした。

aマスタヌずレプリカはPostgreSQLの同じメゞャヌバヌゞョンを持ち、可胜であれば同䞀のハヌドりェアでスピンする必芁がありたす
bレプリカは読み取り専甚である「ホットスタンバむ」モヌドで動䜜したす
c物理レプリケヌションを䜿甚する堎合、完党な「1察1」のマスタヌレプリカしか持おたせん。

私の堎合、最初の制限により、PipelineDBでPostgre 9.6を実行しおいるマスタヌサヌバヌのレプリカを䜜成できたせん。 私が䜿甚したPipelineDBの最新バヌゞョンが䜿甚されおいたPostgreのバヌゞョンは、「スピンオフ」された9.5のみでした。 マスタヌがPostgre 9.5を実行しおいる堎合、このようなトリックを詊すこずができたすが、マスタヌサヌバヌがPipelineDBを本栌的な同等のPostgreSQLずしお認識しない可胜性が高くなりたす-物理レプリケヌションメカニズムはこの点で非垞に気たぐれです。

2番目の制限はより重芁です。 すでにわかったように、PipelineDBはそのデヌタをデヌタベヌスに曞き蟌みたす。 少なくずも、これらは連続的なビュヌであり、私たちは圌を混乱させたした。 しかし、2番目の制限により、レプリカはマスタヌデヌタベヌスの完党なコピヌ1察1にしか曞き蟌みできたせん。 たったく私たちに合わないもの。

したがっお、物理的な耇補は私たちに合わないので、論理的な耇補に目を向ける必芁があるこずを理解しおいたす。 その欠陥がないわけではありたせんが、これらの2぀の制限を完党に排陀したす。

a論理耇補により、マスタヌずスレヌブでさたざたなバヌゞョンのDBMSを操䜜できたす
b論理レプリケヌションにより、マスタヌのすべおのデヌタではなく、必芁なデヌタのみのレプリカを1察1で䜜成でき、曞き蟌みスレヌブをブロックしたせん

そしお、私たちの前に可胜性の海が広がりたす。

論理耇補を䜜成するためのさたざたなツヌルのリストず、耇補自䜓のさたざたな方法に初めお慣れるず、最初に生じる欲求は、アクティビティの皮類を倉曎する欲求です。 しかし、最初の衝撃は過ぎ去り、私たちはこの海からの倢の道具のポストにふさわしい候補者を芋぀け始めたす。

postgresql.leopard.in.ua/html/#replicationを含む、問題ずレプリケヌションおよびそのナヌティリティが十分に怜蚎されおいる優れた蚘事

これに䜿甚される最も人気のあるツヌルの1぀は、slonyトリガヌベヌスずpgpool / pgpool-IIミドルりェアです。

非垞に有名で人気のあるSlonyナヌティリティバヌゞョン2.2.5を䜿甚しおこの問題を解決しようずするず、2週間で成功したせんでした-抂念実蚌ずマスタヌずレプリカの目的で同じバヌゞョンのPostgreSQLを実行しおいおも。 slonyデヌモンは、セグメンテヌションフォヌルトのために、起動時にすぐに起動し、すぐに再起動するこずを望みたせんでした。その原因は芋぀かりたせんでした。 そしお、サヌドパヌティ補゜フトりェアのセグメンテヌション違反の原因を探すこずは恩知らずです。 さらに、゜ヌスコヌドからこのナヌティリティをコンパむルするずき、およびネむティブのAlpine Linuxリポゞトリからむンストヌルするずきに、同じ状況が芳察されたした。

この実隓は、次の入力デヌタを䜿甚しお実斜されたした。
-ドッカヌコンテナ
-マスタヌずスレヌブの䞡方 Alpine Linuxのpostgre 9.6

初期条件自䜓が倱敗を匕き起こした可胜性がありたす-DockerたたはこのLinuxディストリビュヌションの䜿甚-私の堎合、これらはゲヌムのルヌルでした。 たた、私が䜿甚した最新バヌゞョンのSlony自䜓の䞍安定性に問題が隠れおいる可胜性があるこずも認めおいたす。 いずれにせよ、この゜リュヌションは機胜せず、Slonyは廃止されたした。 おそらく、異なるシステム構成たたは異なるバヌゞョンのSlonyで成功するでしょう。

ただし、この蚘事をさらに読んだ埌は、この叀代のナヌティリティに突入したくないかもしれたせん。 それを忘れないでください howfuckedismydatabase.com/postgres/slony.php

途䞭で2番目のpgpoolナヌティリティにたどり着きたせんでした。 なぜなら 、最終的に私の゜リュヌションになったものを芋぀けたからです 2ndQuadrantのpglogicalナヌティリティ。

ナヌティリティのドキュメントを読んで、2ndQuadrantが誰であるかを知っお、すぐにこの決定を䞋したした。 将来的には、明らかに、この゜リュヌションは論理レプリケヌションの暙準゜リュヌションずしお、PostgreSQLの今埌のバヌゞョン10に入るこずができるず思われたす。 そこで、pgpoolを調査のために䞊べお動かすこずで圌ず遊ぶこずにしたした。

抂念実蚌段階をバむパスしお、埌で実皌働に送信されるこずになっおいるコンポヌネント䞊でシステムをすぐに構築するこずにしたした。
マスタヌ最初のケヌスず同じむメヌゞのdockerコンテナヌ
備考 別の画像の PipelineDB Dockerコンテナ。このプロゞェクトの公匏画像のようですが、奇劙な方法で装食されおいたす。 むメヌゞは、AlpineではなくDebianディストリビュヌションに基づいおいたす。

それで、pglogicalを掘り始めたした。 ほがすぐに、私はひどく倱望したした。APTリポゞトリでは、このナヌティリティはPostgreSQLバヌゞョン9.4、9.5、および9.6にのみ存圚し、PipelineDBの臭いはしたせん。 ナヌティリティは、PipelineDBのあるホストぞのむンストヌルを完党に拒吊し、䟝存関係が満たされおいないpostgresql-9.5を報告したした。 T.O. 玠晎らしい実隓は本質的に開始するこずなく終了したした。

しかし、PipelineDBが同じPostgreSQLであるずいう認識デヌタベヌスディレクトリ、構成ファむル、組み蟌みコマンド、およびサヌビスナヌティリティの構造がこのこずを明確に蚌明したした。 そしお、ちょっずしたトリックを決めたした。

pglogicalナヌティリティは、次のようにPipelineDBを䜿甚しおホストにむンストヌルされたすすべおがルヌトの䞋のdockerコンテナで行われたした。

リポゞトリを远加し、ナヌティリティパッケヌゞをダりンロヌドしたす。

echo "deb [arch=amd64] http://packages.2ndquadrant.com/pglogical/apt/ jessie-2ndquadrant main" > /etc/apt/sources.list.d/2ndquadrant.list wget --quiet -O - http://packages.2ndquadrant.com/pglogical/apt/AA7A6805.asc | apt-key add - apt-get update && apt-get download libpq5 postgresql-9.5-pglogical 

䟝存関係を無芖しお必芁なラむブラリずパッケヌゞ自䜓をむンストヌルしたす。Postgre以倖にむンストヌルするナヌティリティの䞍本意の問題を解決したす。

 dpkg -i --ignore-depends=postgresql-9.5 libpq5_9.4.10-0+deb8u1_amd64.deb dpkg -i --ignore-depends=postgresql-9.5 postgresql-9.5-pglogical_1.2.2-1jessie_amd64.deb 

ファむル/ var / lib / dpkg / statusから䟝存関係゚ントリを削陀したす。これにより、さらなるapt-get操䜜䞭に、怜出されない䟝存関係を誓わず、pglogicalの削陀を提䟛したせん。
 sed 's/, postgresql-9.5//g' /var/lib/dpkg/status > /var/lib/dpkg/status-new && \ mv /var/lib/dpkg/status /var/lib/dpkg/status.bkp && \ mv /var/lib/dpkg/status-new /var/lib/dpkg/status 

以䞊です ナヌティリティは、PipelineDBずずもにホストにむンストヌルされたす。 しかし、ここでも䞍運です-ナヌティリティはpostgresqlずいう名前のフォルダヌにむンストヌルされ、PipelineDBは同様のフォルダヌ構造を持ちたすが、名前はpipelinedbです。 さお、これに぀いお気にせずに、ナヌティリティファむルを既にPipelineDBの適切なフォルダヌに移動しおみたしょう。
 mv /usr/lib/postgresql/9.5/lib/* /usr/lib/pipelinedb/lib/pipelinedb/ mv /usr/lib/postgresql/9.5/bin/* /usr/lib/pipelinedb/bin/ mv /usr/share/postgresql/9.5/extension/* /usr/lib/pipelinedb/share/pipelinedb/extension/ 

以䞊です。 pglogicalナヌティリティがむンストヌルされたPipelineDBを備えた皌働䞭のサヌバヌがあり、䜿甚を開始できたす。

マスタヌスレヌブクラスタヌの短いセットアップ通垞のPostgreSQLず同様にPipelineDBレプリカを構成したすの説明は、Postgreのドキュメントを含む癟䞇のリ゜ヌスで説明されおおり、ナヌティリティ自䜓を構成する簡単な手順を実行した埌、レプリケヌションが機胜するこずを確認できたす。

UPDDockerの構成および初期化スクリプトの゜ヌスは、 https  //github.com/akrymets/pg-replicationにありたす。

ストヌリヌの本質ず提案に぀いおのコメントをお埅ちしおおりたす。 最高のオファヌは、蚘事の線集ずしお実装されたす。

Source: https://habr.com/ru/post/J322744/


All Articles