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

シンプルなSlony-Iレプリケーションのセットアップ。

    上に示したのは、Slony-I非同期レプリケーションの概要です。詳細については、Slony-Iドキュメントがあなたの親友です:)

    レプリケーションメソッドから始めましょう。perltoolsメソッドでは、組み込みのperlスクリプトを有効にするために、ソースのインストール時にslonyを構成する必要があります。これらのスクリプトは「SLONIK_」で始まり、レプリケーション管理タスクを実行するように設計されています。

    2つのメソッドshell(slonik)とPerlのデモは、Localhost Single instance(5432)にあり、2つのデータベースMasterとSlaveが1つのテーブル「rep_table」を複製しています。レプリケーションの場合、マスター/スレーブは同じテーブル構造を保持する必要があります。多くのテーブルがある場合は、pg_dump/pg_restore構造体ダンプオプションを使用してください。 1つのテーブルを複製しているので、マスター/スレーブで同じものを作成しました。
    注:PGDATA、PGPORT、PGHOST、PGPASSWORD、PGUSERなどの環境変数を設定します。

    ソースのインストール:

    Download the Slony-I 2.1 source(http://slony.info/downloads/) 

    #bunzip2 slony1-2.1.0.tar.bz2
    #tar -xvf slony1-2.1.0.tar
    # cd slony1-2.1.0
    #./configure --prefix=/opt/PostgreSQL/9.1/bin
    --with-pgconfigdir=/opt/PostgreSQL/9.1/bin
    --with-perltools=/opt/PostgreSQL/9.1/bin
    // Exclude --with-perltools if not needed
    # make
    # make install

    マスター/スレーブの基本設定

    createdb -p 5432 master
    createdb -p 5432 slave

    psql -p 5432 -d master -c "create table rep_table(id int primary key);"
    psql -p 5432 -d slave -c "create table rep_table(id int primary key);"

    Insert some data on master to replicate to slave
    psql -p 5432 -d master -c "insert into rep_table values(generate_series(1,10));"

    方法1:–with-perltools:

    1.標準の.confファイルで、ログの場所、ノードの数、テーブルのセットなどの情報を使用して作成します。

    $CLUSTER_NAME = 'myrep';
    $LOGDIR = '/opt/PostgreSQL/9.1/slonylogs';
    $MASTERNODE = 1;
    $DEBUGLEVEL = 2;

    &add_node(node => 1,host => 'localhost',dbname => 'master',port => 5432,user => 'postgres',password => 'postgres');
    &add_node(node => 2,host => 'localhost',dbname => 'slave',port => 5433,user => 'postgres',password => 'postgres');

    $SLONY_SETS =
    {
    "set1" =>
    {
    "set_id" => 1,
    "table_id" => 1,
    "pkeyedtables" =>
    [rep_table,],
    },
    };

    初期化、作成セット、サブスクライブセット。これらはslonyレプリケーションの3つのフェーズです。フェーズごとに、「slonik_」perlスクリプトが、オプション「–with-perltools」を使用して、ソースのインストール時に指定された場所に作成されます。私の場合、「/ opt / PostgreSQL / 9.1/bin」です。上記のCONFファイルはすべてのフェーズで使用されます。

    2.クラスターを初期化します。ここでslonikは、ノードの接続をクロスチェックします。

    cd /opt/PostgreSQL/9.1/bin
    ./slonik_init_cluster -c slon.conf
    ./slonik_init_cluster -c slon.conf| ./slonik

    3.セットを作成します。これは、ノード1からノード2に複製するテーブルのセットを意味します。

    ./slonik_create_set -c slon.conf 1 
    ./slonik_create_set -c slon.conf 1|./slonik

    4.Slonデーモンを起動します。各ノードには、作業を実行するための2つのslonプロセスがあります。各ノードのslonプロセスを開始する必要があります。

    ./slon_start -c slon.conf 1
    ./slon_start -c slon.conf 2

    5.サブスクライブセット。ここから、slonyは、すべてのDMLに対してマスターを許可し、スレーブでそれらを拒否することにより、2つのノード間のデータの一貫性を維持します。

    ./slonik_subscribe_set -c slon.conf 1 2 
    ./slonik_subscribe_set -c slon.conf 1 2|./slonik

    上記の手順を実行すると、スレーブはデータを複製します。

    方法2:標準スクリプトを使用する場合:

    標準のスクリプトメソッドでは、実装する方法はたくさんありますが、明確に理解するために、Initialize、create-set、subscribesetのように上記で行ったPerlと同じように分割しました。すべてのスクリプトはSLONIKコマンドでバインドされています。

    1.マスターおよびスレーブノード用に2つの.confファイルを作成します。

    vi master_slon.conf
    cluster_name=myrep
    pid_file='/opt/PostgreSQL/9.1/data/master_slon.pid'
    conn_info='host=localhost dbname=master user=postgres port=5432'

    vi slave_slon.conf
    cluster_name=myrep
    pid_file='/opt/PostgreSQL/9.1/data/slave_slon.pid'
    conn_info='host=localhost dbname=slave1 user=postgres port=5432'

    2.クラスターを初期化します。

    #!/bin/bash
    # Initialize Cluster (init_cluster.sh)

    slonik <<_eof_
    cluster name = myrep;
    node 1 admin conninfo='host=127.0.0.1 dbname=master user=postgres port=5432';
    node 2 admin conninfo='host=127.0.0.1 dbname=slave1 user=postgres port=5432';

    #Add Node
    init cluster (id = 1, comment = 'Primary Node For the Slave postgres');
    store node (id = 2, event node = 1, comment = 'Slave Node For The Primary postgres');

    #Setting Store Paths ...
    echo 'Stored all nodes in the slony catalogs';
    store path(server = 1, client = 2, conninfo='host=127.0.0.1 dbname=master user=postgres port=5432');
    store path(server = 2, client = 1, conninfo='host=127.0.0.1 dbname=slave1 user=postgres port=5432');
    _eof_

    $./init_cluster.sh

    3.セットを作成します。

    #!/bin/bash
    # Create Set for set of tables (create-set.sh)

    slonik <<_eof_
    cluster name = myrep;
    node 1 admin conninfo='host=127.0.0.1 dbname=master user=postgres port=5432';
    node 2 admin conninfo='host=127.0.0.1 dbname=slave1 user=postgres port=5432';

    try { create set (id = 1 ,origin = 1 , comment = 'Set for public'); } on error { echo 'Could not create set1'; exit 1;}

    set add table (set id = 1 , origin = 1, id = 1, full qualified name = 'public.rep_table1', comment = 'Table action with primary key');
    _eof_

    $./create-set.sh

    4. Slonデーモンを起動するには、「/tools」の場所「start_slon.sh」の下にあるソースtarbalに付属しているカスタムスクリプトを使用します。マスター/スレーブ起動スクリプトの.confファイルの場所を変更して、スクリプトを変更します。このスクリプトは、.confファイルに記載されているPIDを使用して、すべてのslonプロセスを柔軟に使用および追跡できるようにします。

    Usage: ./master_start_slon.sh [start|stop|status]

    -bash-4.1$ ./master_start_slon.sh start
    -bash-4.1$ ./slave_start_slon.sh start

    Sample STATUS output:

    -bash-4.1$ ./master_start_slon.sh status
    ---------------------
    Slony Config File : /opt/PostgreSQL/9.1/slony_scripts/bash_slony/master_slon.conf
    Slony Bin Path : /opt/PostgreSQL/9.1/bin
    Slony Running Status : Running...
    Slony Running (M)PID : 28487
    ---------------------

    4.サブスクライブセット。

    #!/bin/bash
    # Subscribe Set (subscribe-set.sh)

    slonik <<_eof_
    cluster name = myrep;
    node 1 admin conninfo='host=127.0.0.1 dbname=master user=postgres port=5432';
    node 2 admin conninfo='host=127.0.0.1 dbname=slave1 user=postgres port=5432';

    try { subscribe set (id = 1, provider = 1 , receiver = 2, forward = yes, omit copy = false); } on error { exit 1; } echo 'Subscribed nodes to set 1';
    _eof_

    $./subscribe-set.sh

    これで、スレーブデータベースの「rep_table」テーブルにデータが複製されます。
    これらの2つの方法は、slony複製の基本的な設定を理解するのに役立ちます。より高度なスロニーのコンセプトで戻ってきます。


    1. mysqlデータベースが存在するかどうかを確認する方法

    2. SQL Server(T-SQL)でデータベースメールプロファイルを更新する

    3. 高可用性のためにPostgreSQLストリーミングレプリケーションでOdoo12をクラスター化する方法

    4. URLの日付dd/mm / yyyy