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

OmniDBを使用してPostgreSQL12のパフォーマンスを監視する方法–パート1

    OmniDBは、PostgreSQLテクノロジーとサービスの世界的リーダーである2ndQuadrantによって開発されたオープンソースのグラフィカルデータベース管理ツールです。 OmniDBは、PostgreSQL、MariaDB、MySQL、Oracleなどの主要なデータベースエンジンを管理できるブラウザベースのユニバーサルクライアントツールです。間もなくサポートされるその他のエンジンには、SQLite、Firebird、MS SQL Server、およびIBMDB2が含まれます。

    他の優れたデータベースクライアントソフトウェアと同様に、OmniDBもいくつかの優れた機能をユーザーに提供します。これには、データベースパフォーマンス監視ダッシュボードを作成およびカスタマイズする機能が含まれます。この2部構成の記事シリーズでは、OmniDBの組み込みの監視ユニット(ダッシュボード用語では「ウィジェット」と呼ばれる)を使用して、PostgreSQL12レプリケーションクラスターのパフォーマンスヘルスチェックダッシュボードを構築する方法を学習します。

    テスト環境

    テスト環境は、us-east-1リージョンのAWSVPCで実行されている2ノードのPostgreSQL12クラスターです。 VPCは3つのアベイラビリティーゾーンにまたがり、3つのサブネットを持っています。各サブネットは、個別のアベイラビリティーゾーン(AZ)にあります。プライマリノードとスタンバイノードは、これらのサブネットの2つにあります。ノードは両方ともt2.largeEC2インスタンスタイプであり、オープンソースのPostgreSQL12を実行します。プライマリノードはスタンバイノードにレプリケートされます。

    2ndQuadrantのOmniDBデータベース管理ツールの最新バージョンを実行する「監視ノード」もあります。このノードはPostgreSQLクラスターの一部ではありませんが、別のAZのVPCの3番目のサブネットでホストされます。 OmniDBは、マスターノードとスタンバイノードの両方に接続して、それらのパフォーマンスを確認できます。 OmniDBノードはt2.mediumEC2インスタンスになります。

    3つのノードすべてでRedHatEnterprise Linux(RHEL)8が実行されます。次の画像は、簡略化されたアーキテクチャを示しています。

    テストシナリオ

    クラスタとOmniDBを設定したら、両方のPostgreSQLノードをOmniDBに登録します。次に、OmniDBの標準的な監視ユニットのいくつかに精通し、両方のクラスターノードからのパフォーマンスメトリックを表示します。次に、pgbenchを使用してプライマリノードで負荷テストを実行します。理想的には、負荷テストは別のマシンから開始する必要がありますが、この場合はローカルで実行します。次に、OmniDBの監視ダッシュボードが、負荷の変化に応じてさまざまなパフォーマンスカウンターの変化をどのように表示するかを確認します。

    環境の設定

    ステップ1:PostgreSQL12レプリケーションクラスターのインストール

    2ノードのPostgreSQLクラスターを作成するには、以前に公開された2ndQuadrantブログで説明されている手順に従います。読者はこの記事をチェックして、 repmgr と呼ばれる別の2ndQuadrant製品を使用して、監視ノードを備えた3ノードクラスタをインストールした方法を確認できます。 。現在のセットアップでは、repmgrを使用して同じ手順に従って、3ノードクラスターではなく2ノードクラスターを作成しています。また、レプリケーションクラスターには監視ノードがありません。簡単にするために、この記事では詳細なインストールと構成の手順を示していません。

    クラスタが設定されたら、プライマリノードからpg_stat_replicationビューにクエリを実行して、クラスタが機能していることを確認できます。

    SELECT 
        usename, client_addr, application_name, state, sent_lsn, write_lsn,replay_lsn
    FROM 
        pg_stat_replication;

    ステップ2:OmniDBサーバーのインストールと構成

    OmniDBは、URLを使用してアクセスされます。つまり、バックグラウンドで、独自のWebサーバーを実行します。 OmniDBには2つのフレーバーがあります:

    • OmniDBアプリケーション :これは通常、ワークステーションから実行され、通常のデスクトップアプリケーションのように動作します。 OmniDBはランダムポートでWebサーバーを実行し、追加のセットアップは必要ありません。
    • OmniDBサーバー :これは、マルチユーザーモードのネットワークサーバーにOmniDBをインストールするためのものです。サーバーモードでは、URLにアクセスするためのポート番号、URLのSSL暗号化、負荷分散とリバースプロキシ、データベースノードへのSSHパススルーアクセス、アクセス用のユーザーアカウントの作成を指定できます。

    テストシナリオでは、OmniDBEC2ノードにOmniDBサーバーをインストールします。まず、OmniDBサイトから最新のパッケージをダウンロードしています:

    # wget https://www.omnidb.org/dist/2.17.0/omnidb-server_2.17.0-centos7-amd64.rpm

    次に、インストールを開始します。ここでは、rootユーザーとしてOmniDBをインストールしていますが、正しい権限があれば、他のユーザーを使用できます。

    # rpm -ivh omnidb-server_2.17.0-centos7-amd64.rpm
    Verifying...                          ################################# [100%]
    Preparing...                          ################################# [100%]
    Updating / installing...
       1:omnidb-server-2.17.0-0           ################################# [100%]

    パッケージがインストールされると、コマンドプロンプトからOmniDBを起動できます:

    # omnidb-server

    これはサーバーの起動を示しています:

    Starting OmniDB websocket...
    Checking port availability...
    Starting websocket server at port 25482.
    Starting OmniDB server...
    Checking port availability...
    Starting server OmniDB 2.17.0 at 127.0.0.1:8000.
    Starting migration of user database from version 0.0.0 to version 2.17.0...
    OmniDB successfully migrated user database from version 0.0.0 to version 2.17.0
    Open OmniDB in your favorite browser
    Press Ctrl+C to exit

    OmniDBがデフォルトのWebサーバーポート8000​​を選択し、デフォルトのWebSocketサーバーをポート25482で選択していることがわかります。

    Ctrl + Cを押してサーバープロセスを停止し、rootユーザーのホームディレクトリを参照します。 .omnidbという名前の隠しフォルダがあることがわかります 。このフォルダの下に、 omnidb-serverというサブディレクトリがあります。 。 omn​​idb-serverサブディレクトリ内には、いくつかのファイルがあります:

    # ls -la ~drwxr-xr-x.  3 root root       27 Jun 13 02:49 .omnidb
    …
    …
    # ls -la ~/.omnidbdrwxr-xr-x. 2 root root  106 Jun 13 02:49 omnidb-server
    # ls -la ~/.omnidb/omnidb-server/
    …
    -rw-r--r--. 1 root root 131072 Jun 13 02:49 db.sqlite3
    -rw-r--r--. 1 root root   1209 Jun 13 02:49 omnidb.conf
    -rw-r--r--. 1 root root 116736 Jun 13 02:49 omnidb.db
    -rw-r--r--. 1 root root      0 Jun 13 02:49 omnidb.db.bak_2.17.0
    -rw-r--r--. 1 root root    579 Jun 13 02:49 omnidb.log

    サーバープロセスが開始すると、OmniDBはこれらのファイルを初期化します。 OmniDBメタデータデータベースはomnidb.dbと呼ばれます 。これはSQLiteデータベースであり、データベース接続、OmniDBユーザーなどに関する情報が含まれています。 omnidb.conf ファイルには、OmniDBサーバーの構成オプションが含まれています。このファイルをエディターで開くと、次のようになります。

    # OmniDB Server configuration file
    
    [webserver]
    # What address the webserver listens to, 0.0.0.0 listens to all addresses bound to the machine
    listening_address    = 127.0.0.1
    
    # Webserver port, if port is in use another random port will be selected
    listening_port       = 8000
    
    # Websocket port, if port is in use another random port will be selected
    websocket_port       = 25482
    
    # External Websocket port, use this parameter if OmniDB isn't directly visible by the client
    # external_websocket_port = 25482
    # Security parameters
    # is_ssl = True requires ssl_certificate_file and ssl_key_file parameters
    # This is highly recommended to protect information
    is_ssl               = False
    ssl_certificate_file = /path/to/cert_file
    ssl_key_file         = /path/to/key_file
    
    # Trusted origins, use this parameter if OmniDB is configured with SSL and is being accessed by another domain
    csrf_trusted_origins = origin1,origin2,origin3
    
    # Url path to access OmniDB, default is empty
    path =
    
    [queryserver]
    # Max number of threads that can used by each advanced object search request
    thread_pool_max_workers = 2
    # Number of seconds between each prompt password request. Default: 30 minutes
    pwd_timeout_total = 1800

    OmniDBは2つのサーバープロセスを実行します。 1つはユーザーインターフェイスを表示するWebサーバーで、もう1つはWebSocketサーバーです。 WebSocketサーバーは、クエリ、コンソール、デバッグなど、アプリケーションのいくつかの機能で使用されます。

    構成ファイルから、デフォルトでOmniDBサーバーがWebサーバーポート8000​​でローカルトラフィック(127.0.0.1)を受け入れることがわかります。これをすべてのIPアドレスに変更します。マシンがリバースプロキシの背後にある場合を除き、サーバーへのHTTP接続にSSL暗号化を使用することを強くお勧めします。ただし、この例では、 is_sslを残します テストが完了したらこのマシンを破棄するため、パラメータを「False」に設定します。また、Webサーバーのポートを8080に変更し、WebSocketサーバーのポートをデフォルト値の25482に維持します。

    変更が加えられると、構成ファイルは次のようになります。

    [webserver]
    listening_address    = 0.0.0.0
    listening_port       = 8080
    websocket_port       = 25482
    
    is_ssl               = False
    ssl_certificate_file = /path/to/cert_file
    ssl_key_file         = /path/to/key_file
    csrf_trusted_origins = origin1,origin2,origin3
    
    path =
    
    [queryserver]
    thread_pool_max_workers = 2
    pwd_timeout_total = 1800
    >

    変更を加えて保存したら、 omnidb-config-serverという別のアプリケーションを実行します。 。このツールを使用して、次のような追加の構成を実行できます。

    • SQLiteデータベースOmniDBデータベースのバキューム
    • 古いデータベースをリセットして新しいデータベースを作成します
    • 一時ファイルを削除する
    • データベースと構成ファイル用の新しいホームディレクトリを作成します
    • OmniDBにログインするためのスーパーユーザーを作成する

    デフォルトで作成された管理者ユーザーアカウントを使用してOmniDBにログインしますが、ここで別のスーパーユーザーを作成します。これは、OmniDBで個別のDBAアカウントを作成する場合に役立ちます。以下のスニペットはこれを示しています:

    # omnidb-config-server --createsuperuser=dba [email protected]$$w0rd123
    Creating superuser...
    Superuser created.

    スーパーユーザーを作成したら、omnidb-serverプロセスを再開します。

    # omnidb-server
    Starting OmniDB websocket...
    Checking port availability...
    Starting websocket server at port 25482.
    Starting OmniDB server...
    Checking port availability...
    Starting server OmniDB 2.17.0 at 0.0.0.0:8080.
    User database version 2.17.0 is already matching server version.
    Open OmniDB in your favorite browser
    Press Ctrl+C to exit

    OmniDBインターフェースにアクセスする前に、ポート8080とポート25482をEC2インスタンスのセキュリティグループに追加します。

    ステップ3:OmniDBインターフェイスへのアクセス

    パブリックアドレスとOmniDBノードを参照すると、ログイン画面が表示されます。

    デフォルトのユーザー名「admin」とそのパスワード「admin」を指定します。これにより、メインのOmniDBインターフェースにログインできます。最初の画面を以下に示します:

    次に、画面の右上隅にある[ユーザーの管理]アイコンをクリックします。

    そして、管理者ユーザーのデフォルトのパスワードを変更します:

    完了したら、「データの保存」ボタンをクリックしてパスワードを更新します。ご覧のとおり、この画面から新しいユーザーを作成することもできます。

    画面の左上隅にある[接続]リンクをクリックし、表示されるダイアログボックスから[新しい接続]ボタンをクリックします。

    次に、プライマリPostgreSQLノードの接続の詳細を指定し、[データの保存]ボタンをクリックします。

    接続が保存されたら、[アクション]列の接続アイコン(緑色のチェックマーク)をクリックします。

    これにより、データベース接続を示す新しいタブが開きます。ここに示すように、ここでプライマリPostgreSQLノードに接続しています:

    同じプロセスに従って、スタンバイノードを登録します。

    ステップ4:サンプルデータベースの復元

    現在、プライマリPostgreSQLインスタンスでサンプルデータベースを復元しています。このデータベースは「DVDRental」と呼ばれ、PostgreSQLチュートリアルサイトから無料でダウンロードできます。ダウンロードしたファイルを解凍し、ソースファイルをプライマリノードの/tmpフォルダーの下のサブディレクトリに抽出しました。

    [[email protected] dvdrental] # ls -la
    total 2796
    drwxr-xr-x. 2 root     root         280 Jun 16 11:32 .
    drwxrwxrwt. 9 root     root         257 Jun 16 11:31 ..
    -rw-------. 1 postgres postgres   57147 May 12  2019 3055.dat
    -rw-------. 1 postgres postgres    8004 May 12  2019 3057.dat
    -rw-------. 1 postgres postgres     483 May 12  2019 3059.dat
    -rw-------. 1 postgres postgres  333094 May 12  2019 3061.dat
    -rw-------. 1 postgres postgres  149469 May 12  2019 3062.dat
    -rw-------. 1 postgres postgres   26321 May 12  2019 3063.dat
    -rw-------. 1 postgres postgres   46786 May 12  2019 3065.dat
    -rw-------. 1 postgres postgres   21762 May 12  2019 3067.dat
    -rw-------. 1 postgres postgres    3596 May 12  2019 3069.dat
    -rw-------. 1 postgres postgres  140422 May 12  2019 3071.dat
    -rw-------. 1 postgres postgres     263 May 12  2019 3073.dat
    -rw-------. 1 postgres postgres  718644 May 12  2019 3075.dat
    -rw-------. 1 postgres postgres 1214420 May 12  2019 3077.dat
    -rw-------. 1 postgres postgres     271 May 12  2019 3079.dat
    -rw-------. 1 postgres postgres      57 May 12  2019 3081.dat
    -rw-------. 1 postgres postgres   45872 May 12  2019 restore.sql
    -rw-------. 1 postgres postgres   55111 May 12  2019 toc.dat

    次に、プライマリPostgreSQLインスタンス(PG-Node1)で次のシェルコマンドを実行します。これらのコマンドは、restore.sqlファイルにいくつかの変更を加えます。

    • 「$$ PATH$$/」の出現箇所をすべて削除します。これにより、スクリプトが同じディレクトリ内のすべてのデータファイルを確実に見つけることができます
    • 「English_UnitedStates.1252」のすべての出現箇所を「en_US.UTF-8」に変更します。これにより、スクリプトの実行時にロケールが欠落しているためにエラーが発生することはありません。
    • 「DROPDATBASEdvdrental」コマンドを「DROPDATBASE IF EXISTS dvdrental」に変更して、無効なデータベースエラーが表示されないようにします。
    # sed -i 's/$$PATH$$\//\/tmp\/dvdrental\//g' /tmp/dvdrental/restore.sql
    # sed -i 's/English_United States.1252/en_US.UTF-8/g' /tmp/dvdrental/restore.sql
    # sed -i 's/DROP DATABASE dvdrental;/DROP DATABASE IF EXISTS dvdrental;/g' /tmp/dvdrental/restore.sql

    次に、postgresユーザーに切り替えて、シェルプロンプトから次のコマンドを実行します。

    $ psql -U postgres -d postgres -f /tmp/dvdrental/restore.sql

    これにより、プライマリノードのサンプルデータベースが復元されます。 OmniDBから確認すると、データベースが作成されていることがわかります。

    結論

    これで、完全に機能するPostgreSQLクラスターとOmniDBインスタンスがAWSで実行されます。 OmniDBは、クラスターの両方のノードに接続できます。また、スタンバイに複製されているプラ​​イマリノードのデータベースを復元しました。

    これで環境のセットアップは完了です。この記事の第2部では、プライマリインスタンスのパフォーマンス監視ダッシュボードの作成を開始します。


    1. SQL Server(T-SQL)でのRIGHT()関数のしくみ

    2. 各行の列値に基づいて行を繰り返す

    3. 修正:SQL Server(およびSQL Edge)の「リカバリモデルがSIMPLEである間は、ステートメントBACKUPLOGは許可されません」

    4. SQLite参加