318 lines
17 KiB
Bash
318 lines
17 KiB
Bash
#!/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 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=koichi # 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.
|
|
|
|
#---- 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 >> ========================================================
|