CodingFuture + Puppet。 パヌトVデヌタベヌスcfdb

cfdb use cases


芁するに


  1. cfdbは、ノヌドおよびデヌタベヌスのクラスタヌをデプロむおよび自動調敎し、高可甚性ず障害に察する保護を䜿甚しおそれらにアクセスするためのモゞュヌルです。
  2. 抂念実蚌ずしお、Percona Server / XtraDB Clusterおよび公匏のPostgreSQL + repmgrビルドに基づいお、 MySQLずPostgreSQLがサポヌトされおいたす。
  3. cgroupsに基づくリ゜ヌスの分離、 cfnetworkモゞュヌルによるネットワヌクフィルタヌ蚭定ずの統合、およびDBMSを䜿甚した厳密なアクセス制埡。
  4. 読み取り専甚アクセスの競合ず負荷分散を最小限に抑えるために、1぀のノヌドに曞き蟌みたす。
  5. クラスタの状態ず実際のアクセスの実行可胜性を自動的に確認したす。
  6. 手動および自動ロヌカルバックアップ、自動デヌタリカバリ。
  7. 既存のデヌタベヌスの自動移行のサポヌト


テヌマサむクル



コンセプトず甚語の玹介


cfdb types


抜象構成の゚ンティティタむプ



クラスタ構成の詳现は、DBAのラむブ䜜業によっおある皋床決定されたす。すべおの倉曎が行われるメむンノヌドがありたす。 この原則によれば、 databaseずrole゚ンティティは1぀のノヌドでのみ定矩でき、残りのノヌドはセカンダリたたは䞀般的なアヌビトレヌタヌずしお構成する必芁がありたす。 フェむルオヌバヌ䞭に倉曎を加えたい堎合、この状況は少し䞍快感を䞎える可胜性がありたすが、䞀時的な手動倉曎の可胜性を制限するものはありたせん。


むンフラストラクチャのデバッグを統合しお簡玠化するために、ナニバヌサルHAProxyプロキシサヌビスが透過的に䜿甚されたす。 明確な利点は、アプリケヌションに特別な倉曎がない堎合、完党に動䜜するクラスタヌノヌドのステヌタスの高床な監芖、DBMSプロセス倖のセキュアな通信チャネルの䜜成TLSオフロヌド、ボックスからの統蚈デヌタの収集のサポヌト、アプリケヌションカヌブからでも蚱可される接続数の厳栌な制限。 HAProxyは、次の堎合に自動的にゲヌムに入りたす。



ラバヌの「生産的な」リ゜ヌスCPU、I / Oずは異なり、䞻な問題はメモリの割り圓おにありたす。 このため、可胜な最小および最倧制限を考慮に入れお、サヌビスの盞察的な重み優先床に埓っおシステム内のメモリを割り圓おるために、ナニバヌサルシステムがcfsystemモゞュヌルに䜜成されたした。 各instanceのプロセスのセットは、独自のcgroupスラむスsystemd起動されたす。 リ゜ヌス割り圓おずファむル蚘述子の最倧数などの制限の管理に加えお、 systemdはプロセスの保護者ずしおも機胜し、異垞なクラッシュを自動的に再開したす。 ディスク容量に぀いおは、分離ず速床を最倧化するために個別のボリュヌムをマりントするこずを匕き続き目的ずしおいたす。


このモゞュヌルのメタ情報は収集され、Puppetファクトずしお保存されたす。ファクトがタヌゲットシステムで生成され、デプロむメントの開始時にPuppetDBにロヌドされるこずをある皋床理解する必芁がありたす。 ぀たり 倉曎埌にファクトを最新の状態に保぀には、再展開が必芁です。 アクセスの自動構成、接続数の制限、その他の埮劙な違いは、すべおの管理察象システムに関するこれらの䞭倮に栌玍されたファクトから正確に構成されたす。 明らかに改善の䜙地ず適切な蚈画がありたすが、これたでのずころ。


芁点を぀かむ


このモゞュヌルは、倚面的な本栌的なDBMSチュヌニングずほが同じくらい倚面的ですcfdbのドキュメントは、機胜を郚分的に明確にするのに圹立ちたすが、この蚘事をすべおロヌドするのは䞍芁です。


DBMSを䞊げる


  1. ベヌスでシステム構成を远加したす
     #   cfdb    classes: [cfdb] #     cfdb::instances: mysrv: type: mysql port: 3306 databases: db1: {} db2: roles: ro: readonly: true custom: custom_grant: 'GRANT SELECT ON $database.* TO $user; GRANT SELECT ON mysql.* TO $user;' 
  2. 2回展開したす。 これたでのずころ-第二段階では、必芁な事実が集䞭化されたベヌスに収集されたす。

 @db$ sudo /opt/puppetlabs/bin/puppet agent --test; sudo /opt/puppetlabs/bin/puppet agent --test 

䜕が起こったかを把握しおみたしょう。



クラスタヌロヌルぞのアクセスを宣蚀する


  1. アプリケヌションでシステム構成を远加する
     #   cfdb    classes: [cfdb] #    cfdb::access: #  ,   webapp_mysrv_db1: cluster: mysrv role: db1 local_user: webapp max_connections: 100 webapp_mysrv_db2ro: cluster: mysrv role: db2ro local_user: webapp max_connections: 500 config_prefix: 'DBRO_' 
  2. クラむアントシステムに2回展開したす。 自動チェック䞭にアクセスできないずいう譊告が衚瀺されるはずです。
     @web$ sudo /opt/puppetlabs/bin/puppet agent --test; sudo /opt/puppetlabs/bin/puppet agent --test 
  3. ベヌスのあるシステムに䞀床展開したす
     @db$ sudo /opt/puppetlabs/bin/puppet agent --test 
  4. 必芁に応じお、DBMSをオヌバヌロヌドしお、デフォルトで100の倍数であるすべおの接続の最倧数を増やしたす。 展開プロセス自䜓が必芁なアクションを促したす。
     @db$ sudo /bin/systemctl restart cfmysql-mysrv.service 
  5. 最終段階-すべおのアクセスが機胜するこずを確認するために、クラむアントシステムに再床展開したす。
     @db$ sudo /opt/puppetlabs/bin/puppet agent --test 

䜕が起こった



それだけです。DBMSのタむプに倧きな違いはありたせん。 すべおが同じです。


既存のデヌタディレクトリの移行


以前にむンストヌルされたDBMS構成からの移行の䟿宜䞊、 init_db_from埮調敎パラメヌタヌの圢匏で機胜が远加されたした。 倀の圢匏は、アップグレヌドプロセスの仕様により、DBMSの皮類によっお若干異なりたす。 䜿甚䟋


 cfdb::instances: mymigrate: type: mysql ... settings_tune: cfdb: init_db_from: '/var/lib/mysql' pgmigrate: type: postgresql ... settings_tune: cfdb: init_db_from: '9.5:/var/lib/postgresql/9.5/main/' 

ずころで、曎新されたcfpuppetserverモゞュヌルはすでにcfdbを䜿甚cfdbお高可甚性を構成しおいたす。 むンストヌル䞭に、メタ情報を倱うこずなくファクトベヌスが移行されたす。


instance手動操䜜を実行する


デフォルトでは、ホヌムフォルダヌは/db/{type}_{name}/になりたす。ここで、 bin/ディレクトリヌは、暙準のmysql 、 psql 、 repmgr 、およびcfdb_プレフィックスを持぀他のcfdb_䟿利なラッパヌずずもにcfdb_たす。 それらはrootずしお実行できたすが、これは同じPostgreSQLの拡匵機胜を介したスプヌフィングの可胜性があるため安党ではありたせん。 デヌタベヌスをスヌパヌナヌザヌずしお入力する䟋


 @db$ sudo -u mysql_mysrv /db/mysql_mysrv/bin/cfdb_mysql #     @db$ /db/mysql_mysrv/bin/cfdb_mysql 

バックアップず埩元


手動でバックアップおよび埩元する機胜は、 instanceホヌムフォルダヌの~/bin/cfdb_backupおよび~/bin/cfdb_restoreを䜿甚しお垞に利甚できたす。 $cfdb::instance::backup = true 、自動定期バックアップが有効になり$cfdb::instance::backup = true 。 チュヌニングは、 $cfdb::instance::backup_tuneによっお行われ$cfdb::instance::backup_tune 。 実装の詳现は、DBMSのタむプによっお異なりたす。 珟圚、 xtrabackupはMySQLで䜿甚され、 pg_backup_ctlはPostgreSQLで䜿甚されおいたす。


泚XB 2.4には問題がありたす -増分回埩には最䜎1GBの空きメモリが必芁です


たずえば、repmgrでホットスタンバむPostgreSQLクラスタヌを䜜成しおみたしょう。


  1. ホスト構成
     classes: [cfdb] cfdb::instances: pgcluster: type: postgresql port: 5432 #   is_cluster: true databases: - db1 
  2. マむナヌノヌドの構成
     classes: [cfdb] cfdb::instances: pgcluster: type: postgresql port: 5432 #      is_secondary: true 
  3. クラむアントは、単䞀ノヌドの堎合ずたったく同じ方法で構成されたすが、HAProxyは自動的に透過的にゲヌムに入りたす。


  4. 接続されおいるすべおのシステムに展開したす。 さらに2回繰り返したす。最初のステップでPuppetDBにファクトをもたらし、2番目のステップでそれを思い浮かべたす。 3回目の繰り返しでは、倉曎はありたせん。 *クラスタヌの䞀郚のノヌドを再起動する必芁がある堎合、repmgrの堎合、 max_connectionsパラメヌタヌずレプリケヌションの詳现のため、マスタヌから開始する必芁がありたす ~/bin/cfdb_repmgr cluster show 。

repmgrを䜿甚しお兞型的なPostgreSQLクラスタヌをセットアップした人はいたすか、違いを感じたしたか


Dockerや倖郚むンフラストラクチャなどのコンテナヌずの統合


2぀の偎面がありたす。1぀目はDBMS自䜓であり、2぀目は条件付きでDBMSクラむアントです。 静的バヌゞョンでは問題はありたせんが、動的に構築する堎合は、最初に最倧むンフラストラクチャを展開し、その埌、クォヌラムを節玄するためにクラスタヌノヌドを適切に切断しお䜙分なものを削陀する必芁がありたす。


「管理されおいない」倖郚クラむアントの堎合、パラメヌタヌ$cfdb::role::static_access 、集䞭メタデヌタを手動でバむパスしお、宣蚀されたアクセスに関する事実を柔軟に蚭定できたす。


合蚈で䜕がありたすか


明らかに、このアプロヌチにより、短時間で産業芏暡でデヌタベヌスクラスタヌを「リベット」および保守できるため、このようなデリケヌトな゚リアでの゚ラヌのリスクが倧幅に削枛されたす。 もちろん、珟時点では、集䞭化されたデヌタベヌスにむンフラストラクチャメタデヌタを含めるず、展開プロセスが倚少耇雑になりたす。 ある段階では、ただ展開されおいない郚分をすぐに考慮しお、これを改善する機䌚がありたすが、すべおに時間がありたす。 同時に、このPuppetモゞュヌルを䜿甚するず、最適化プロセスず最終構成の調敎の䞡方を制埡する非垞に柔軟な機胜により、最小限の劎力で安党で比范的最適に調敎されたDBMSを取埗できたす。 䞀般的な抂念は普遍的であり、必芁に応じお他のタむプのDBMSのサポヌトを簡単に远加できたす。


これらすべおのために、デヌタの安党性はそもそもです-自動化には厳しい制限があり、デヌタ損倱のリスクがある堎合、展開䞭のプロンプトに埓っお手動の介入が必芁です。


UPD Habrのマヌクダりン凊理の䞍具合が修正されたした。



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


All Articles