#!/usr/bin/env 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 superuser. 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=$USER # owner of the Postgres-XC databaseo cluster. Here, we use this # both as linus user and database user. This must be # the super user 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. dataDirRoot=$HOME/DATA/pgxl/nodes #---- 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 Master ----------------------------------------------- #---- Overall ---- gtmMasterServer=() gtmMasterPort=() gtmMasterDir=() #---- Configuration --- gtmExtraConfig=() # Will be added gtm.conf for both Master and Slave (done at initilization only) gtmMasterSpecificExtraConfig=() # 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=n # Specify y if you configure GTM Slave. Otherwise, GTM slave will not be configured and # all the following variables will be reset. gtmSlaveName=() gtmSlaveServer=() # value none means GTM slave is not available. Give none if you don't configure GTM Slave. gtmSlavePort=() # Not used if you don't configure GTM slave. gtmSlaveDir=() # 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=() # 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=() #---- Overall ------- gtmProxy=() # 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=() # No used if it is not configured gtmProxyServers=() # Specify none if you dont' configure it. gtmProxyPorts=() # Not used if it is not configured. gtmProxyDirs=() # Not used if it is not configured. #---- Configuration ---- gtmPxyExtraConfig=none # Extra configuration parameter for gtm_proxy. Coordinator section has an example. #---- Coordinators ---------------------------------------------------------------------------------------------------- #---- shortcuts ---------- coordMasterDir=$dataDirRoot/coord_master coordSlaveDir=$HOME/coord_slave coordArchLogDir=$HOME/coord_archlog #---- Overall ------------ coordNames=() # Master and slave use the same name coordPorts=() # Master server listening ports poolerPorts=() # Master pooler ports coordPgHbaEntries=(::1/128) # 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. #coordPgHbaEntries=(127.0.0.1/32) # Same as above but for IPv4 connections #---- Master ------------- coordMasterServers=() # none means this master is not available coordMasterDirs=() coordMaxWALsender=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=() # max_wal_senders configuration for each coordinator. #---- Slave ------------- coordSlave=n # 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=n # Specify to connect with synchronized mode. coordSlaveServers=() # none means this slave is not available coordSlavePorts=() # coordinator slave listening ports coordSlavePoolerPorts=() # coordinator slave pooler ports coordSlaveDirs=() coordArchLogDirs=() #---- 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 < $datanodeExtraConfig <