Jira アプリケーションを Pgpool-II に接続する

これらの手順は、Jira高可用性 Pgpool-II データベースに接続するのに役立ちます。

Pgpool データベースは Jira Software リリース 9.4.9 でもサポートされています。 

Pgpool-II について

Pgpool-II は、Postgres をベースにした高可用性 (HA) データベースソ リューションです。Pgpool-II のような高可用性データベースへの移行をお勧めする理由をご紹介します。

  1. 単一障害点 (SpoF) はありませんPgpool-II は、サービスのダウンタイムによるビジネスへの影響につながるような単一障害点を露呈する、PostgreSQL データベース特有の課題に対処します。

  2. 接続プーリング。Pgpool-II は接続プーリングを提供しているため、複数のクライアント アプリがデータベース接続プールを共有できます。これにより、クライアント リクエストごとに新しい接続を確立するオーバーヘッドが大幅に軽減され、結果的にパフォーマンスが向上し、リソース消費量を削減できます。

  3. 負荷分散。Pgpool-II には、クライアント リクエストを複数の PostgreSQL サーバー全体に分散するロード バランサーが組み込まれています。これにより、ワークロードが均等に分散され、利用可能なデータベース サーバー全体で最適なリソース使用が保証されます。

  4. 高可用性。Pgpool-II は、自動フェイルオーバーやオンライン復旧などの機能を実装することで、可用性の高い構成をサポートします。プライマリ PostgreSQL サーバーに障害が発生したことを検出し、スタンバイ サーバーを自動的にプライマリ サーバーに昇格させることができるため、ダウンタイムが最小限に抑えられ、データベースの可用性を確実に維持できます。

Pgpool-II の詳細については、公式ドキュメントをご覧ください。

はじめる前に

1. Pgpool-II 環境を実行/設定する

このドキュメントでは、VMware が提供する Bitnami の Docker イメージを使用して説明します。Pgpool の公式ドキュメントによると、この方法には いくつかのメリットがあります

  • Bitnami は上流のソースの変更を綿密に追跡し、当社の自動システムを使用してこのイメージの新バージョンを速やかに公開します。
  • Bitnami イメージがあれば、最新のバグ修正と機能を早急に利用できます。

セットアップ

まず、Postgres ノードをセットアップする必要があります。これらのノードは相互にアクセスできる必要があります。同じプライベート サブネットの一部にすることも、インターネットに公開することもできます。ただし、インターネットへの公開はお勧めしません。

  1. 別のマシンにプライマリ PostgreSQL ノードを作成します。次のコマンドを実行します。

    docker network create my-network --driver bridge

    ノードを起動すると次のようになります。

    docker run --detach --rm --name pg-0 \
      -p 5432:5432 \
      --network my-network \
      --env REPMGR_PARTNER_NODES={PG-0-IP},{PG-1-IP} \
      --env REPMGR_NODE_NAME=pg-0 \
      --env REPMGR_NODE_NETWORK_NAME={PG-0-IP} \
      --env REPMGR_PRIMARY_HOST={PG-0-IP} \
      --env REPMGR_PASSWORD=repmgrpass \
      --env POSTGRESQL_POSTGRES_PASSWORD=adminpassword \
      --env POSTGRESQL_USERNAME=customuser \
      --env POSTGRESQL_PASSWORD=custompassword \
      --env POSTGRESQL_DATABASE=customdatabase \
      --env BITNAMI_DEBUG=true \
      bitnami/postgresql-repmgr:latest

    別のマシンにプライマリ PostgreSQL ノードを作成
    (info) メッセージ [NOTICE] starting monitoring of node "pg-0" (ID: 1000)」は、プライマリ ノードが正常に作成されたことを確認するものです

  2. 別のマシンにスタンバイ ノードを作成します。次のコマンドを実行します。

    docker network create my-network --driver bridge

    ノードを起動すると次のようになります。

    docker run --detach --rm --name pg-1 \
      -p 5432:5432 \
      --network my-network \
      --env REPMGR_PARTNER_NODES={PG-0-IP},{PG-1-IP} \
      --env REPMGR_NODE_NAME=pg-1 \
      --env REPMGR_NODE_NETWORK_NAME={PG-1-IP} \
      --env REPMGR_PRIMARY_HOST={PG-0-IP} \
      --env REPMGR_PASSWORD=repmgrpass \
      --env POSTGRESQL_POSTGRES_PASSWORD=adminpassword \
      --env POSTGRESQL_USERNAME=customuser \
      --env POSTGRESQL_PASSWORD=custompassword \
      --env POSTGRESQL_DATABASE=customdatabase \
      --env BITNAMI_DEBUG=true \
      bitnami/postgresql-repmgr:latest
    1. コード サンプル内の {PG-0-IP},{PG-1-IP} を、pg-0 ノードと pg-1 ノードへのアクセスに使用できるコンマ区切りの IP アドレスに置き換えます。例: 15.237.94.251,35.181.56.169
    2. 相互接続を確立するために、スタンバイ ノードは起動後すぐにプライマリ ノードへのアクセスを試みます。
  3. その他のノードを参照する Pgpool バランサー ミドルウェア ノードを作成します。次のコマンドを実行します。

    docker network create my-network --driver bridge

    ノードを起動すると次のようになります。

    docker run --detach --name pgpool --network my-network \
      -p 5432:5432 \
      --env PGPOOL_BACKEND_NODES=0:{PG-0-HOST},1:{PG-1-HOST} \
      --env PGPOOL_SR_CHECK_USER=postgres \
      --env PGPOOL_SR_CHECK_PASSWORD=adminpassword \
      --env PGPOOL_ENABLE_LDAP=no \
      --env PGPOOL_USERNAME=customuser \
      --env PGPOOL_PASSWORD=custompassword \
      --env PGPOOL_POSTGRES_USERNAME=postgres \
      --env PGPOOL_POSTGRES_PASSWORD=adminpassword \
      --env PGPOOL_ADMIN_USERNAME=admin \
      --env PGPOOL_ADMIN_PASSWORD=adminpassword \
      --env PGPOOL_AUTO_FAILBACK=yes \
      --env PGPOOL_BACKEND_APPLICATION_NAMES=pg-0,pg-1 \
      bitnami/pgpool:latest
    1. コード サンプル内の {PG-0-HOST},{PG-1-HOST} を、pg-0 ノードと pg-1 ノードのホスト アドレス (ポートを含む) に置き換えます。例: 15.237.94.251:5432 
      Pgpool 接続

      Bitnami コンテナーの設定に関する詳細

  4. これで、pgpool コンテナーをデータベース クラスタへのエントリ ポイントとして使用できます。pgpool コンテナーに接続するには、次のコマンドを使用します。

    psql -h {PGPOOL-HOST} -p 5432 -U postgres -d repmgr

    コード サンプルの {PGPOOL-HOST}pgpool ノード アドレスに置き換えます。たとえば、34.227.66.69 とします。

    デプロイが成功したことを確認するには、次の SQL クエリを使用して
    repmgr.nodes テーブルにアクセスします。

    SELECT * FROM repmgr.nodes;

    出力には、各ノードの状態に関する情報がすべて表示されているはずです。

お使いのバージョンの PostgreSQL 用にデータベースやデータベースを作成する

Pgpool インスタンスは、データベースへのエントリ ポイントとしてのみご使用ください。

お使いのバージョンの PostgreSQL のユーザーおよびデータベース作成に関する情報については、PostgreSQL の公式ドキュメントをご覧ください。

  1. Jira が接続するためのデータベース ユーザー (ログイン ロール) を作成します (例: jiradbuser)。
    (warning) このデータベース ユーザー名は、後続の手順で Jira とデータベースの接続を設定するために使用されるため、覚えておく必要があります
  2. Unicode 照合を含む課題を保管するために、Jira 用データベースを作成します (例: jiradb)。
    (warning) データベース名は、次のステップでこのデータベースへの Jira の接続を設定するために使用されるため、忘れないようにしましょう。

    CREATE DATABASE jiradb WITH ENCODING 'UNICODE' LC_COLLATE 'C' LC_CTYPE 'C' TEMPLATE template0;

    または、コマンド ラインで次を実行します。

    $ createdb -E UNICODE -l C -T template0 jiradb
  3. ユーザーがデータベースに接続し、データベース中でテーブルを作成、書き込みできる権限を持っていることを確認します。

    GRANT ALL PRIVILEGES ON DATABASE <Database Name> TO <Role Name>
  4. 権限が正常に付与されたことを検証するには、データベースに接続して \z コマンドを実行します。

最適な PostgreSQL パフォーマンスを達成して維持するには、毎日実行する保守タスクをスケジュールして、データベースの統計を更新する必要があります。定期的な保守タスクのセットアップ方法は、ナレッジ ベース記事「VACUUM、ANALYZE、REINDEX で PostgreSQL パフォーマンスを最適化して改善する」をご確認ください

2. Jira を構成してデータベースに接続する

Jira サーバーを PostgreSQL データベースに接続する方法は 2 つあります。

データベース接続フィールド

次の表は、Jira をデータベースに接続する際に入力する必要があるフィールドです。dbconfig.xml ファイルを手動で作成または編集する場合は、この表や、表の下にある dbconfig.xml ファイルの例もご参照ください。

セットアップウィザード/設定ツールdbconfig.xml説明
ホスト名<url> タグ内 (例の太字テキスト):
<url>jdbc:postgresql:
//
dbserver:5432/jiradb</url>
PostgreSQL サーバーがインストールされている PC の名前または IP アドレス
ポート<url> タグ内 (例の太字テキスト):
<url>jdbc:postgresql:
//dbserver:
5432/jiradb</url>
PostgreSQL サーバーがリッスンしている TCP/IP ポート。このフィールドが空の場合は既定のポートが使用されます。
データベース<url> タグ内 (例の太字テキスト):
<url>jdbc:postgresql:
//dbserver:5432/
jiradb</url>
ご利用の PostgreSQL データベースの名前 (Jira データの保存先)
ユーザ名<username> タグ内:
<username>jiradbuser</username>
PostgreSQL サーバーに接続するために Jira が使用するユーザー
パスワード<password> タグ内:
<password>jiradbuser</password>
PostgreSQL サーバーとの認証に利用するユーザーのパスワード
スキーマ<schema-name> タグ内:
<schema-name>public</schema-name>

PostgreSQL データベースが使用するスキーマ名。

PostgreSQL 7.2 以降の場合は、<schema-name/> 要素で指定するスキーマが必要です。ご利用の PostgreSQL データベースが既定の public スキーマを使用している場合は、それを <schema-name/> 要素内で指定する必要があります。

ご利用のデータベース スキーマ名が小文字であることを確認します。Jira では、スキーマ名に大文字が含まれる PostgreSQL データベースは使用できません。

カスタム スキーマは問題を引き起こす可能性があるため、公開スキーマの使用をお勧めします。詳細は JRASERVER-64886 - 課題の詳細を取得しています.. ステータス をご参照ください。

dbconfig.xml ファイルのサンプル

dbconfig.xml ファイルに含まれるpool で始まる <jdbc-datasource/> の子要素の詳細はデータベース接続のチューニング」をご参照ください。

<?xml version="1.0" encoding="UTF-8"?>

<jira-database-config>
  <name>defaultDS</name>
  <delegator-name>default</delegator-name>
  <database-type>postgres72</database-type>
  <schema-name>public</schema-name>
  <jdbc-datasource>
    <url>jdbc:postgresql://dbserver:5432/jiradb</url>
    <driver-class>org.postgresql.Driver</driver-class>
    <username>jiradbuser</username>
    <password>password</password>
    <pool-min-size>20</pool-min-size>
    <pool-max-size>20</pool-max-size>
    <pool-max-wait>30000</pool-max-wait>
    <pool-max-idle>20</pool-max-idle>
    <pool-remove-abandoned>true</pool-remove-abandoned>
    <pool-remove-abandoned-timeout>300</pool-remove-abandoned-timeout>
 
    <validation-query>select version();</validation-query>
    <min-evictable-idle-time-millis>60000</min-evictable-idle-time-millis>
    <time-between-eviction-runs-millis>300000</time-between-eviction-runs-millis>
  
    <pool-test-on-borrow>false</pool-test-on-borrow>
	<pool-test-while-idle>true</pool-test-while-idle>

  </jdbc-datasource>
</jira-database-config>

3. Jira の起動

これで、PostgreSQL データベースに接続するための Jira の設定が完了しました。次のステップでは、Jira を起動します。

最終更新日 2023 年 11 月 9 日

この内容はお役に立ちましたか?

はい
いいえ
この記事についてのフィードバックを送信する
Powered by Confluence and Scroll Viewport.