数据库版本:postgresxc 1.1(postgresql 9.2.4)
作者:高铭杰
邮箱:jackgo73@outlook.com
日期:2017年4月8日
Postgres-XC集群部署实例(单机调试)
开始接触神奇的xc :),边学变记录单机部署pgxc集群的方法,仅供娱乐与调试。后面的实例会继续补充。(使用单用户+切换pg环境变量的脚本在调试代码的时候很方便)
版本 | 链接 |
---|---|
Postgres-XC1.0 1.1 1.2 | https://sourceforge.net/projects/postgres-xc/files/?source=navbar |
postgres-x2 | https://github.com/postgres-x2/postgres-x2 |
1 部署规划
gtm <----- gtm_standby
/ \
gtm_proxy00 gtm_proxy01
/ \ / \
cn00 dn00 cn01 dn01
node name | port | data dir |
---|---|---|
gtm | 9400 | $HOME/app/pgsql00 |
gtm_standby | 9401 | $HOME/app/pgsql01 |
gtm_proxy00 | 9402 | $HOME/app/pgsql02 |
cn00 | 9403 (pool 10403) | $HOME/app/pgsql03 |
dn00 | 9404 | $HOME/app/pgsql04 |
gtm_proxy01 | 9405 | $HOME/app/pgsql05 |
cn01 | 9406 (pool 10406) | $HOME/app/pgsql06 |
dn01 | 9407 | $HOME/app/pgsql07 |
2 编译安装
./configure --prefix=$HOME/app/pgsql00 --with-openssl --enable-debug --enable-cassert --enable-thread-safety CFLAGS='-O0' --with-pgport=9400 --enable-depend;make -sj12;make install;
3 初始化
命令执行前请根据上表切换相应的$PGDATA环境变量,可以编写脚本配合alias直接进行切换。
例如在.basesh中加入alias pp='source $HOME/bin/pgenv.sh'
这样的脚本简单方便,在德哥的很多博客(https://github.com/digoal/blog)中有提到,或者email我索取。
3.1 初始化gtm节点
($PGDATA=$HOME/app/pgsql00)
initgtm -Z gtm -D $PGDATA
sed -ir "s/#*nodename.*/nodename = 'gtm'/" $PGDATA/gtm.conf
sed -ir "s/#*listen_addresses.*/listen_addresses= '*'/" $PGDATA/gtm.conf
sed -ir "s/#*port.*/port = 9400/" $PGDATA/gtm.conf
sed -ir "s/#*startup.*/startup = ACT/" $PGDATA/gtm.conf
3.2 初始化gtm_standby节点
($PGDATA=$HOME/app/pgsql01)
initgtm -Z gtm -D $PGDATA
sed -ir "s/#*nodename.*/nodename = 'gtm_standby'/" $PGDATA/gtm.conf
sed -ir "s/#*listen_addresses.*/listen_addresses= '*'/" $PGDATA/gtm.conf
sed -ir "s/#*port.*/port = 9401/" $PGDATA/gtm.conf
sed -ir "s/#*startup.*/startup = STANDBY/" $PGDATA/gtm.conf
sed -ir "s/#*active_host.*/active_host = 'localhost'/" $PGDATA/gtm.conf
sed -ir "s/#*active_port.*/active_port = 9400/" $PGDATA/gtm.conf
3.3 初始化gtm_proxy00, gtm_proxy01节点
gtm_proxy00
($PGDATA=$HOME/app/pgsql02)
initgtm -Z gtm_proxy -D $PGDATA
sed -ir "s/#*nodename.*/nodename = 'gtm_proxy00'/" $PGDATA/gtm_proxy.conf
sed -ir "s/#*port.*/port = 9402/" $PGDATA/gtm_proxy.conf
sed -ir "s/#*gtm_host.*/gtm_host= 'localhost'/" $PGDATA/gtm_proxy.conf
sed -ir "s/#*gtm_port.*/gtm_port = 9400/" $PGDATA/gtm_proxy.conf
gtm_proxy01
($PGDATA=$HOME/app/pgsql05)
initgtm -Z gtm_proxy -D $PGDATA
sed -ir "s/#*nodename.*/nodename = 'gtm_proxy01'/" $PGDATA/gtm_proxy.conf
sed -ir "s/#*port.*/port = 9405/" $PGDATA/gtm_proxy.conf
sed -ir "s/#*gtm_host.*/gtm_host = 'localhost'/" $PGDATA/gtm_proxy.conf
sed -ir "s/#*gtm_port.*/gtm_port = 9400/" $PGDATA/gtm_proxy.conf
3.4 初始化cn节点
cn00
($PGDATA=$HOME/app/pgsql03)
initdb --nodename cn00 -D $PGDATA
sed -ir "s/#*listen_addresses.*/listen_addresses = '*'/" $PGDATA/postgresql.conf
sed -ir "s/#*port.*/port = 9403/" $PGDATA/postgresql.conf
sed -ir "s/#*logging_collector.*/logging_collector= on/" $PGDATA/postgresql.conf
sed -ir "s/#*log_directory.*/log_directory = 'pg_log'/" $PGDATA/postgresql.conf
sed -ir "s/#*log_filename.*/log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'/" $PGDATA/postgresql.conf
sed -ir "s/#*log_rotation_size.*/log_rotation_size = 10MB/" $PGDATA/postgresql.conf
sed -ir "s/#*log_line_prefix.*/log_line_prefix='%p %r %u %d %t %e'/" $PGDATA/postgresql.conf
sed -ir "s/#*log_min_duration_statement.*/log_min_duration_statement= 1000/" $PGDATA/postgresql.conf
sed -ir "s/#*log_timezone.*/log_timezone = 'UTC'/&