co-machi's diary

コワーキングスペース町田(Co-町)の住人2人が、プログラミング周辺に関するブログします(時には脱線も・・・)

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の画面が!

psqlを立ち上げた画面

さて、これをなんとかコンピューターを4台ぐらいで実験できると良いんだが・・・。次は挑戦!今日は終了w