Postgre-XC Part1
とりあえず、今回は1つのMacbook Airで動かしてみます。
そして、次のPart2では4台ぐらいのコンピュータでも動作させ、パフォーマンスを1台の場合と比べてみようかと考えています。
まずはダウンロード
Downloading Postgres-XCに行って、最新版をダウンロード。2013年4月14日現在、最新バージョンは1.02でした。
解凍
ダウンロードしたファイルを適当なところにコピーして(私は~/src)解凍します。
cd ~/src cp ~/Download/pgxc-v1.0.2.tar.gz ./ tar xvzf pgxc-v1.0.2.tar.gz cd pgxc-v1.0.2
configure, make , make install
./configure make sudo make install sudo make install-docs
環境変数等の設定
export PATH="PATH=/usr/local/pgsql/bin:$PATH" LD_LIBRARY_PATH=/usr/local/pgsql/lib export LD_LIBRARY_PATH MANPATH=/usr/local/pgsql/man:$MANPATH export MANPATH
を.bashrcに書き込む(Macって.bash_profileで明示的に指示しないと.bashrcは読み込まないのをつい最近知った)。
すると
executable (/usr/bin/sudo) is setuid or setgid
がsudoするたびに出力されるけれど、これはどうやらOSXのバグらしい。unsetすれば良いとかという情報もあるけれど、いまひとつわからないので、とりあえず、実験したらこの環境変数を削除するので、スルーします。参考URL
これからが本番
Installation from Source Code, Short Versionに書いていることを、Macでただ行っているだけです、基本的には。
source ~/.bashrc sudo mkdir /usr/local/pgsql/data_coord1 sudo mkdir /usr/local/pgsql/data_datanode1 sudo mkdir /usr/local/pgsql/data_datanode2 sudo mkdir /usr/local/pgsql/data_gtm sudo chown postgres /usr/local/pgsql/data_coord1 sudo chown postgres /usr/local/pgsql/data_datanode1 sudo chown postgres /usr/local/pgsql/data_datanode2 sudo chown postgres /usr/local/pgsql/data_gtm sudo su postgres -c '/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data_coord1 --nodename coord1'
とここで、以下のようなエラー。
The files belonging to this database system will be owned by user "postgres". This user must also own the server process. The database cluster will be initialized with locale ja_JP.UTF-8. The default database encoding has accordingly been set to UTF8. initdb: could not find suitable text search configuration for locale ja_JP.UTF-8 The default text search configuration will be set to "simple". fixing permissions on existing directory /usr/local/pgsql/data_coord1 ... ok creating subdirectories ... ok selecting default max_connections ... 10 selecting default shared_buffers ... 400kB creating configuration files ... ok creating template1 database in /usr/local/pgsql/data_coord1/base/1 ... FATAL: could not create shared memory segment: Cannot allocate memory DETAIL: Failed system call was shmget(key=1, size=2605056, 03600). HINT: This error usually means that PostgreSQL's request for a shared memory segment exceeded available memory or swap space, or exceeded your kernel's SHMALL parameter. You can either reduce the request size or reconfigure the kernel with larger SHMALL. To reduce the request size (currently 2605056 bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections. The PostgreSQL documentation contains more information about shared memory configuration. child process exited with exit code 1 initdb: removing contents of data directory "/usr/local/pgsql/data_coord1"
どうやら「shared memory」が足らないらしい。
sudo emacs /etc/sysctl.conf
して中身を見てみると
kern.sysv.shmmax=33554432 kern.sysv.shmmin=1 kern.sysv.shmmni=256 kern.sysv.shmseg=64 kern.sysv.shmall=8192
で、これが足らないようです。そこで
http://benscheirman.com/2011/04/increasing-shared-memory-for-postgres-on-os-x/等を参考に、修正してみる。
kern.sysv.shmmax=1610612736 kern.sysv.shmmin=1 kern.sysv.shmmni=32 kern.sysv.shmseg=8 kern.sysv.shmall=393216 kern.maxprocperuid=512 kern.maxproc=2048
ここでMacをリブート。
さて、再開。
#initialize Database sudo su postgres -c '/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data_coord1 --nodename coord1' sudo su postgres -c '/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data_datanode1 --nodename datanode1' sudo su postgres -c '/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data_datanode2 --nodename datanode2' #initialize GTM sudo su postgres -c '/usr/local/pgsql/bin/initgtm -D /usr/local/pgsql/data_gtm -Z gtm' #$Starting GTM sudo su postgres -c '/usr/local/pgsql/bin/gtm -D /usr/local/pgsql/data_gtm >log_dir/logfile 2>&1 &' #starting Datanode #-X specifies postgres should run as a Datanode sudo su postgres -c '/usr/local/pgsql/bin/postgres -X -p 15432 -D /usr/local/pgsql/data_datanode1 >log_dir/logfile 2>&1 &' sudo su postgres -c '/usr/local/pgsql/bin/postgres -X -p 15433 -D /usr/local/pgsql/data_datanode2 >log_dir/logfile 2>&1 &' #sudo kill -INT `head -1 /usr/local/pgsql/data/postmaster.pid` #-C specifies postgres should run as a Coordinator sudo su postgres -c '/usr/local/pgsql/bin/postgres -C -D /usr/local/pgsql/data_coord1 >log_dir/logfile 2>&1 &' #sudo kill -INT `head -1 /usr/local/pgsql/data_gtm/gtm.pid` sudo su postgres -c '/usr/local/pgsql/bin/psql -c "CREATE NODE datanode1 WITH (TYPE = 'datanode', PORT = 15432)" postgres' sudo su postgres -c '/usr/local/pgsql/bin/psql -c "CREATE NODE datanode2 WITH (TYPE = 'datanode', PORT = 15433)" postgres' sudo su postgres -c '/usr/local/pgsql/bin/psql -c "SELECT pgxc_pool_reload()" postgres' sudo su postgres -c '/usr/local/pgsql/bin/createdb test' sudo su postgres -c '/usr/local/pgsql/bin/psql test'
出たあ、psqlの画面が!
さて、これをなんとかコンピューターを4台ぐらいで実験できると良いんだが・・・。次は挑戦!今日は終了w