ダミー用Postgres-xlクラスター展開

こんにちは。 ダミー用のミニ命令の形式でPostgres-xlクラスターを展開した経験をKhabrovskと共有したいと思います。 postgres-xlクラスターのデプロイに関するトピックに関する記事やマニュアルはそれほど多くありませんが、十分です。 そして、彼らは皆、私のような人の目にはいくつかの重大な欠陥を持っています。彼らは以前にクラスタリングに関与したことがなく、さらにLinuxのような軸で働いたことがありませんでした。 この種の記事はすべて、Linuxおよびそのような環境でのpostgresql / postgres-xlの展開に多少なりとも精通している人向けに書かれています。



そのため、他の業績と共有したいという要望がありました。 次に、postgres-xlソースのダウンロードとコンパイルからクラスターの構成まで、展開プロセス全体をステップごとに説明します。



「経験者向け」の多くの記事がすでに書かれているので、ハブでも、Postgres-xl自体、そのコンポーネント、およびそれらのタイプ(ロール)の説明は省略します。



パート1.環境の準備



テストクラスターでは、4つのノードの構成が選択されました:GTM、GTM-St​​andbyおよび2つのノード(GTM-プロキシ、コーディネーター、データノード):





すべてのノードは、1024 MBのRAMと2.1Ghzの周波数のプロセッサを備えた仮想マシンです。 OSのディストリビューションを選択する際に、CentOS 7.0の最新バージョンに決めましたが、そのインストールも省略します。 最小バージョンをインストールしました。



パート2.依存関係のインストール



したがって、CentOSがインストールされた4台のクリーンマシンがあります。 sourceforgeからソースのダウンロードを開始する前に、まずソース自体のコンパイルに必要なパッケージをインストールします。



# yum install -y wget vim gcc make kernel-devel perl-ExtUtils-MakeMaker perl-ExtUtils-Embed readline-devel zlib-devel openssl-devel pam-devel libxml2-devel openldap-devel tcl-devel python-devel flex bison docbook-style-dsssl libxslt
      
      





なぜなら CentOSのクリーンインストールが完了したので、このステップにwget(ダウンロードマネージャー)とvim(テキストエディター)のインストールを追加しました。 また、パッケージをインストールした後、次のコマンドで残りのパッケージを更新する必要はありません。



 # yum update -y
      
      





更新が完了するのを待ってから、プロセスの次の部分に進みます。



パート3.ソースコードのダウンロード、コンパイル、インストール



ソースをダウンロードするには、次のコマンドを実行します。



 # wget http://sourceforge.net/projects/postgres-xl/files/latest/download # mv download pgxl-9.2.src.tar.gz
      
      





または:



 # wget http://sourceforge.net/projects/postgres-xl/files/latest/download -O pgxl-9.2.src.tar.gz
      
      





ダウンロードしたアーカイブを目的のフォルダーにコピーして解凍します。



 # cp pgxl-9.2.src.tar.gz /usr/local/src/ # cd /usr/local/src/ # tar -xzvf pgxl-9.2.src.tar.gz
      
      





アーカイブはpostgres-xlフォルダーに展開され、次のコマンドで確認します。



 # ls
      
      





ソースをコンパイルし、その後のインストールと起動を行うには、次のような非ルートユーザーアカウントが必要です。



 # useradd postgres # passwd postgres
      
      





次に、パスワードを入力して繰り返し、ソースフォルダー全体にこのユーザー権限を付与します。



 # chown -R postgres.postgres postgres-xl # cd postgres-xl
      
      





コンパイルを開始する前に./configureを使用してソースを構成する必要があります。次のオプションを指定してこのコマンドを使用しました。



 # ./configure --with-tcl --with-perl --with-python --with-pam --with-ldap --with-openssl --with-libxml
      
      





これらのオプションの詳細については、公式ドキュメントページをご覧ください。



モジュールが必要ない場合は、依存関係をインストールする段階でモジュールをインストールすることも、標準構成を使用することもできません。



 # ./configure
      
      





コンパイルされたソースを移植可能にするため(各クラスターノードで前の手順をすべて実行しないように)、パラメーター--prefixおよび--disable-rpathをさらに追加する必要があります。 その結果、デフォルトパラメータを使用したインストールコマンドは次のようになります。



 # ./configure --prefix=/usr/local/pgsql --disable-rpath
      
      





--prefixパラメーターはインストールパスです。デフォルトでは '/ usr / local / pgsql'と同じです

--disable-rpathパラメーター-このパラメーターは、コンパイルされたソースを移植可能にします。



これで、コンパイル自体に直接進むことができます。以前に作成されたユーザーに代わって実行する必要があります。



 # su postgres $ gmake world
      
      





どちらか



 # su postgres -c 'gmake world'
      
      





コンパイルが成功した場合、ログの最後の行は次のようになります。



 Postgres-XL、contrib、およびHTMLドキュメントが正常に作成されました。 インストールする準備ができました。




それだけです! すべてがコンパイルされたら、/ usr / local / src / postgres-xlフォルダーをクラスターの他のノードにコピーしてインストールできます。



インストールは次のコマンドで実行されます。



 # gmake install-world
      
      





クラスターのすべてのノードでこのコマンドを繰り返し、構成に進みます。



パート4.構成



最初に、インストール後の設定を行う必要があります。 環境変数の宣言:



 # echo 'export PGUSER=postgres' >> /etc/profile # echo 'export PGHOME=/usr/local/pgsql' >> /etc/profile # echo 'export PATH=$PATH:$PGHOME/bin' >> /etc/profile # echo 'export LD_LIBRARY_PATH=$PGHOME/lib' >> /etc/profile
      
      





次に、ログインする必要があります。 ログアウトは次のコマンドで実行されます。



 # exit
      
      





次に、クラスターノードの構成を開始します。 まず、データフォルダーを作成し、サーバーの役割に従って初期化します。



GTM1 / GTM2



 # mkdir $PGHOME/gtm_data # chown -R postgres.postgres $PGHOME/gtm_data # su - postgres -c "initgtm -Z gtm -D $PGHOME/gtm_data"
      
      





NODE1



 # mkdir -p $PGHOME/data/data_gtm_proxy1 # mkdir -p $PGHOME/data/data_coord1 # mkdir -p $PGHOME/data/data_datanode1 # chown -R postgres.postgres $PGHOME/data/ # su - postgres -c "initdb -D $PGHOME/data/data_coord1/ --nodename coord1" # su - postgres -c "initdb -D $PGHOME/data/data_datanode1/ --nodename datanode1" # su - postgres -c "initgtm -D $PGHOME/data/data_gtm_proxy1/ -Z gtm_proxy"
      
      





NODE2



 # mkdir -p $PGHOME/data/data_gtm_proxy2 # mkdir -p $PGHOME/data/data_coord2 # mkdir -p $PGHOME/data/data_datanode2 # chown -R postgres.postgres $PGHOME/data/ # su - postgres -c "initdb -D $PGHOME/data/data_coord2/ --nodename coord2" # su - postgres -c "initdb -D $PGHOME/data/data_datanode2/ --nodename datanode2" # su - postgres -c "initgtm -D $PGHOME/data/data_gtm_proxy2/ -Z gtm_proxy"
      
      





次に、クラスターノードで構成ファイルを編集します。



GTM1



gtm.conf
 # vi $PGHOME/gtm_data/gtm.conf nodename = 'gtm_master' listen_addresses = '*' port = 6666 startup = ACT log_file = 'gtm.log' log_min_messages = WARNING
      
      





GTM2



gtm.conf
 # vi $PGHOME/gtm_data/gtm.conf nodename = 'gtm_slave' listen_addresses = '*' port = 6666 startup = STANDBY active_host = 'GTM1' #   IP  GTM ,    '192.168.1.100' active_port = 6666 log_file = 'gtm.log' log_min_messages = WARNING
      
      





NODE1



GTM_PROXY:

gtm_proxy.conf
 # vi $PGHOME/data/data_gtm_proxy1/gtm_proxy.conf nodename = 'gtm_proxy1' listen_addresses = '*' port = 6666 gtm_host = 'GTM1' gtm_port = 6666 log_file = 'gtm_proxy1.log' log_min_messages = WARNING
      
      









コーディネーター1

postgresql.conf
 # vi $PGHOME/data/data_coord1/postgresql.conf listen_addresses = '*' port = 5432 pooler_port = 6667 gtm_host = 'localhost' #    /  gtm_proxy,    -  localhost gtm_port = 6666 pgxc_node_name = 'coord1'
      
      







pg_hba.conf
 # vi $PGHOME/data/data_coord1/pg_hba.conf host all all 192.168.1.0/24 trust
      
      







Datanode1

postgresql.conf
 # vi $PGHOME/data/data_datanode1/postgresql.conf listen_addresses = '*' port = 15432 pooler_port = 6668 gtm_host = 'localhost' gtm_port = 6666 pgxc_node_name = 'datanode1'
      
      









pg_hba.conf
 # vi $PGHOME/data/data_datanode1/pg_hba.conf host all all 192.168.1.0/24 trust
      
      





NODE2



GTM_PROXY:

gtm_proxy.conf
 # vi $PGHOME/data/data_gtm_proxy2/gtm_proxy.conf nodename = 'gtm_proxy2' listen_addresses = '*' port = 6666 gtm_host = 'GTM1' gtm_port = 6666 log_file = 'gtm_proxy2.log' log_min_messages = WARNING
      
      





コーディネーター2

postgresql.conf
 # vi $PGHOME/data/data_coord2/postgresql.conf listen_addresses = '*' port = 5432 pooler_port = 6667 gtm_host = 'localhost' gtm_port = 6666 pgxc_node_name = 'coord2'
      
      





pg_hba.conf
 # vi $PGHOME/data/data_coord2/pg_hba.conf host all all 192.168.1.0/24 trust
      
      







Datanode2

postgresql.conf
 # vi $PGHOME/data/data_datanode2/postgresql.conf listen_addresses = '*' port = 15432 pooler_port = 6668 gtm_host = 'localhost' gtm_port = 6666 pgxc_node_name = 'datanode2'
      
      









pg_hba.conf
 # vi $PGHOME/data/data_datanode2/pg_hba.conf host all all 192.168.1.0/24 trust
      
      









これで設定の作業が完了しました。 次のステップでは、すべてのホストのCentOSファイアウォールに例外を追加します。



 # firewall-cmd --zone=public --add-port=5432/tcp --permanent # firewall-cmd --zone=public --add-port=15432/tcp --permanent # firewall-cmd --zone=public --add-port=6666/tcp --permanent # firewall-cmd --zone=public --add-port=6667/tcp --permanent # firewall-cmd --zone=public --add-port=6668/tcp --permanent # firewall-cmd --reload
      
      





ただし、GTM1 / GTM2マシンの場合、6666ポートのみを開くだけで十分です。



パート5.クラスターノードの起動



これで、クラスターノードの開始点に到達しました。 クラスターノードを起動するには、postgresユーザーに代わって、対応するノードで次のコマンドを実行する必要があります。



 # su - postgres $ gtm_ctl start -Z gtm -D $PGHOME/{data_dir} $ gtm_ctl start -Z gtm_proxy -D $PGHOME/{data_dir} $ pg_ctl start -Z datanode -D $PGHOME/{data_dir} $ pg_ctl start -Z coordinator -D $PGHOME/{data_dir}
      
      





ここで、「 {data_dir} 」はGTMの対応するフォルダーの名前は「 data / gtm_data 」、datanode1の場合は「 data / data_datanode1 / 」などです。



しかし、開始/停止/自動開始を制御する別のより便利な方法を紹介したいと思います。

ソースフォルダーには、PostgreSQLの「正常な制御」用のSysVスクリプトがあります。 私たちのタスクは、クラスター内のノードの各ロールにそれを適応させることです。 スクリプト自体が何であるかを見てみましょう。



src / postgres-xl / contrib / start-scripts / linux
 # cat /usr/local/src/postgres-xl/contrib/start-scripts/linux #! /bin/sh # chkconfig: 2345 98 02 # description: PostgreSQL RDBMS # This is an example of a start/stop script for SysV-style init, such # as is used on Linux systems. You should edit some of the variables # and maybe the 'echo' commands. # # Place this file at /etc/init.d/postgresql (or # /etc/rc.d/init.d/postgresql) and make symlinks to # /etc/rc.d/rc0.d/K02postgresql # /etc/rc.d/rc1.d/K02postgresql # /etc/rc.d/rc2.d/K02postgresql # /etc/rc.d/rc3.d/S98postgresql # /etc/rc.d/rc4.d/S98postgresql # /etc/rc.d/rc5.d/S98postgresql # Or, if you have chkconfig, simply: # chkconfig --add postgresql # # Proper init scripts on Linux systems normally require setting lock # and pid files under /var/run as well as reacting to network # settings, so you should treat this with care. # Original author: Ryan Kirkpatrick <pgsql@rkirkpat.net> # contrib/start-scripts/linux ## EDIT FROM HERE # Installation prefix prefix=/usr/local/pgsql # Data directory PGDATA="/usr/local/pgsql/data" # Who to run the postmaster as, usually "postgres". (NOT "root") PGUSER=postgres # Where to keep a log file PGLOG="$PGDATA/serverlog" # It's often a good idea to protect the postmaster from being killed by the # OOM killer (which will tend to preferentially kill the postmaster because # of the way it accounts for shared memory). Setting the OOM_SCORE_ADJ value # to -1000 will disable OOM kill altogether. If you enable this, you probably # want to compile PostgreSQL with "-DLINUX_OOM_SCORE_ADJ=0", so that # individual backends can still be killed by the OOM killer. #OOM_SCORE_ADJ=-1000 # Older Linux kernels may not have /proc/self/oom_score_adj, but instead # /proc/self/oom_adj, which works similarly except the disable value is -17. # For such a system, enable this and compile with "-DLINUX_OOM_ADJ=0". #OOM_ADJ=-17 ## STOP EDITING HERE # The path that is to be used for the script PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # What to use to start up the postmaster. (If you want the script to wait # until the server has started, you could use "pg_ctl start -w" here. # But without -w, pg_ctl adds no value.) DAEMON="$prefix/bin/postmaster" # What to use to shut down the postmaster PGCTL="$prefix/bin/pg_ctl" set -e # Only start if we can find the postmaster. test -x $DAEMON || { echo "$DAEMON not found" if [ "$1" = "stop" ] then exit 0 else exit 5 fi } # Parse command line parameters. case $1 in start) echo -n "Starting PostgreSQL: " test x"$OOM_SCORE_ADJ" != x && echo "$OOM_SCORE_ADJ" > /proc/self/oom_score_adj test x"$OOM_ADJ" != x && echo "$OOM_ADJ" > /proc/self/oom_adj su - $PGUSER -c "$DAEMON -D '$PGDATA' &" >>$PGLOG 2>&1 echo "ok" ;; stop) echo -n "Stopping PostgreSQL: " su - $PGUSER -c "$PGCTL stop -D '$PGDATA' -s -m fast" echo "ok" ;; restart) echo -n "Restarting PostgreSQL: " su - $PGUSER -c "$PGCTL stop -D '$PGDATA' -s -m fast -w" test x"$OOM_SCORE_ADJ" != x && echo "$OOM_SCORE_ADJ" > /proc/self/oom_score_adj test x"$OOM_ADJ" != x && echo "$OOM_ADJ" > /proc/self/oom_adj su - $PGUSER -c "$DAEMON -D '$PGDATA' &" >>$PGLOG 2>&1 echo "ok" ;; reload) echo -n "Reload PostgreSQL: " su - $PGUSER -c "$PGCTL reload -D '$PGDATA' -s" echo "ok" ;; status) su - $PGUSER -c "$PGCTL status -D '$PGDATA'" ;; *) # Print help echo "Usage: $0 {start|stop|restart|reload|status}" 1>&2 exit 1 ;; esac exit 0
      
      





すべての役割について、このスクリプトを異なる名前でディレクトリ「 /etc/rc.d/init.d/ 」にコピーします。

次のような結果になりました。



 # cp /usr/local/src/postgres-xl/contrib/start-scripts/linux /etc/rc.d/init.d/pgxl_gtm # cp /usr/local/src/postgres-xl/contrib/start-scripts/linux /etc/rc.d/init.d/pgxl_gtm_prx # cp /usr/local/src/postgres-xl/contrib/start-scripts/linux /etc/rc.d/init.d/pgxl_dn # cp /usr/local/src/postgres-xl/contrib/start-scripts/linux /etc/rc.d/init.d/pgxl_crd
      
      





次に、各ノードの特定のインスタンスごとにスクリプトを調整し始めます。 いくつかの小さな変更の後、GTMのスクリプトは次のようになり始めました(便宜上、コメントと重要でない領域を削除しました)。



pgxl_gtm
 # vi /etc/rc.d/init.d/pgxl_gtm #! /bin/sh # chkconfig: 2345 98 02 # description: PostgreSQL RDBMS # Installation prefix prefix=/usr/local/pgsql # Data directory PGDATA="$prefix/gtm_data" # Who to run the postmaster as, usually "postgres". (NOT "root") PGUSER=postgres # Where to keep a log file PGLOG="$PGDATA/serverlog" # The path that is to be used for the script PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:$prefix/bin # What to use to shut down the postmaster PGCTL="$prefix/bin/gtm_ctl" # Which cluster role PGROLE="gtm" set -e # Only start if we can find the postmaster. test -x $PGCTL || { echo "$PGCTL not found" if [ "$1" = "stop" ] then exit 0 else exit 5 fi } # Parse command line parameters. case $1 in start) echo -n "Starting PostgreSQL: " test x"$OOM_SCORE_ADJ" != x && echo "$OOM_SCORE_ADJ" > /proc/self/oom_score_adj test x"$OOM_ADJ" != x && echo "$OOM_ADJ" > /proc/self/oom_adj su - $PGUSER -c "$PGCTL start -Z $PGROLE -D '$PGDATA' &" >>$PGLOG 2>&1 echo "ok" ;; stop) echo -n "Stopping PostgreSQL: " su - $PGUSER -c "$PGCTL stop -Z $PGROLE -D '$PGDATA' -m fast" echo "ok" ;; restart) echo -n "Restarting PostgreSQL: " su - $PGUSER -c "$PGCTL stop -Z $PGROLE -D '$PGDATA' -m fast -w" test x"$OOM_SCORE_ADJ" != x && echo "$OOM_SCORE_ADJ" > /proc/self/oom_score_adj test x"$OOM_ADJ" != x && echo "$OOM_ADJ" > /proc/self/oom_adj su - $PGUSER -c "$PGCTL start -Z $PGROLE -D '$PGDATA' &" >>$PGLOG 2>&1 echo "ok" ;; reload) echo -n "Reload PostgreSQL: " su - $PGUSER -c "$PGCTL restart -Z $PGROLE -D '$PGDATA'" echo "ok" ;; status) su - $PGUSER -c "$PGCTL status -Z $PGROLE -D '$PGDATA'" ;; *) # Print help echo "Usage: $0 {start|stop|restart|reload|status}" 1>&2 exit 1 ;; esac exit 0
      
      





ご覧のとおり、「 $ PGHOME / bin 」をPATH変数に追加し、DAEMONを削除し、PGCTLでGTMおよびGTM_PROXYロールを管理するための「 $ PGHOME / binディレクトリのgtm_ctlユーティリティへのパスを設定し、ノードを起動するために必要なPGROLE変数も追加しましたクラスター。



クラスタ内の残りのロールにこのようなスクリプトを使用するには、PGDATA、PGROLE、PGCTLの3つの変数のみを編集する必要があります。



PGD​​ATAは、このノードロールのデータディレクトリへのパスです。

PGROLE-クラスター内のこのインスタンスの役割。 gtm、gtm_proxy、coordinator、datanodeが発生します。

PGCTLはサーバースタートアップユーティリティです。gtmおよびgtm_proxyの場合は ' gtm_ctl '、コーディネーターおよびデータノードの場合は ' pg_ctl 'です。



テストクラスターの残りのノードに完全な変更を加えます。



GTM_PROXY1

pgxl_gtm_prx
 # vi /etc/rc.d/init.d/pgxl_gtm_prx PGDATA="$prefix/data/data_gtm_proxy1" PGCTL="$prefix/bin/gtm_ctl" PGROLE="gtm_proxy"
      
      







GTM_PROXY2

pgxl_gtm_prx
 # vi /etc/rc.d/init.d/pgxl_gtm_prx PGDATA="$prefix/data/data_gtm_proxy2" PGCTL="$prefix/bin/gtm_ctl" PGROLE="gtm_proxy"
      
      







COORDINATOR1

pgxl_crd
 # vi /etc/rc.d/init.d/pgxl_crd PGDATA="$prefix/data/data_coord1" PGCTL="$prefix/bin/pg_ctl" PGROLE="coordinator"
      
      







COORDINATOR2

pgxl_crd
 # vi /etc/rc.d/init.d/pgxl_crd PGDATA="$prefix/data/data_coord2" PGCTL="$prefix/bin/pg_ctl" PGROLE="coordinator"
      
      







DATANODE1

pgxl_dn
 # vi /etc/rc.d/init.d/pgxl_dn PGDATA="$prefix/data/data_datanode1" PGCTL="$prefix/bin/pg_ctl" PGROLE="datanode"
      
      







DATANODE2

pgxl_dn
 # vi /etc/rc.d/init.d/pgxl_dn PGDATA="$prefix/data/data_datanode2" PGCTL="$prefix/bin/pg_ctl" PGROLE="datanode"
      
      







ほぼ完了! 次に、各ノードで適切なコマンドを実行して、これらのスクリプトを実行可能にする必要があります。



 # chmod a+x /etc/rc.d/init.d/pgxl_gtm # chmod a+x /etc/rc.d/init.d/pgxl_gtm_prx # chmod a+x /etc/rc.d/init.d/pgxl_crd # chmod a+x /etc/rc.d/init.d/pgxl_dn
      
      





次に、ブートストラップにスクリプトを追加します。



 # chkconfig --add pgxl_gtm # chkconfig --add pgxl_gtm_prx # chkconfig --add pgxl_crd # chkconfig --add pgxl_dn
      
      





そして実行:



 # service pgxl_gtm start # service pgxl_gtm_prx start # service pgxl_crd start # service pgxl_dn start
      
      





データディレクトリのログファイルで起動がどのように行われたかを確認するか、コマンドを実行できます。



 # service pgxl_gtm status # service pgxl_gtm_prx status # service pgxl_crd status # service pgxl_dn status
      
      





すべてがうまくいった場合、ノードの構成に進みます。



パート6.クラスターノードの構成



マニュアルに従ってクラスターノードを構成しましょう。



NODE1
 # su - postgres $ psql -p 5432 -c "DELETE FROM pgxc_node" $ psql -p 5432 -c "CREATE NODE coord1 WITH (TYPE='coordinator',HOST='192.168.1.102',PORT=5432)" $ psql -p 5432 -c "CREATE NODE coord2 WITH (TYPE='coordinator',HOST='192.168.1.103',PORT=5432)" $ psql -p 5432 -c "CREATE NODE datanode1 WITH (TYPE='datanode',HOST='192.168.1.102',PORT=15432)" $ psql -p 5432 -c "CREATE NODE datanode2 WITH (TYPE='datanode',HOST='192.168.1.103',PORT=15432)"
      
      





コマンドで何が起こったかを確認できます:



 $ psql -p 5432 -c "select * from pgxc_node"
      
      





すべてが正常な場合、プールを再起動します。



 $ psql -p 5432 -c "select pgxc_pool_reload()"
      
      





設定が成功すると、コマンドは「 t 」、つまりtrueを返します



ほとんどのマニュアルでは、この手順の後、テストテーブルの作成とテストクエリの実行を開始しますが、99.9%の保証で、INSERTを実行しようとすると、これらのログがログに記録されます。

ステートメント:テスト選択112233445566、0123456789に挿入します。
エラー:データノード番号が無効です


またはここ

ステートメント:SET global_session TO coord2_21495; SET datestyle TO iso; SET client_min_messages TO notice; SET client_encoding TO UNICODE; SET bytea_output TO escape;
エラー:データノード番号が無効です
 STATEMENT:リモートサブプラン
エラー:ノード "coord2_21580"は存在しません
ステートメント:set global_session TO coord2_21580; SET datestyle TO iso; SET client_min_messages TO notice; SET client_encoding TO UNICODE; SET bytea_output TO escape;
エラー:データノード番号が無効です
 STATEMENT:リモートサブプラン
エラー:データノード番号が無効です
 STATEMENT:リモートサブプラン
エラー:データノード番号が無効です
 STATEMENT:リモートサブプラン
ログ:XID = 96184、ソース= 0、gxmin = 0、autovac launch = 0、autovac = 0、normProcMode = 0、postEnv = 1のローカルスナップショットにフォールバックします
エラー:ノード "coord2_22428"は存在しません
 STATEMENT:SET global_session TO coord2_22428;
エラー:データノード番号が無効です


すべてがアスファルトの2本の指と同じくらい単純な「経験者向け」の抽象化されたマニュアルでは、重要なステップを見逃しました-DATANODE自体の他のノードを埋めるからです。 そして、これは非常に簡単に行われ、構成の両方のデータノードで次のことを行います。



 $ psql -p 5432 -c "EXECUTE DIRECT ON (datanode1) 'DELETE FROM pgxc_node'" $ psql -p 5432 -c "EXECUTE DIRECT ON (datanode1) 'create NODE coord1 WITH (TYPE=''coordinator'',HOST=''192.168.1.102'',PORT=5432)'" $ psql -p 5432 -c "EXECUTE DIRECT ON (datanode1) 'create NODE coord2 WITH (TYPE=''coordinator'',HOST=''192.168.1.103'',PORT=5432)'" $ psql -p 5432 -c "EXECUTE DIRECT ON (datanode1) 'create NODE datanode1 WITH (TYPE=''datanode'',HOST=''192.168.1.102'',PORT=15432)'" $ psql -p 5432 -c "EXECUTE DIRECT ON (datanode1) 'create NODE datanode2 WITH (TYPE=''datanode'',HOST=''192.168.1.103'',PORT=15432)'" $ psql -p 5432 -c "EXECUTE DIRECT ON (datanode1) 'SELECT pgxc_pool_reload()'"
      
      





したがって、行

 EXECUTE DIRECT ON(datanode1)


に変更

 EXECUTE DIRECT ON(データノード2)


ノード番号2の場合。



そして出来上がり! これで、テーブルを安全に作成し、クラスターをテストできます。 しかし、これは全く異なる話です...



おわりに



それだけです。すべてがセットアップされ、すべてが機能します。複雑なことは何もないように思われます。この記事では、1週間の検索と喫煙のマニュアルを隠しています。 ソースコードのダウンロード/コンパイルおよびインストールの段階は現在、最も無害であるように見えますが、実際には多くの問題がありました(もちろん、私の経験はそのような環境で働いていることです)、例えばコードは頑固にコンパイルしてそのようなエラーを投げたくありませんでした:



 '/ usr / bin / perl' /bin/collat​​eindex.pl -f -g -i 'bookindex' -o bookindex.sgml HTML.index
 perlスクリプト "/bin/collat​​eindex.pl"を開けません:そのようなファイルまたはディレクトリはありません
 make [4]:*** [bookindex.sgml]エラー2
 make [4]:ディレクトリ `/ usr / local / src / postgres-xl / doc-xc / src / sgmlを離れる '
 make [3]:*** [sql_help.h]エラー2
 make [3]:ディレクトリ `/ usr / local / src / postgres-xl / src / bin / psqlを残す
 make [2]:*** [all-psql-recurse]エラー2
 make [2]:ディレクトリ `/ usr / local / src / postgres-xl / src / binを離れる
 make [1]:*** [all-bin-recurse]エラー2
 make [1]:ディレクトリ `/ usr / local / src / postgres-xl / src 'を離れる
 make:*** [all-src-recurse]エラー2


後に、ある中国のフォーラムで、 docbook-style-dssslライブラリなどをインストールする必要があるという答えを見つけました。経験が足りず、完全なマニュアル(自分などのダミー)が不足しているため、新たな驚きがありました。



それでも、情報の検索、数百回の試行錯誤の後、すべてがうまくいき、クラスターが起動しました。

この出版物が少なくとも少し楽になるか、役に立つことを願っています。



さらに、ロードバランスのセットアップに取り組み、Windowsを実行している通常のPostgreSQL 9.4からCentOS 7.0上のアセンブルされたpostgres-xl 9.2クラスターにデータベースを移行し、クラスター内のプロジェクトで最も重いクエリをテストし、スタンドアロンPostgreSQLの結果と比較し、チューニングを行う予定ですクラスタ設定、クラスタ内のPostGISでのプレイなど。 それで、この記事または私がリストしたものがハブロフスク市民に役立つなら、私は喜んであなたとこれを共有します。



ご清聴ありがとうございました。



All Articles