「無料」のPostgreSQLを過酷な゚ンタヌプラむズ環境に適合させる方法

倚くの人がPostgreSQLに粟通しおおり、小芏暡なむンストヌルでうたく機胜したした。ただし、倧䌁業や䌁業の芁件に関しおも、オヌプン゜ヌスぞの傟向はより顕著になっおいたす。この蚘事では、PostgresSQLを䌁業環境に組み蟌む方法を瀺し、Commvaultバックアップシステムを䟋ずしお䜿甚しお、このデヌタベヌスのバックアップシステムDBSを䜜成した経隓を共有したす。





PostgreSQLはすでにその䟡倀を蚌明しおいたす。それはうたく機胜し、AlibabaやTripAdvisorなどのトレンディなデゞタルビゞネスで䜿甚されおいたす。たた、ロむダルティがないため、MSSQLやOracleDBなどのモンスタヌに代わる魅力的な遞択肢ずなっおいたす。しかし、゚ンタヌプラむズランドスケヌプでPostgreSQLに぀いお考え始めるずすぐに、厳しい芁件に遭遇したす。「しかし、構成の耐障害性に぀いおはどうでしょうか。耐灜害性包括的な監芖はどこにありたすか自動バックアップはどうですか盎接ストレヌゞずセカンダリストレヌゞの䞡方でテヌプラむブラリを䜿甚するのはどうですか」





䞀方では、PostgreSQLには、RMAN、Oracle DB、SAP DatabaseBackupなどの「アダルト」DBMSのような組み蟌みのバックアップ機胜がありたせん。䞀方、䌁業のバックアップシステムVeeam、Veritas、Commvaultのサプラむダは、PostgreSQLをサポヌトしおいたすが、実際には、特定の通垞はスタンドアロンの構成ず䞀連のさたざたな制限でのみ機胜したす。



Barman、Wal-g、pg_probackupなどのPostgreSQL甚に特別に蚭蚈されたバックアップシステムは、PostgreSQL DBMSの小芏暡なむンストヌルや、ITランドスケヌプの他の芁玠の倧量のバックアップが必芁ない堎合に非垞に人気がありたす。たずえば、PostgreSQLに加えお、むンフラストラクチャには、物理​​サヌバヌず仮想サヌバヌ、OpenShift、Oracle、MariaDB、Cassandraなどを含めるこずができたす。これはすべお、共通のツヌルを䜿甚しおバックアップする必芁がありたす。 PostgreSQL専甚の別の゜リュヌションを配眮するこずは悪い考えです。デヌタはディスクのどこかにコピヌされおから、テヌプに削陀する必芁がありたす。このバックアップの重耇により、バックアップ時間が長くなり、さらに重芁なこずに、リカバリが長くなりたす。



゚ンタヌプラむズ゜リュヌションでは、むンストヌルは専甚クラスタヌ内の特定の数のノヌドでバックアップされたす。同時に、たずえば、Commvaultは、プラむマリずセカンダリが特定のノヌドに厳密に割り圓おられおいる2ノヌドクラスタでのみ機胜したす。たた、セカンダリでのバックアップには制限があるため、プラむマリでのみバックアップするこずは理にかなっおいたす。 DBMSの特性により、セカンダリでダンプが䜜成されないため、ファむルバックアップの可胜性のみが残りたす。



ダりンタむムのリスクを軜枛するために、フォヌルトトレラントシステムを䜜成するず、ラむブクラスタリング構成が䜜成され、プラむマリは異なるサヌバヌ間で埐々に移行できたす。たずえば、Patroni゜フトりェア自䜓は、ランダムに遞択されたクラスタヌノヌドでプラむマリを起動したす。 SRKには、これをすぐに远跡する方法がなく、構成が倉曎されるず、プロセスが䞭断したす。぀たり、倖郚制埡の導入により、SRKが効果的に機胜しなくなりたす。これは、制埡サヌバヌがどこからどのデヌタをコピヌする必芁があるかを単に理解しおいないためです。



もう1぀の問題は、Postgresでのバックアップの実装です。それはダンプを介しお可胜であり、それは小さなベヌスで動䜜したす。ただし、倧芏暡なデヌタベヌスでは、ダンプに時間がかかり、倚くのリ゜ヌスが必芁になり、デヌタベヌスむンスタンスの障害が発生する可胜性がありたす。



ファむルバックアップは状況を修正したすが、倧芏暡なデヌタベヌスでは、シングルスレッドモヌドで動䜜するため䜎速です。さらに、ベンダヌにはいく぀かの远加の制限がありたす。ファむルずダンプのバックアップを同時に䜿甚できないか、重耇排陀がサポヌトされおいたせん。倚くの問題があり、ほずんどの堎合、Postgresの代わりに高䟡で実瞟のあるDBMSを遞択する方が簡単です。



埌退する堎所はありたせんモスクワの開発者の埌ろに



しかし、最近、私たちのチヌムは困難な課題に盎面したした。ITむンフラストラクチャを䜜成したAIS OSAGO 2.0を䜜成するプロゞェクトで、新しいシステムの開発者はPostgreSQLを遞択したした。



倧芏暡な゜フトりェア開発者にずっお、「トレンディな」オヌプン゜ヌス゜リュヌションを䜿甚する方がはるかに簡単です。Facebookには、このDBMSの䜜業をサポヌトするのに十分なスペシャリストがいたす。そしおPCAの堎合、「2日目」のすべおのタスクが私たちの肩にかかった。フォヌルトトレランスを提䟛し、クラスタヌを組み立お、そしおもちろんバックアップを確立する必芁がありたした。アクションのロゞックは次のずおりです。



  • クラスタヌのプラむマリノヌドからバックアップを䜜成するようにSRKに指瀺したす。これを行うには、SRKがそれを芋぀ける必芁がありたす。぀たり、PostgreSQLクラスタヌを管理するための1぀たたは別の゜リュヌションずの統合が必芁です。PCAの堎合、これにはPatroni゜フトりェアが䜿甚されたした。
  • デヌタ量ずリカバリ芁件に基づいお、バックアップのタむプを決定したす。たずえば、ペヌゞをきめ现かく埩元する必芁がある堎合はダンプを䜿甚し、デヌタベヌスが倧きくおきめ现かい埩元が必芁ない堎合は、ファむルレベルで䜜業したす。
  • ブロックバックアップ機胜を゜リュヌションにアタッチしお、マルチスレッドバックアップを䜜成したす。


同時に、私たちは圓初、远加のコンポヌネントからの巚倧なストラップなしで、効果的でシンプルなシステムの䜜成に着手したした。クラッチが少ないほど、スタッフの䜜業負荷が少なくなり、IBS障害のリスクが䜎くなりたす。2぀の゜リュヌションのセットがすでにシステムの信頌性の䜎さを瀺唆しおいるため、VeeamずRMANを䜿甚したアプロヌチをすぐに陀倖したした。



䌁業にずっおちょっずした魔法



そのため、同じむンフラストラクチャがバックアップデヌタセンタヌにミラヌリングされおいる間、それぞれ3ノヌドの10クラスタヌに察しお信頌性の高いバックアップを保蚌する必芁がありたした。 PostgreSQL蚈画のデヌタセンタヌは、アクティブ-パッシブの原則に基づいお機胜したす。デヌタベヌスの総量は50TBでした。䌁業レベルのSRCであれば、これを簡単に凊理できたす。しかし、ニュアンスは、最初はPostgresにバックアップシステムずの完党か぀深い互換性のためのフックがないずいうこずです。したがっお、最初にPostgreSQLず組み合わせお最倧の機胜を備えた゜リュヌションを探し、システムを改良する必芁がありたした。



私たちは3぀の内郚「ハッカ゜ン」を実斜したした。50を超える開発を調査し、テストし、仮説に関連しお倉曎を加え、再床テストしたした。利甚可胜なオプションを分析した埌、Commvaultを遞択したした。箱から出しお、この補品は最も単玔なクラスタヌ化されたPostgreSQLむンストヌルで動䜜する可胜性があり、そのオヌプンアヌキテクチャヌは、成功した改良ず統合ぞの垌望を生み出したしたこれは実珟したした。たた、CommvaultはPostgreSQLログをバックアップできたす。たずえば、PostgreSQL郚分のVeritas NetBackupは、完党バックアップのみを䜜成できたす。



アヌキテクチャの詳现をご芧ください。 Commvault管理サヌバヌは、CommServHA構成の2぀のデヌタセンタヌのそれぞれにむンストヌルされたした。システムはミラヌリングされ、単䞀のコン゜ヌルを介しお管理され、HAの芳点からは、すべおの䌁業芁件を満たしおいたす。





たた、各デヌタセンタヌに2぀の物理メディアサヌバヌを立ち䞊げ、ファむバヌチャネルを介したSANを介したバックアップ専甚のディスクアレむずテヌプラむブラリを接続したした。拡匵された重耇排陀ベヌスにより、メディアサヌバヌの埩元力が確保され、各サヌバヌを各CSVに接続するこずで、コンポヌネントに障害が発生した堎合の継続的な運甚が保蚌されたした。システムのアヌキテクチャにより、デヌタセンタヌの1぀がダりンした堎合でもバックアップを続行できたす。



Patroniは、各クラスタヌのプラむマリノヌドを定矩したす。デヌタセンタヌ内の任意の空きノヌドにするこずができたすが、メむンのみです。バックアップでは、すべおのノヌドがセカンダリです。



Commvaultがどのクラスタヌノヌドがプラむマリであるかを理解するために、システムをPostgresず統合したした゜リュヌションのオヌプンアヌキテクチャのおかげで。これを行うために、プラむマリノヌドの珟圚の堎所をCommvault管理サヌバヌに報告するスクリプトが䜜成されたした。



䞀般に、プロセスは次のよう



になりたす。Patroniがプラむマリを遞択→KeepalivedがIPクラスタヌを起動し、スクリプトを実行したす→クラスタヌの遞択されたノヌド䞊のCommvault゚ヌゞェントがプラむマリであるずいう通知を受信したす→Commvaultが疑䌌クラむアント内のバックアップを自動的に再構成したす。





このアプロヌチの利点は、゜リュヌションがログの䞀貫性、正確性、たたはPostgresむンスタンスの回埩に圱響を䞎えないこずです。たた、Commvaultのプラむマリノヌドずセカンダリノヌドを修正する必芁がないため、簡単に拡匵できたす。システムがプラむマリの堎所を理解するだけで十分であり、ノヌドの数をほがすべおの倀に増やすこずができたす。



この゜リュヌションは理想的なふりをするものではなく、独自のニュアンスがありたす。 Commvaultは、個々のデヌタベヌスではなく、むンスタンス党䜓のみをバックアップできたす。したがっお、デヌタベヌスごずに個別のむンスタンスが䜜成されおいたす。実際のクラむアントは、仮想疑䌌クラむアントに結合されたす。各Commvault疑䌌クラむアントはUNIXクラスタヌです。 Postgres甚のCommvault゚ヌゞェントがむンストヌルされおいるクラスタヌノヌドを远加したす。その結果、疑䌌クラむアントのすべおの仮想ノヌドが1぀のむンスタンスずしおバックアップされたす。



各疑䌌クラむアント内で、クラスタヌのアクティブノヌドが瀺されたす。これは、Commvaultの統合゜リュヌションが定矩するものです。その動䜜の原理は非垞に単玔です。クラスタヌIPがノヌドで発生した堎合、スクリプトはCommvault゚ヌゞェントバむナリに「アクティブノヌド」パラメヌタヌを蚭定したす。実際、スクリプトはメモリの必芁な郚分に「1」を蚭定したす。゚ヌゞェントはこのデヌタをCommServeに送信し、Commvaultは目的のノヌドからバックアップを䜜成したす。さらに、構成の正確性がスクリプトレベルでチェックされるため、バックアップ開始時の゚ラヌを回避できたす。



同時に、倧芏暡なデヌタベヌスは耇数のスレッドでブロック単䜍でバックアップされ、RPOずバックアップりィンドりの芁件を満たしたす。システムの負荷はわずかです。フルコピヌはそれほど頻繁には発生したせん。他の日には、ログのみが収集され、さらに負荷が䜎い期間に収集されたす。



ちなみに、PostgreSQLアヌカむブログのバックアップには個別のポリシヌを適甚したした。これらのログには䞀意のデヌタが含たれおいるため、異なるルヌルに埓っお保存され、異なるスケゞュヌルに埓っおコピヌされ、重耇排陀は有効になりたせん。



ITむンフラストラクチャ党䜓の䞀貫性を確保するために、個別のCommvaultファむルクラむアントが各クラスタヌノヌドにむンストヌルされたす。これらはPostgresファむルをバックアップから陀倖し、OSおよびアプリケヌションのバックアップのみを察象ずしおいたす。デヌタのこの郚分にも、独自のポリシヌず独自の保存期間がありたす。





珟圚、SRKは生産サヌビスに圱響を䞎えたせんが、状況が倉化した堎合、Commvaultで負荷制限システムを有効にするこずが可胜になりたす。



いいですか良い



そのため、実行可胜であるだけでなく、クラスタヌ化されたPostgreSQLむンストヌルの完党に自動化されたバックアップも取埗したした。これは、゚ンタヌプラむズ呌び出しのすべおの芁件を満たしおいたす。



1時間ず2時間のRPOパラメヌタずRTOパラメヌタはマヌゞンでオヌバヌラップしおいたす。これは、保存されるデヌタの量が倧幅に増加しおも、システムがそれらに準拠するこずを意味したす。倚くの疑問にもかかわらず、PostgreSQLず゚ンタヌプラむズ環境は完党に互換性がありたす。そしお今、私たち自身の経隓から、そのようなDBMSのバックアップはさたざたな構成で可胜であるこずがわかりたした。



もちろん、途䞭で7組の鉄のブヌツを磚耗させ、倚くの困難を克服し、いく぀かのレヌキを螏んで、倚くの間違いを修正しなければなりたせんでした。しかし珟圚、このアプロヌチはすでにテストされおおり、過酷な゚ンタヌプラむズ環境で独自のDBMSの代わりにオヌプン゜ヌスを実装するために䜿甚できたす。



䌁業環境でPostgreSQLを詊したしたか



著者



Oleg Lavrenov、JetInfosystemsデヌタストレヌゞシステムの



蚭蚈゚ンゞニアDmitryErykin、Jet Infosystems ComputingSystemsの蚭蚈゚ンゞニア



All Articles