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

PostgreSQL9.0を使用したLondisteレプリケーション

    Londiste、Skytoolsによって開発された非同期マスター/スレーブレプリケーションツール。 Slonyのように作成された非常にシンプルでユーザーフレンドリーです。 LondisteまたはSlonyの背後にあるコアロジックはリモートトリガーです。 londisteは、Slony –Iにはないイベントキューイングモデルに従います。

    Skytoolsの概要:
    SkytoolsはPythonベースのアプリケーションであり、PgQ、Londiste、Walmgrの3つのバンドルが付属しており、Python-Postgresドライバー「psycopg2」も必要です。

    • PGQ:その上にphythonフレームワークを備えたpl/pgsqlで構築されたキューメカニズム。
    • Londiste:イベントトランスポーターとしてPgQを使用してPhytonで作成されたレプリケーションツール。
    • Walmgr:WALアーカイブ設定を作成します。

    Skytools(PgQ / Londiste / WalMgr)に関する最良のチュートリアルは、このリンクhttp://skytools.projects.postgresql.org/doc/にあるため、ここではlondisteレプリケーションデーモンプロセスなどについてはあまり説明しません。

    基本的に、私のデモには、PostgreSQL 9.0を使用してLondisteレプリケーションを進める方法と、インストール手順が含まれています。私が言うには、SkytoolsのドキュメントとPostgreSQL Wiki(http://wiki.postgresql.org/wiki/Londiste_Tutorial)は、Londisteレプリケーションで遊ぶためのものです。

    ダウンロードリンクの前提条件:

    • PostgreSQL – PostgreSQL 9.0 http://www.enterprisedb.com/products-services-training/pgdownload
    • skytools – skytools-2.1.12.tar.gz http://pgfoundry.org/frs/download.php/2872/skytools-2.1.12.tar.gz
    • psycopg2 – psycopg2-2.4.2.tar.gz http://initd.org/psycopg/tarballs/PSYCOPG-2-4/psycopg2-2.4.2.tar.gz

    私のデモには以下が含まれます:-

    OS                     : RHEL 6 32 bit
    DB version : PostgreSQL 9.0
    Two Clusters & Database: londiste_provider on 5432,Londiste_subscriber on 5433
    Table : One Table (ltest)
    Location of .ini file : /opt/skytools-2.1.12/scripts
    Location of Skytools : /opt/skytools-2.1.12
    Location of PG 9.0 : /opt/PostgreSQL/9.0/

    1つのテーブルを使用した単純なデモとして、ローカルボックスに2つのクラスターを備えたRHEL632ビット/PostgreSQL9.0を試してみました。実際の要件に従って微調整する必要があります。

    注: セットアップを進める前に、すべてのソースインストールはrootユーザーである必要があり、インストール後、これらのディレクトリはPostgresユーザー権限を所有している必要があることを思い出してください。

    ステップ1。
    PostgreSQL 9.0をインストールし、INITDBコマンドを使用して2つのクラスターを作成し、それぞれ5432と5433で実行されることを確認します。 (INITDBコマンドを使用するとpg_logディレクトリがData_directoryの下に作成されないという古い事実を覚えておいてください。明示的に作成する必要があります。)

    ステップ2。
    上記のリンクからダウンロードして、skytoolsをインストールします。すべてのソースを1つの共通の標準的な場所に保持することをお勧めします。 「/opt/」の下に「/usr/ local/src」とskytoolsを使用しました。次に、PostgreSQL9.0の「pg_config」を使用してskytoolsを構成します。

    # tar -xvf skytools-2.1.12.tar.gz
    # cd /usr/local/src/skytools-2.1.12
    # ./configure --prefix=/opt/skytools-2.1.12 --with-pgconfig=/opt/PostgreSQL/9.0/bin/pg_config
    # make
    # make install

    注: インストール後、PostgreSQLのcontribの場所の下に2つの重要なcontribモジュール(pgqとlondiste)が表示されます。基本的に、これら2つの貢献により、londisteレプリケーションの機能が提供されます。

    # cd /opt/PostgreSQL/9.0/share/postgresql/contrib
    # ll lond*
    -rw-r--r--. 1 root root 29771 Jan 11 13:24 londiste.sql
    -rw-r--r--. 1 root root 27511 Jan 11 13:24 londiste.upgrade.sql

    # ll pgq*
    -rw-r--r--. 1 root root 4613 Jan 11 13:24 pgq_ext.sql
    -rw-r--r--. 1 root root 1170 Jan 11 13:24 pgq_lowlevel.sql
    -rw-r--r--. 1 root root 69798 Jan 11 13:24 pgq.sql
    -rw-r--r--. 1 root root 3940 Jan 11 13:24 pgq_triggers.sql
    -rw-r--r--. 1 root root 54182 Jan 11 13:24 pgq.upgrade.sql

    ステップ3。
    skytoolsに必要なphyton-postgresドライバーであるpsycopg2をインストールします。これらのドライバーにはPythonが付属していない場合があるため、インストール手順は次のとおりです。

    # tar -xvf psycopg2-2.4.2.tar.gz
    # cd psycopg2-2.4.2
    # python setup.py install --prefix=/usr/local
    # python setup.py build_ext --pg-config /opt/PostgreSQL/9.0/bin/pg_config

    ステップ4。
    Postgresの所有権をskytoolsとpostgresのインストール場所に付与します。これにより、すべてのファイル/実行可能ファイルにPostgresユーザー権限が付与されます。

    # chown -R postgres:postgres /opt/skytools-2.1.12 
    # chown -R postgres:postgres /opt/PostgreSQL/9.0/

    ステップ5。
    LD_LIBRARY_PATHとPYTHONPATHを設定し、新しく作成された2つのクラスターを開始します。永続的な解決策として、postgresユーザーの.bash_profileに配置できます。

    $export PYTHONPATH=/opt/skytools-2.1.12/lib/python2.6/site-packages/
    $export LD_LIBRARY_PATH=/opt/PostgreSQL/9.0/lib:/usr/lib:/usr/lib/perl5/5.10.0/i386-linux-thread-multi/CORE:
    or
    $ vi .bash_profile
    export PYTHONPATH=/opt/skytools-2.1.12/lib/python2.6/site-packages/
    export LD_LIBRARY_PATH=/opt/PostgreSQL/9.0/lib:/usr/lib:/usr/lib/perl5/5.10.0/i386-linux-thread-multi/CORE:
    :wq
    $ . .bash_profile (execute to take effect of new settings)

    Now Start the two cluster

    $ pg_ctl -o "-p 5432" -D /opt/PostgreSQL/9.0/data start
    $ pg_ctl -o "-p 5433" -D /opt/PostgreSQL/9.0/data_1 start

    ステップ6。
    2つのデータベース、5432のlondiste_providerと5433のlondiste_subscriberを作成します。2つのデータベースに主キー名「ltest」のテーブルを1つ作成し、londiste_provider(ltest)テーブルにデータを挿入します。後でレプリケーションのセットアップを完了すると、これらのINSERTが表示されます。 londiste_subscriber側のデータ。

    スレーブ側でCRETAETABLEは必要ない場合があります。代わりに、テーブルが多数ある場合は、pg_dump/pg_restoreを使用して構造体のダンプ/復元を使用できます。

    On 5432
    psql -p 5432 -c "create database londiste_provider;"
    psql -p 5432 londiste_provider
    londiste_provider=# create table ltest(id int primary key);
    londiste_provider=# insert into ltest VALUES (generate_series(1,10));
    INSERT 0 10

    On 5433
    psql -p 5433 -c "create database londiste_subscriber;"
    psql -p 5433 londiste_subscriber
    londiste_subscriber=# create table ltest(id int primary key);

    ステップ7。
    2つの.iniファイルを作成します。1つはlondiste(londiste.ini)用で、もう1つはPgQティッカー(pgq_ticker.ini)用です。 skytoolsの基本インストールからサンプルの.iniファイルを見つけることもできます。例:-「/ opt / skytools-2.1.12 / share / doc / skytools/conf」の場所。

    ステップ8。
    ログとPIDのファイル用に2つのディレクトリを作成し、それらをlondiste.iniとpgq_ticker.iniのパラメータでポイントします。

    $ cd /opt/PostgreSQL/9.0
    $ mkdir log pid

    ステップ9
    .iniファイルを使用してレプリケーションを開始し、最初にプロバイダーとサブスクライバーにlondisteをインストールしてから、テーブルをレプリケートするためのティッカー(PgQ)を開始します。

    以下のコマンドを1つずつ使用して、プロバイダーとサブスクライバーにlondisteをインストールします。

    $ cd /opt/skytools-2.1.12/bin
    $ ./londiste.py ../scripts/londiste.ini provider install
    2012-01-12 14:56:03,667 11073 INFO plpgsql is installed
    2012-01-12 14:56:03,674 11073 INFO txid_current_snapshot is installed
    2012-01-12 14:56:03,675 11073 INFO Installing pgq
    2012-01-12 14:56:03,676 11073 INFO Reading from /opt/skytools-2.1.12/share/skytools/pgq.sql
    2012-01-12 14:56:03,816 11073 INFO Installing londiste
    2012-01-12 14:56:03,816 11073 INFO Reading from /opt/skytools-2.1.12/share/skytools/londiste.sql

    -bash-4.1$ ./londiste.py ../scripts/londiste.ini subscriber install
    2012-01-12 14:56:17,871 11081 INFO plpgsql is installed
    2012-01-12 14:56:17,872 11081 INFO Installing londiste
    2012-01-12 14:56:17,873 11081 INFO Reading from /opt/skytools-2.1.12/share/skytools/londiste.sql

    -->Now, Install PqQ and start ticker with .ini file.

    -bash-4.1$ ./pgqadm.py ../scripts/pgqadm.ini install
    2012-01-11 16:45:03,219 6348 INFO plpgsql is installed
    2012-01-11 16:45:03,225 6348 INFO txid_current_snapshot is installed
    2012-01-11 16:45:03,228 6348 INFO pgq is installed

    -bash-4.1$ ./pgqadm.py -d ../scripts/pgqadm.ini ticker -d

    -->Add the table to provider & subscriber to replicate.

    -bash-4.1$ ./londiste.py ../scripts/londiste.ini provider add ltest
    2012-01-12 15:03:39,583 11139 INFO Adding public.ltest

    -bash-4.1$ ./londiste.py ../scripts/londiste.ini subscriber add ltest
    2012-01-12 15:03:47,367 11146 INFO Checking public.ltest
    2012-01-12 15:03:47,384 11146 INFO Adding public.ltest

    追加した後、テーブルのレプリケーションを開始します。

    -bash-4.1$ ./londiste.py ../ scripts/londiste.ini replay -d

    Note: "-d" option is to run the londiste/PgQ daemons in background.

    ここで、レプリケーションのセットアップを完了します。これで、スレーブ側(つまり、5433ポート)に「ltest」テーブルデータが表示されます。

    ステップ10。
    ここで、table / logs / pids/dataなどのバックグラウンドで何が起こったのかを理解しましょう。1つずつ見ていきましょう。

    ログ情報:

    レプリケーション後のテーブル構造:

    イベントキューのステータス
    レプリケーションステータスは、以下のようにpgqユーティリティで確認できます。-

    -bash-4.1$ ./pgqadm.py ../scripts/pgqadm.ini status
    Postgres version: 9.0.1 PgQ version: 2.1.8

    Event queue Rotation Ticker TLag
    ------------------------------------------------------------------------------
    londiste.replica 3/7200s 500/3s/60s 6s
    ------------------------------------------------------------------------------

    Consumer Lag LastSeen
    ------------------------------------------------------------------------------
    londiste.replica:
    myfirstlondiste 6s 6s
    ------------------------------------------------------------------------------

    注: Londiste&PGQユーティリティには、研究開発を行うための非常に優れたオプションがあります。
    Londisteレプリケーションのセットアップが成功することを願っています。高く評価されているコメントを投稿してください。いくつかの投稿でまたお会いしましょう。


    1. 過去10日間の日付のレコードを一覧表示するにはどうすればよいですか?

    2. PSQLException:エラー:リレーションTABLE_NAMEが存在しません

    3. postgresで、タイムスタンプのデフォルトのフォーマットをセッションごとまたはグローバルに設定できますか?

    4. Postgresのすべてのテーブルの行数をどのように見つけますか