681 lines
29 KiB
C++
681 lines
29 KiB
C++
/*
|
|
*-----------------------------------------------------------------------
|
|
*
|
|
* pgxc_ctl_bash.c
|
|
*
|
|
* Bash script body for Postrgres-XC configuration and operation tool.
|
|
*
|
|
* Copyright (c) 2013 Postgres-XC Development Group
|
|
*
|
|
*------------------------------------------------------------------------
|
|
*
|
|
* This file was created by make_signature utility when pgxc_ctl was built.
|
|
*
|
|
* pgxc_ctl uses this bash script to configure postgres-xc and read
|
|
* configuration.
|
|
*
|
|
* This provides users very flexible way to configure their own
|
|
* postgres-xc cluster. For example, by using extra variables and script,
|
|
* you can save most of your specific hours typing same (or similar)
|
|
* variable values again and again.
|
|
*/
|
|
|
|
#include <stddef.h>
|
|
|
|
/*
|
|
* Bash script to read pgxc_ctl configuration parameters and write
|
|
* back to itself.
|
|
*
|
|
* This part is written to pgxc_ctl work directory and reads
|
|
* configuration file, which is also written in bash script.
|
|
*/
|
|
|
|
char* pgxc_ctl_bash_script[] = {"#!/bin/bash",
|
|
"# Common variables ######################################################################",
|
|
"xc_prompt='PGXC$ '",
|
|
"interactive=n",
|
|
"verbose=n",
|
|
"progname=$0",
|
|
"",
|
|
"bin=pgxc_ctl # Just in case. Never touch this",
|
|
"logfile=none",
|
|
"",
|
|
"#===========================================================",
|
|
"#",
|
|
"# Extract parsed configuration values",
|
|
"#",
|
|
"#===========================================================",
|
|
"",
|
|
"# $1 is variable name of the array to print",
|
|
"function print_array",
|
|
"{",
|
|
" echo -n $1 \" \"",
|
|
" eval echo '$'{$1[@]}",
|
|
"}",
|
|
"",
|
|
"",
|
|
"function print_values",
|
|
"{",
|
|
" local i",
|
|
" declare -i i",
|
|
" local el",
|
|
"",
|
|
" # Install Directory",
|
|
" echo pgxcInstallDir $pgxcInstallDir",
|
|
"",
|
|
" # Overall",
|
|
" echo pgxcOwner $pgxcOwner",
|
|
" echo pgxcUser $pgxcUser",
|
|
" echo tmpDir $tmpDir",
|
|
" echo localTmpDir $localTmpDir",
|
|
" echo configBackup $configBackup",
|
|
" echo configBackupHost $configBackupHost",
|
|
" echo configBackupDir $configBackupDir",
|
|
" echo configBackupFile $configBackupFile",
|
|
"",
|
|
" # GTM overall",
|
|
" echo gtmName $gtmName",
|
|
"",
|
|
" # GTM master",
|
|
" echo gtmMasterServer $gtmMasterServer",
|
|
" echo gtmMasterPort $gtmMasterPort",
|
|
" echo gtmMasterDir $gtmMasterDir",
|
|
" echo gtmExtraConfig $gtmExtraConfig",
|
|
" echo gtmMasterSpecificExtraConfig $gtmMasterSpecificExtraConfig",
|
|
"",
|
|
" # GTM slave",
|
|
" echo gtmSlave $gtmSlave",
|
|
" echo gtmSlaveServer $gtmSlaveServer",
|
|
" echo gtmSlavePort $gtmSlavePort",
|
|
" echo gtmSlaveDir $gtmSlaveDir",
|
|
" echo gtmSlaveSpecificExtraConfig $gtmSlaveSpecificExtraConfig",
|
|
"",
|
|
" # GTM Proxy",
|
|
" echo gtmProxy $gtmProxy",
|
|
" print_array gtmProxyNames",
|
|
" print_array gtmProxyServers",
|
|
" print_array gtmProxyPorts",
|
|
" print_array gtmProxyDirs",
|
|
" echo gtmPxyExtraConfig $gtmPxyExtraConfig",
|
|
" print_array gtmPxySpecificExtraConfig",
|
|
"",
|
|
" # Coordinators overall",
|
|
" print_array coordNames",
|
|
" print_array coordPorts",
|
|
" print_array poolerPorts",
|
|
" print_array coordPgHbaEntries",
|
|
"",
|
|
" # Coordinators master",
|
|
" print_array coordMasterServers",
|
|
" print_array coordMasterDirs",
|
|
" print_array coordMaxWALSenders",
|
|
"",
|
|
" # Coordinators slave",
|
|
" echo coordSlave $coordSlave",
|
|
" echo coordSlaveSync $coordSlaveSync",
|
|
" print_array coordSlaveServers",
|
|
" print_array coordSlaveDirs",
|
|
" print_array coordArchLogDirs",
|
|
"",
|
|
" # Coordinator Configuration files",
|
|
" echo coordExtraConfig $coordExtraConfig",
|
|
" print_array coordSpecificExtraConfig",
|
|
" echo coordExtraPgHba $coordExtraPgHba",
|
|
" print_array coordSpecificExtraPgHba",
|
|
"",
|
|
" # Coordinator Additional Slaves",
|
|
" echo coordAdditionalSlaves $coordAdditionalSlaves",
|
|
" if [ \"$coordAdditionalSlaves\" == \"y\" ]; then",
|
|
" print_array coordAdditionalSlaveSet",
|
|
" for ((i=0; i<${#coordAdditionalSlaveSet[@]}; i++)); do",
|
|
" el=${coordAdditionalSlaveSet[$i]}",
|
|
" echo -n ${el}_Sync \" \"",
|
|
" eval echo '$'\"$el\"_Sync",
|
|
" print_array ${el}_Servers",
|
|
" print_array ${el}_Dirs",
|
|
" print_array ${el}_ArchLogDirs",
|
|
" done",
|
|
" fi",
|
|
"",
|
|
" # Datanodes overall",
|
|
" echo primaryDatanode $primaryDatanode",
|
|
" print_array datanodeNames",
|
|
" print_array datanodePorts",
|
|
" print_array datanodePgHbaEntries",
|
|
" ",
|
|
" # Datanodes masters",
|
|
" print_array datanodeMasterServers",
|
|
" print_array datanodeMasterDirs",
|
|
" print_array datanodeMaxWALSenders",
|
|
" ",
|
|
" # Datanodes slaves",
|
|
" echo datanodeSlave $datanodeSlave",
|
|
" echo datanodeSlaveSync $datanodeSlaveSync",
|
|
" print_array datanodeSlaveServers",
|
|
" print_array datanodeSlaveDirs",
|
|
" print_array datanodeArchLogDirs",
|
|
"",
|
|
" # Datanode configuration files",
|
|
" echo datanodeExtraConfig $datanodeExtraConfig",
|
|
" print_array datanodeSpecificExtraConfig",
|
|
" echo datanodeExtraPgHba $datanodeExtraPgHba",
|
|
" print_array datanodeSpecificExtraPgHba",
|
|
"",
|
|
" # Datanodes additional slaves",
|
|
" echo datanodeAdditionalSlaves $datanodeAdditionalSlaves",
|
|
" if [ \"$datanodeAdditionalSlaves\" == \"y\" ]; then",
|
|
" print_array datanodeAdditionalSlaveSet",
|
|
" for ((i=0; i<${#datanodeAdditionalSlaveSet[@]}; i++)); do",
|
|
" el=${datanodeAdditionalSlaveSet[$i]}",
|
|
" echo -n ${el}_Sync \" \"",
|
|
" eval echo '$'\"$el\"_Sync",
|
|
" print_array ${el}_Servers",
|
|
" print_array ${el}_Dirs",
|
|
" print_array ${el}_ArchLogDirs",
|
|
" done",
|
|
" fi",
|
|
" ",
|
|
" # WAL Archives",
|
|
" echo walArchive $walArchive",
|
|
" print_array walArchiveSet",
|
|
" if [ \"$walArchive\" == \"y\" ]; then",
|
|
" for ((i=0; i<${#walArchvieSet[@]}; i++)); do",
|
|
" print_array ${el}_source",
|
|
" echo -n ${el}_host",
|
|
" eval echo '$'\"$el\"_host",
|
|
" echo -n ${el}_backupdir",
|
|
" eval echo '$'\"$el\"_backupdir",
|
|
" done",
|
|
" fi",
|
|
"}",
|
|
"",
|
|
"",
|
|
"",
|
|
"#============================================================",
|
|
"#",
|
|
"# Common functions",
|
|
"#",
|
|
"#============================================================",
|
|
"",
|
|
"# Optionally $1 will be $PGXC_CTL_HOME settings.",
|
|
"function set_home",
|
|
"{",
|
|
" if [ $# > 1 ]; then",
|
|
" echo \"Invalid set_home function call\"",
|
|
" return 1",
|
|
" fi",
|
|
" if [ $# == 1 ]; then",
|
|
" if [ -d $1 ]; then",
|
|
" pgxc_ctl_home=$1",
|
|
" else",
|
|
" eecho \"set_home: $1 is not a directory.\"",
|
|
" return 1",
|
|
" fi",
|
|
" elif [ $PGXC_CTL_HOME != \"\" ]; then",
|
|
" if [ -d $PGXC_CTL_HOME ]; then",
|
|
" pgxc_ctl_home=$PGXC_CTL_HOME",
|
|
" else",
|
|
" eecho \"set_home: env PGXC_CTL_HOME($PGXC_CTL_HOME) is not a directory.\"",
|
|
" return 1;",
|
|
" fi",
|
|
" fi",
|
|
" cd $pgxc_ctl_home;",
|
|
"}",
|
|
"",
|
|
"###############################################################################",
|
|
"#",
|
|
"# EXECUTING SECTION",
|
|
"#",
|
|
"###############################################################################",
|
|
"",
|
|
"#=======================================================",
|
|
"# Things to be done at first",
|
|
"#=======================================================",
|
|
"",
|
|
"# Handle options",
|
|
"progname=$0",
|
|
"moretodo=y",
|
|
"cmd_with_log=null",
|
|
"#set_home",
|
|
"if [ -f $pgxc_ctl_home/.pgxc_ctl_rc ]; then",
|
|
" source $pgxc_ctl_home/.pgxc_ctl_rc",
|
|
"fi",
|
|
"",
|
|
"configFile=\"\"",
|
|
"",
|
|
"while [ $moretodo == y ]; do",
|
|
" if [ $# -gt 0 ]; then",
|
|
" case $1 in",
|
|
" -v )",
|
|
" shift;",
|
|
" verbose=y;",
|
|
" continue;;",
|
|
" --verbose )",
|
|
" shift;",
|
|
" verbose=y;",
|
|
" continue;;",
|
|
" --silent )",
|
|
" verbose=n;",
|
|
" continue;;",
|
|
" -d ) # debug option",
|
|
" shift;",
|
|
" DEBUG=y;",
|
|
" continue;;",
|
|
" --debug )",
|
|
" shift;",
|
|
" DEBUG=y;",
|
|
" continue;;",
|
|
" -c ) # Configuraton file",
|
|
" shift;",
|
|
" if [ $# -le 0 ]; then",
|
|
" echo ERROR: no -c option value found",
|
|
" exit 1",
|
|
" else",
|
|
" configFile=$1",
|
|
" shift",
|
|
" fi;",
|
|
" continue;;",
|
|
" --configuration ) # Configuraion file",
|
|
" shift;",
|
|
" if [ $# -le 0 ]; then",
|
|
" echo ERROR: no --configuration option value found",
|
|
" exit 1",
|
|
" else",
|
|
" configFile=$1",
|
|
" shift",
|
|
" fi;",
|
|
" continue;;",
|
|
" --home ) # PGXC_CTL_HOME",
|
|
" shift;",
|
|
" if [ $# -le 0 ]; then",
|
|
" echo ERROR: no pgxc_ctl_home specified",
|
|
" exit 1",
|
|
" else",
|
|
" pgxc_ctl_home=$1",
|
|
" cd $pgxc_ctl_home",
|
|
" shift",
|
|
" fi;",
|
|
" continue;;",
|
|
" --signature ) # Check signature",
|
|
" shift;",
|
|
" if [ $# -le 0 ]; then",
|
|
" echo ERROR: Signature does not match",
|
|
" exit 1",
|
|
" fi",
|
|
" if [ \"$1\" != \"$signature\" ]; then",
|
|
" echo ERROR: Signature does not match",
|
|
" exit 1",
|
|
" fi",
|
|
" shift",
|
|
" continue;;",
|
|
" * )",
|
|
" moretodo=n",
|
|
" continue;;",
|
|
" esac",
|
|
" else",
|
|
" moretodo=n",
|
|
" fi",
|
|
"done",
|
|
"",
|
|
"echo $signature",
|
|
"# Read configuration file --> Should be activated only when debug option is off",
|
|
"",
|
|
"if [ -f $pgxc_ctl_home/pgxc_ctl_rc ]; then",
|
|
" source $pgxc_ctl_home/pgxc_ctl_rc",
|
|
"fi",
|
|
"",
|
|
"if [ \"$configFile\" != \"\" ] && [ -f \"$configFile\" ]; then",
|
|
" source $configFile",
|
|
"fi",
|
|
"# Log option can be overriden by command-line option",
|
|
"",
|
|
"print_values",
|
|
"",
|
|
"",
|
|
NULL};
|
|
|
|
/*
|
|
* Prototype of pgxc_ctl configuration file.
|
|
*
|
|
* It should be self descripting. Can be extracted to your pgxc_ctl
|
|
* work directory with 'prepare config' command.
|
|
*/
|
|
|
|
char* pgxc_ctl_conf_prototype[] = {"#!/bin/bash",
|
|
"#",
|
|
"# Postgres-XC Configuration file for pgxc_ctl utility. ",
|
|
"#",
|
|
"# Configuration file can be specified as -c option from pgxc_ctl command. Default is",
|
|
"# $PGXC_CTL_HOME/pgxc_ctl.org.",
|
|
"#",
|
|
"# This is bash script so you can make any addition for your convenience to configure",
|
|
"# your Postgres-XC cluster.",
|
|
"#",
|
|
"# Please understand that pgxc_ctl provides only a subset of configuration which pgxc_ctl",
|
|
"# provide. Here's several several assumptions/restrictions pgxc_ctl depends on.",
|
|
"#",
|
|
"# 1) All the resources of pgxc nodes has to be owned by the same user. Same user means",
|
|
"# user with the same user name. User ID may be different from server to server.",
|
|
"# This must be specified as a variable $pgxcOwner.",
|
|
"#",
|
|
"# 2) All the servers must be reacheable via ssh without password. It is highly recommended",
|
|
"# to setup key-based authentication among all the servers.",
|
|
"#",
|
|
"# 3) All the databases in coordinator/datanode has at least one same system admin. Pgxc_ctl",
|
|
"# uses this user to connect to coordinators and datanodes. Again, no password should",
|
|
"# be used to connect. You have many options to do this, pg_hba.conf, pg_ident.conf and",
|
|
"# others. Pgxc_ctl provides a way to configure pg_hba.conf but not pg_ident.conf. This",
|
|
"# will be implemented in the later releases.",
|
|
"#",
|
|
"# 4) Gtm master and slave can have different port to listen, while coordinator and datanode",
|
|
"# slave should be assigned the same port number as master.",
|
|
"#",
|
|
"# 5) Port nuber of a coordinator slave must be the same as its master.",
|
|
"#",
|
|
"# 6) Master and slave are connected using synchronous replication. Asynchronous replication",
|
|
"# have slight (almost none) chance to bring total cluster into inconsistent state.",
|
|
"# This chance is very low and may be negligible. Support of asynchronous replication",
|
|
"# may be supported in the later release.",
|
|
"#",
|
|
"# 7) Each coordinator and datanode can have only one slave each. Cascaded replication and",
|
|
"# multiple slave are not supported in the current pgxc_ctl.",
|
|
"#",
|
|
"# 8) Killing nodes may end up with IPC resource leak, such as semafor and shared memory.",
|
|
"# Only listening port (socket) will be cleaned with clean command.",
|
|
"#",
|
|
"# 9) Backup and restore are not supported in pgxc_ctl at present. This is a big task and",
|
|
"# may need considerable resource.",
|
|
"#",
|
|
"#========================================================================================",
|
|
"#",
|
|
"#",
|
|
"# pgxcInstallDir variable is needed if you invoke \"deploy\" command from pgxc_ctl utility.",
|
|
"# If don't you don't need this variable.",
|
|
"pgxcInstallDir=$HOME/pgxc",
|
|
"#---- OVERALL -----------------------------------------------------------------------------",
|
|
"#",
|
|
"pgxcOwner=koichi # owner of the Postgres-XC databaseo cluster. Here, we use this",
|
|
" # both as linus user and database user. This must be",
|
|
" # the system admin of each coordinator and datanode.",
|
|
"pgxcUser=$pgxcOwner # OS user of Postgres-XC owner",
|
|
"",
|
|
"tmpDir=/tmp # temporary dir used in XC servers",
|
|
"localTmpDir=$tmpDir # temporary dir used here locally",
|
|
"",
|
|
"configBackup=n # If you want config file backup, specify y to this value.",
|
|
"configBackupHost=pgxc-linker # host to backup config file",
|
|
"configBackupDir=$HOME/pgxc # Backup directory",
|
|
"configBackupFile=pgxc_ctl.bak # Backup file name --> Need to synchronize when original changed.",
|
|
"",
|
|
"#---- GTM ------------------------------------------------------------------------------------",
|
|
"",
|
|
"# GTM is mandatory. You must have at least (and only) one GTM master in your Postgres-XC cluster.",
|
|
"# If GTM crashes and you need to reconfigure it, you can do it by pgxc_update_gtm command to update",
|
|
"# GTM master with others. Of course, we provide pgxc_remove_gtm command to remove it. This command",
|
|
"# will not stop the current GTM. It is up to the operator.",
|
|
"",
|
|
"#---- Overall -------",
|
|
"gtmName=gtm",
|
|
"",
|
|
"#---- GTM Master -----------------------------------------------",
|
|
"",
|
|
"#---- Overall ----",
|
|
"gtmMasterServer=node13",
|
|
"gtmMasterPort=20001",
|
|
"gtmMasterDir=$HOME/pgxc/nodes/gtm",
|
|
"",
|
|
"#---- Configuration ---",
|
|
"gtmExtraConfig=none # Will be added gtm.conf for both Master and Slave (done at initilization only)",
|
|
"gtmMasterSpecificExtraConfig=none # Will be added to Master's gtm.conf (done at initialization only)",
|
|
"",
|
|
"#---- GTM Slave -----------------------------------------------",
|
|
"",
|
|
"# Because GTM is a key component to maintain database consistency, you may want to configure GTM slave",
|
|
"# for backup.",
|
|
"",
|
|
"#---- Overall ------",
|
|
"gtmSlave=y # Specify y if you configure GTM Slave. Otherwise, GTM slave will not be configured "
|
|
"and",
|
|
" # all the following variables will be reset.",
|
|
"gtmSlaveServer=node12 # value none means GTM slave is not available. Give none if you don't configure GTM "
|
|
"Slave.",
|
|
"gtmSlavePort=20001 # Not used if you don't configure GTM slave.",
|
|
"gtmSlaveDir=$HOME/pgxc/nodes/gtm # Not used if you don't configure GTM slave.",
|
|
"# Please note that when you have GTM failover, then there will be no slave available until you configure the "
|
|
"slave",
|
|
"# again. (pgxc_add_gtm_slave function will handle it)",
|
|
"",
|
|
"#---- Configuration ----",
|
|
"gtmSlaveSpecificExtraConfig=none # Will be added to Slave's gtm.conf (done at initialization only)",
|
|
"",
|
|
"#---- GTM Proxy "
|
|
"-------------------------------------------------------------------------------------------------------",
|
|
"# GTM proxy will be selected based upon which server each component runs on.",
|
|
"# When fails over to the slave, the slave inherits its master's gtm proxy. It should be",
|
|
"# reconfigured based upon the new location.",
|
|
"#",
|
|
"# To do so, slave should be restarted. So pg_ctl promote -> (edit postgresql.conf and recovery.conf) -> pg_ctl "
|
|
"restart",
|
|
"#",
|
|
"# You don't have to configure GTM Proxy if you dont' configure GTM slave or you are happy if every component "
|
|
"connects",
|
|
"# to GTM Master directly. If you configure GTL slave, you must configure GTM proxy too.",
|
|
"",
|
|
"#---- Shortcuts ------",
|
|
"gtmProxyDir=$HOME/pgxc/nodes/gtm_pxy",
|
|
"",
|
|
"#---- Overall -------",
|
|
"gtmProxy=y # Specify y if you conifugre at least one GTM proxy. You may not configure gtm proxies",
|
|
" # only when you dont' configure GTM slaves.",
|
|
" # If you specify this value not to y, the following parameters will be set to default "
|
|
"empty values.",
|
|
" # If we find there're no valid Proxy server names (means, every servers are specified",
|
|
" # as none), then gtmProxy value will be set to \"n\" and all the entries will be set to",
|
|
" # empty values.",
|
|
"gtmProxyNames=(gtm_pxy1 gtm_pxy2 gtm_pxy3 gtm_pxy4) # No used if it is not configured",
|
|
"gtmProxyServers=(node06 node07 node08 node09) # Specify none if you dont' configure it.",
|
|
"gtmProxyPorts=(20001 20001 20001 20001) # Not used if it is not configured.",
|
|
"gtmProxyDirs=($gtmProxyDir $gtmProxyDir $gtmProxyDir $gtmProxyDir) # Not used if it is not configured.",
|
|
"",
|
|
"#---- Configuration ----",
|
|
"gtmPxyExtraConfig=none # Extra configuration parameter for gtm_proxy. Coordinator section has an example.",
|
|
"gtmPxySpecificExtraConfig=(none none none none)",
|
|
"",
|
|
"#---- Coordinators "
|
|
"----------------------------------------------------------------------------------------------------",
|
|
"",
|
|
"#---- shortcuts ----------",
|
|
"coordMasterDir=$HOME/pgxc/nodes/coord",
|
|
"coordSlaveDir=$HOME/pgxc/nodes/coord_slave",
|
|
"coordArchLogDir=$HOME/pgxc/nodes/coord_archlog",
|
|
"",
|
|
"#---- Overall ------------",
|
|
"coordNames=(coord1 coord2 coord3 coord4) # Master and slave use the same name",
|
|
"coordPorts=(20004 20005 20004 20005) # Master and slave use the same port",
|
|
"poolerPorts=(20010 20011 20010 20011) # Master and slave use the same pooler port",
|
|
"coordPgHbaEntries=(192.168.1.0/24) # Assumes that all the coordinator (master/slave) accepts",
|
|
" # the same connection",
|
|
" # This entry allows only $pgxcOwner to connect.",
|
|
" # If you'd like to setup another connection, you should",
|
|
" # supply these entries through files specified below.",
|
|
"# Note: The above parameter is extracted as \"host all all 0.0.0.0/0 trust\". If you don't want",
|
|
"# such setups, specify the value () to this variable and suplly what you want using coordExtraPgHba",
|
|
"# and/or coordSpecificExtraPgHba variables.",
|
|
"",
|
|
"#---- Master -------------",
|
|
"coordMasterServers=(node06 node07 node08 node09) # none means this master is not available",
|
|
"coordMasterDirs=($coordMasterDir $coordMasterDir $coordMasterDir $coordMasterDir)",
|
|
"coordMaxWALsernder=5 # max_wal_senders: needed to configure slave. If zero value is specified,",
|
|
" # it is expected to supply this parameter explicitly by external files",
|
|
" # specified in the following. If you don't configure slaves, leave this value to zero.",
|
|
"coordMaxWALSenders=($coordMaxWALsernder $coordMaxWALsernder $coordMaxWALsernder $coordMaxWALsernder)",
|
|
" # max_wal_senders configuration for each coordinator.",
|
|
"",
|
|
"#---- Slave -------------",
|
|
"coordSlave=y # Specify y if you configure at least one coordiantor slave. Otherwise, the following",
|
|
" # configuration parameters will be set to empty values.",
|
|
" # If no effective server names are found (that is, every servers are specified as none),",
|
|
" # then coordSlave value will be set to n and all the following values will be set to",
|
|
" # empty values.",
|
|
"coordSlaveSync=y # Specify to connect with synchronized mode.",
|
|
"coordSlaveServers=(node07 node08 node09 node06) # none means this slave is not available",
|
|
"coordSlaveDirs=($coordSlaveDir $coordSlaveDir $coordSlaveDir $coordSlaveDir)",
|
|
"coordArchLogDirs=($coordArchLogDir $coordArchLogDir $coordArchLogDir $coordArchLogDir)",
|
|
"",
|
|
"#---- Configuration files---",
|
|
"# Need these when you'd like setup specific non-default configuration ",
|
|
"# These files will go to corresponding files for the master.",
|
|
"# You may supply your bash script to setup extra config lines and extra pg_hba.conf entries ",
|
|
"# Or you may supply these files manually.",
|
|
"coordExtraConfig=coordExtraConfig # Extra configuration file for coordinators. ",
|
|
" # This file will be added to all the coordinators'",
|
|
" # postgresql.conf",
|
|
"# Pleae note that the following sets up minimum parameters which you may want to change.",
|
|
"# You can put your postgresql.conf lines here.",
|
|
"cat > $coordExtraConfig <<EOF",
|
|
"#================================================",
|
|
"# Added to all the coordinator postgresql.conf",
|
|
"# Original: $coordExtraConfig",
|
|
"log_destination = 'stderr'",
|
|
"logging_collector = on",
|
|
"log_directory = 'pg_log'",
|
|
"listen_addresses = '*'",
|
|
"max_connections = 100",
|
|
"EOF",
|
|
"",
|
|
"# Additional Configuration file for specific coordinator master.",
|
|
"# You can define each setting by similar means as above.",
|
|
"coordSpecificExtraConfig=(none none none none)",
|
|
"coordExtraPgHba=none # Extra entry for pg_hba.conf. This file will be added to all the coordinators' "
|
|
"pg_hba.conf",
|
|
"coordSpecificExtraPgHba=(none none none none)",
|
|
"",
|
|
"#----- Additional Slaves -----",
|
|
"#",
|
|
"# Please note that this section is just a suggestion how we extend the configuration for",
|
|
"# multiple and cascaded replication. They're not used in the current version.",
|
|
"#",
|
|
"coordAdditionalSlaves=n # Additional slave can be specified as follows: where you",
|
|
"coordAdditionalSlaveSet=(cad1) # Each specifies set of slaves. This case, two set of slaves are",
|
|
" # configured",
|
|
"cad1_Sync=n # All the slaves at \"cad1\" are connected with asynchronous mode.",
|
|
" # If not, specify \"y\"",
|
|
" # The following lines specifies detailed configuration for each",
|
|
" # slave tag, cad1. You can define cad2 similarly.",
|
|
"cad1_Servers=(node08 node09 node06 node07) # Hosts",
|
|
"cad1_dir=$HOME/pgxc/nodes/coord_slave_cad1",
|
|
"cad1_Dirs=($cad1_dir $cad1_dir $cad1_dir $cad1_dir)",
|
|
"cad1_ArchLogDir=$HOME/pgxc/nodes/coord_archlog_cad1",
|
|
"cad1_ArchLogDirs=($cad1_ArchLogDir $cad1_ArchLogDir $cad1_ArchLogDir $cad1_ArchLogDir)",
|
|
"",
|
|
"",
|
|
"#---- Datanodes "
|
|
"-------------------------------------------------------------------------------------------------------",
|
|
"",
|
|
"#---- Shortcuts --------------",
|
|
"datanodeMasterDir=$HOME/pgxc/nodes/dn_master",
|
|
"datanodeSlaveDir=$HOME/pgxc/nodes/dn_slave",
|
|
"datanodeArchLogDir=$HOME/pgxc/nodes/datanode_archlog",
|
|
"",
|
|
"#---- Overall ---------------",
|
|
"#primaryDatanode=datanode1 # Primary Node.",
|
|
"# At present, xc has a priblem to issue ALTER NODE against the primay node. Until it is fixed, the test will be "
|
|
"done",
|
|
"# without this feature.",
|
|
"primaryDatanode=datanode1 # Primary Node.",
|
|
"datanodeNames=(datanode1 datanode2 datanode3 datanode4)",
|
|
"datanodePorts=(20008 20009 20008 20009) # Master and slave use the same port!",
|
|
"datanodePgHbaEntries=(192.168.1.0/24) # Assumes that all the coordinator (master/slave) accepts",
|
|
" # the same connection",
|
|
" # This list sets up pg_hba.conf for $pgxcOwner user.",
|
|
" # If you'd like to setup other entries, supply them",
|
|
" # through extra configuration files specified below.",
|
|
"# Note: The above parameter is extracted as \"host all all 0.0.0.0/0 trust\". If you don't want",
|
|
"# such setups, specify the value () to this variable and suplly what you want using datanodeExtraPgHba",
|
|
"# and/or datanodeSpecificExtraPgHba variables.",
|
|
"",
|
|
"#---- Master ----------------",
|
|
"datanodeMasterServers=(node06 node07 node08 node09) # none means this master is not available.",
|
|
" # This means that there should be the master but is down.",
|
|
" # The cluster is not operational until the master is",
|
|
" # recovered and ready to run. ",
|
|
"datanodeMasterDirs=($datanodeMasterDir $datanodeMasterDir $datanodeMasterDir $datanodeMasterDir)",
|
|
"datanodeMaxWalSender=5 # max_wal_senders: needed to configure slave. If zero value "
|
|
"is ",
|
|
" # specified, it is expected this parameter is explicitly "
|
|
"supplied",
|
|
" # by external configuration files.",
|
|
" # If you don't configure slaves, leave this value zero.",
|
|
"datanodeMaxWALSenders=($datanodeMaxWalSender $datanodeMaxWalSender $datanodeMaxWalSender $datanodeMaxWalSender)",
|
|
" # max_wal_senders configuration for each datanode",
|
|
"",
|
|
"#---- Slave -----------------",
|
|
"datanodeSlave=y # Specify y if you configure at least one coordiantor slave. Otherwise, the following",
|
|
" # configuration parameters will be set to empty values.",
|
|
" # If no effective server names are found (that is, every servers are specified as none),",
|
|
" # then datanodeSlave value will be set to n and all the following values will be set to",
|
|
" # empty values.",
|
|
"datanodeSlaveServers=(node07 node08 node09 node06) # value none means this slave is not available",
|
|
"datanodeSlaveSync=y # If datanode slave is connected in synchronized mode",
|
|
"datanodeSlaveDirs=($datanodeSlaveDir $datanodeSlaveDir $datanodeSlaveDir $datanodeSlaveDir)",
|
|
"datanodeArchLogDirs=( $datanodeArchLogDir $datanodeArchLogDir $datanodeArchLogDir $datanodeArchLogDir )",
|
|
"",
|
|
"# ---- Configuration files ---",
|
|
"# You may supply your bash script to setup extra config lines and extra pg_hba.conf entries here.",
|
|
"# These files will go to corresponding files for the master.",
|
|
"# Or you may supply these files manually.",
|
|
"datanodeExtraConfig=none # Extra configuration file for datanodes. This file will be added to all the ",
|
|
" # datanodes' postgresql.conf",
|
|
"datanodeSpecificExtraConfig=(none none none none)",
|
|
"datanodeExtraPgHba=none # Extra entry for pg_hba.conf. This file will be added to all the datanodes' "
|
|
"postgresql.conf",
|
|
"datanodeSpecificExtraPgHba=(none none none none)",
|
|
"",
|
|
"#----- Additional Slaves -----",
|
|
"datanodeAdditionalSlaves=n # Additional slave can be specified as follows: where you",
|
|
"# datanodeAdditionalSlaveSet=(dad1 dad2) # Each specifies set of slaves. This case, two set of slaves are",
|
|
" # configured",
|
|
"# dad1_Sync=n # All the slaves at \"cad1\" are connected with asynchronous mode.",
|
|
" # If not, specify \"y\"",
|
|
" # The following lines specifies detailed configuration for each",
|
|
" # slave tag, cad1. You can define cad2 similarly.",
|
|
"# dad1_Servers=(node08 node09 node06 node07) # Hosts",
|
|
"# dad1_dir=$HOME/pgxc/nodes/coord_slave_cad1",
|
|
"# dad1_Dirs=($cad1_dir $cad1_dir $cad1_dir $cad1_dir)",
|
|
"# dad1_ArchLogDir=$HOME/pgxc/nodes/coord_archlog_cad1",
|
|
"# dad1_ArchLogDirs=($cad1_ArchLogDir $cad1_ArchLogDir $cad1_ArchLogDir $cad1_ArchLogDir)",
|
|
"",
|
|
"#---- WAL archives "
|
|
"-------------------------------------------------------------------------------------------------",
|
|
"walArchive=n # If you'd like to configure WAL archive, edit this section.",
|
|
" # Pgxc_ctl assumes that if you configure WAL archive, you configure it",
|
|
" # for all the coordinators and datanodes.",
|
|
" # Default is \"no\". Please specify \"y\" here to turn it on.",
|
|
"#",
|
|
"# End of Configuration Section",
|
|
"#",
|
|
"#================================================================================================================="
|
|
"=========",
|
|
"",
|
|
"#================================================================================================================="
|
|
"=======",
|
|
"# The following is for extension. Just demonstrate how to write such extension. There's no code",
|
|
"# which takes care of them so please ignore the following lines. They are simply ignored by pgxc_ctl.",
|
|
"# No side effects.",
|
|
"#=============<< Beginning of future extension demonistration >> "
|
|
"========================================================",
|
|
"# You can setup more than one backup set for various purposes, such as disaster recovery.",
|
|
"walArchiveSet=(war1 war2)",
|
|
"war1_source=(master) # you can specify master, slave or ano other additional slaves as a source of WAL archive.",
|
|
" # Default is the master",
|
|
"wal1_source=(slave)",
|
|
"wal1_source=(additiona_coordinator_slave_set additional_datanode_slave_set)",
|
|
"war1_host=node10 # All the nodes are backed up at the same host for a given archive set",
|
|
"war1_backupdir=$HOME/pgxc/backup_war1",
|
|
"wal2_source=(master)",
|
|
"war2_host=node11",
|
|
"war2_backupdir=$HOME/pgxc/backup_war2",
|
|
"#=============<< End of future extension demonistration >> "
|
|
"========================================================",
|
|
NULL};
|