sql >> データベース >  >> RDS >> PostgreSQL

接続プーラーとロードバランサーを使用したPostgreSQLのスケーリング

    スケーラビリティは、リソースを追加することで増大する需要を処理するシステムの特性です。この量の要求の理由は、たとえば、顧客または従業員の増加のために販売の割引を開始する場合、または永続的な場合など、一時的なものである可能性があります。いずれの場合も、リソースを追加または削除して、必要に応じてこれらの変更を管理したり、トラフィックを増やしたりできるはずです。

    データベースを拡張するために利用できるさまざまなアプローチがあります。このブログでは、これらのアプローチとは何か、および接続プーラーとロードバランサーを使用してPostgreSQLデータベースをスケーリングする方法について説明します。

    水平および垂直スケーリング データベースを拡張する主な方法は2つあります。

    • 水平スケーリング (スケールアウト):データベースクラスターを作成または増加するデータベースノードを追加することによって実行されます。これは、ノード間のトラフィックのバランスをとる読み取りパフォーマンスを向上させるのに役立ちます。
    • 垂直スケーリング (スケールアップ):既存のデータベースノードにハードウェアリソース(CPU、メモリ、ディスク)を追加することで実行されます。 PostgreSQLが新しいまたはより優れたハードウェアリソースを使用できるように、いくつかの構成パラメーターを変更する必要がある場合があります。
    接続プーラーとロードバランサー

    水平スケーリングと垂直スケーリングの両方で、パフォーマンスを向上させるデータベースの負荷を軽減するための外部ツールを追加すると便利な場合があります。多分それは十分ではありませんが、それは良い出発点です。このためには、接続プールとロードバランサーを実装することをお勧めします。さまざまな役割のために設計されているため、「および」と言いました。

    接続プールは、接続のプールを作成して再利用する方法であり、データベースへの新しい接続を常に開かないようにします。これにより、アプリケーションのパフォーマンスが大幅に向上します。 PgBouncerは、PostgreSQL用に設計された人気のある接続プールです。

    ロードバランサーの使用は、データベーストポロジで高可用性を実現する方法であり、使用可能なノード間のトラフィックのバランスをとることでパフォーマンスを向上させるのにも役立ちます。このため、HAProxyは、TCPおよびHTTPベースのアプリケーションの高可用性、負荷分散、およびプロキシを実装するために使用できるオープンソースプロキシであるため、PostgreSQLに適したオプションです。

    HAProxy、PgBouncer、およびPostgreSQLの組み合わせを実装する方法

    HAProxyとPgBouncerの両方のテクノロジーを組み合わせることは、PostgreSQL環境のパフォーマンスを拡張および改善するための最良の方法です。したがって、次のアーキテクチャを使用して実装する方法を説明します。

    ClusterControlがインストールされていると想定します。インストールされていない場合は、次のURLにアクセスできます。公式サイト、または公式ドキュメントを参照してインストールしてください。

    まず、HAProxyを前に置いてPostgreSQLクラスターをデプロイする必要があります。このためには、このブログ投稿の手順に従って、ClusterControlを使用してPostgreSQLとHAProxyの両方をデプロイしてください。

    この時点で、次のようになります。

    これで、各データベースノードまたは外部マシンにPgBouncerをインストールできます。 。

    PgBouncerソフトウェアを入手するには、PgBouncerダウンロードセクションに移動するか、RPMまたはDEBリポジトリを使用します。この例では、CentOS 8を使用し、公式のPostgreSQLリポジトリからインストールします。

    まず、PostgreSQLサイトから対応するリポジトリをダウンロードしてインストールします(まだインストールしていない場合):

    $ wget https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
    
    $ rpm -Uvh pgdg-redhat-repo-latest.noarch.rpm

    次に、PgBouncerパッケージをインストールします。

    $ yum install pgbouncer

    完了すると、/ etc / pgbouncer/pgbouncer.iniに新しい構成ファイルが作成されます。デフォルトの構成ファイルとして、次の例を使用できます。

    $ cat /etc/pgbouncer/pgbouncer.ini
    
    [databases]
    
    world = host=127.0.0.1 port=5432 dbname=world
    
    [pgbouncer]
    
    logfile = /var/log/pgbouncer/pgbouncer.log
    
    pidfile = /var/run/pgbouncer/pgbouncer.pid
    
    listen_addr = *
    
    listen_port = 6432
    
    auth_type = md5
    
    auth_file = /etc/pgbouncer/userlist.txt
    
    admin_users = admindb

    そして認証ファイル:

    $ cat /etc/pgbouncer/userlist.txt
    
    "admindb" "root123"
    これは単なる基本的な例です。使用可能なすべてのパラメータを取得するには、公式ドキュメントを確認してください。

    したがって、この場合、同じデータベースノードにPgBouncerをインストールし、すべてのIPアドレスをリッスンし、「world」と呼ばれるPostgreSQLデータベースに接続します。また、userlist.txtファイルで許可されているユーザーを、必要に応じて暗号化できるプレーンテキストのパスワードで管理しています。

    PgBouncerサービスを開始するには、次のコマンドを実行する必要があります。

    $ pgbouncer -d /etc/pgbouncer/pgbouncer.ini

    次に、ローカル情報(ポート、ホスト、ユーザー名、データベース名)を使用して次のコマンドを実行し、PostgreSQLデータベースにアクセスします。

    $ psql -p 6432 -h 127.0.0.1 -U admindb world
    
    Password for user admindb:
    
    psql (12.4)
    
    Type "help" for help.
    
    
    
    world=#
    これは基本的なトポロジーです。たとえば、単一障害点を回避するために2つ以上のロードバランサノードを追加したり、「キープアライブ」などのツールを使用して可用性を確保したりすることで、これを改善できます。 ClusterControlを使用して実行することもできます。

    PgBouncerとその使用方法の詳細については、このブログ投稿を参照してください。

    結論

    PostgreSQLクラスターをスケーリングする必要がある場合は、HAProxyとPgBouncerを追加すると、トラフィックのバランスをとるためにホットスタンバイノードを追加できるため、スケールアウトとスケールアップを同時に行うことができます。開いた接続を再利用するとパフォーマンスが向上します。

    ClusterControlは、監視、アラート、自動フェイルオーバー、バックアップ、ポイントインタイムリカバリ、バックアップ検証から、リードレプリカのスケーリングまで、幅広い機能を提供します。これは、使いやすく直感的なUIからPostgreSQLデータベースを水平方向または垂直方向にスケーリングするのに役立ちます。


    1. Firebaseの概要

    2. Mysqlで1つのデータベーステーブルから別のデータベーステーブルにデータを挿入する方法

    3. PostgreSQLのパフォーマンスに関するチートシート

    4. SQL Serverのxml出力にxmlエンコーディング<?xml version =1.0 encoding =UTF-8?>を追加する方法