Sun Cluster Data Service for PostgreSQL Guide for Solaris OS

Installing and Configuring Sun Cluster HA for PostgreSQL

This chapter explains how to install and configure Sun Cluster HA for PostgreSQL and contains the following sections:

Sun Cluster HA for PostgreSQL Overview

Sun Cluster HA for PostgreSQL enables the Sun Cluster software to manage PostgreSQL by providing components to perform the orderly startup, shutdown, and fault monitoring of PostgreSQL.

You can configure Sun Cluster HA for PostgreSQL as a failover service. You cannot configure Sun Cluster HA for PostgreSQL as a multiple-masters service or as a scalable service.

When a PostgreSQL database cluster is managed by the Sun Cluster HA for PostgreSQL data service, the PostgreSQL instance becomes a failover PostgreSQL resource across the Sun Cluster nodes. The failover is managed by the Sun Cluster HA for PostgreSQL data service, which runs within the global zone and failover zones.

For conceptual information about failover data services, multiple-masters data services, and scalable data services, see Sun Cluster Concepts Guide for Solaris OS.

Overview of Installing and Configuring Sun Cluster HA for PostgreSQL

The following table summarizes the tasks for installing and configuring Sun Cluster HA for PostgreSQL and provides cross-references to detailed instructions for performing these tasks. Perform the tasks in the order that they are listed in the table.

Table 1 Tasks for Installing and Configuring Sun Cluster HA for PostgreSQL

Task 

Instructions 

Plan the installation 

Planning the Sun Cluster HA for PostgreSQL Installation and Configuration

Install and configure the PostgreSQL software 

Installing and Configuring PostgreSQL

Verify the installation and configuration 

How to Verify the Installation and Configuration of PostgreSQL

Install Sun Cluster HA for PostgreSQL packages 

Installing the Sun Cluster HA for PostgreSQL Packages

Register and configure Sun Cluster HA for PostgreSQL resources 

Registering and Configuring Sun Cluster HA for PostgreSQL

Verify the Sun Cluster HA for PostgreSQL installation and configuration 

Verifying the Sun Cluster HA for PostgreSQL Installation and Configuration

Tune the Sun Cluster HA for PostgreSQL fault monitor 

Tuning the Sun Cluster HA for PostgreSQL Fault Monitor

Debug Sun Cluster HA for PostgreSQL 

Debugging Sun Cluster HA for PostgreSQL

Planning the Sun Cluster HA for PostgreSQL Installation and Configuration

This section contains the information you need to plan your Sun Cluster HA for PostgreSQL installation and configuration.

PostgreSQL and Solaris Containers

Sun Cluster HA for PostgreSQL is supported in Solaris Containers, Sun Cluster is offering two concepts for Solaris Containers.

Configuration Restrictions

The configuration restrictions in the subsections that follow apply only to Sun Cluster HA for PostgreSQL.


Caution – Caution –

Your data service configuration might not be supported if you do not observe these restrictions.


Restriction for the Location of the Database Cluster

The PostgreSQL database cluster is where the database files and the configuration files are stored. The database cluster, represented by the configuration variable PGDATA, needs to be placed on the shared storage.

Restriction for the Listening Policy of the PostgreSQL Database Server

Sun Cluster HA for PostgreSQL requires that the PostgreSQL listens at the localhost. Otherwise the monitoring of your data service will not work. For more information, see Prepare Your PostgreSQL Installation for Cluster Control.

Restriction for the PostgreSQL postgresql.conf File

The postgresql.conf file is one of the central configuration files for a specific PostgreSQL database cluster.

The postgresql.conf file must be stored in the PGDATA path. You cannot register Sun Cluster HA for PostgreSQL if the file postgresql.conf is not in the directory referenced in the PGDATA variable. The other configuration files can be kept elsewhere. For more information about registration, see Registering and Configuring Sun Cluster HA for PostgreSQL.

Restriction for the Password Policy for the Sun Cluster HA for PostgreSQL Monitoring Database

Sun Cluster HA for PostgreSQL requires a database to which it can connect and where it can manipulate a table for monitoring purposes. The password policy of this database for access from the localhost must be either trust or password. All other password policies can be whatever is applicable. For more information about setting the password policy, see Registering and Configuring Sun Cluster HA for PostgreSQL. For more information about the password policy, go to http://www.postgresql.org.

Restriction for the PostgreSQL smf Service Name in a Failover Zone

The PostgreSQL configuration in a failover zone uses the smf component of Sun Cluster HA for Solaris Containers. The registration of the Sun Cluster HA for PostgreSQL data service in a failover zone defines an smf service to control the PostgreSQL database. The name of this smf service is generated in this naming scheme: svc:/application/sczone-agents:resource-name. No other smf service with exactly this name can exist.

The associated smf manifest is automatically created during the registration process in this location and naming scheme: /var/svc/manifest/application/sczone-agents/resource-name.xml. No other manifest can coexist with this name.

Configuration Requirements

The configuration requirements in this section apply only to Sun Cluster HA for PostgreSQL.


Caution – Caution –

If your data service configuration does not conform to these requirements, the data service configuration might not be supported.


Dependencies Between Sun Cluster HA for PostgreSQL Components

The dependencies between the Sun Cluster HA for PostgreSQL components are described in the following table.

Table 2 Dependencies Between Sun Cluster HA for PostgreSQL Components

Component 

Dependency 

PostgreSQL resource in a Solaris 10 global zone,zone or in Solaris 9 

SUNW.HAStoragePlus This dependency is required only if the configuration uses a failover file system, of file systems in a zone.

SUNW.LogicalHostName

PostgreSQL resource in a Solaris 10 failover zone. 

Sun Cluster HA for the Solaris Container boot resource. 

SUNW.HAStoragePlus

SUNW.LogicalHostName — This dependency is required only if the zones boot resource does not manage the zone's IP address.

You set these dependencies, when you register and configure Sun Cluster HA for PostgreSQL. For more information, see Registering and Configuring Sun Cluster HA for PostgreSQL.

If more elaborate dependencies are required, see the r_properties(5) and rg_properties(5) man pages for further dependencies and affinities settings.

Parameter File for Sun Cluster HA for PostgreSQL

Sun Cluster HA for PostgreSQL requires a parameter file to pass configuration information to the data service. You must create a directory for this file. Because the directory must be available on each node that is to host the PostgreSQL database, place the directory on the shared storage. If Sun Cluster HA for PostgreSQL is configured for a failover zone, this file must be available in this zone. The parameter file is created automatically when the resource is registered.

Installing and Configuring PostgreSQL

This section explains only the special requirements for installing PostgreSQL for use with Sun Cluster HA for PostgreSQL. For complete information about installing and configuring PostgreSQL, see http://www.postgresql.org. For complete information about installing and configuring a Solaris Container, see System Administration Guide: Solaris Containers-Resource Management and Solaris Zones.

Determine if the sun supplied PostgreSQL is already installed and if the installed version will fulfill your requirements. To do this you need to check if at least the three following packages are installed on your system.

SUNWpostgr

SUNWpostgr-libs

SUNWpostgr-server-data

To determine which PostgreSQL version is installed, submit the following commands.


# su - non-root-user
$ postmaster --version

If they are not installed, you need to decide wether you wan to install PostgreSQL from the Solaris Media or if you want to build PostgreSQL on your own. If the version does not fulfill your needs, you have to build PostgreSQL on your own.

For each PostgreSQL database that you are installing and configuring choose the following tasks according to your zone type.

Determine whether you have to configure Sun Cluster HA for PostgreSQL to run in a global zone, in a zone or in a failover zone configuration. The global zone configuration procedure is applicable if you install PostgreSQL on Solaris 9, or in the global zone of Solaris 10. The failover zone configuration procedure is applicable if you install PostgreSQL in a failover zone.

To install and configure PostgreSQL in a global zone configuration, complete the following tasks:

To install and configure PostgreSQL in a zone configuration, complete the following tasks:

To install and configure PostgreSQL in a failover zone configuration, complete the following tasks:

ProcedureHow to Enable a PostgreSQL Database to Run in a Global Zone Configuration

For a complete example of deploying in a global zone, see Appendix B, Deployment Example: Installing PostgreSQL in the Global Zone.

  1. As superuser register the SUNW.HAStoragePlus and the SUNW.gds resource types.


    # clresourcetype register SUNW.HAStoragePlus SUNW.gds
    
  2. Create a failover resource group.


    # clresourcegroup create PostgreSQL-resource-group
    
  3. Create a resource for the PostgreSQL`s disk storage.


    # clresource create -t SUNW.HAStoragePlus \
    -p FileSystemMountPoints=PostgreSQL-instance-mount-points \
    PostgreSQL-has-resource
    
  4. (Optional) If you plan to access the database from a logical host, choose the following tasks according to your zone type.


    # clreslogicalhostname create -g PostgreSQL-resource-group \
    PostgreSQL-logical-hostname-resource-name
    
  5. Enable the failover resource group.


    # clresourcegroup online -M PostgreSQL-resource-group
    
  6. Create a directory for the Sun Cluster HA for PostgreSQL parameter file.


    # mkdir  PostgreSQL-instance-mount-points/parameter-dir
    

Procedure How to Install and Configure PostgreSQL in a Global Zone


Note –

For complete information about installing PostgreSQL, go to http://www.postgresql.org.


For a complete example of deployment in a global zone, see Appendix B, Deployment Example: Installing PostgreSQL in the Global Zone.

Before You Begin

Determine the following requirements for the deployment of PostgreSQL with Sun Cluster:

The following assumptions are made:

  1. As superuser create the home directory for the PostgreSQL user on one node.


    # mkdir /global/postgres
    
  2. Add a group for PostgreSQL on every node.


    # groupadd -g 1000 postgres
    
  3. Add a user who owns the PostgreSQL installation on every node.


    # useradd -u 1000 -g postgres -d /global/postgres -s /usr/bin/ksh postgres
    # chown -R postgres:postgres /global/postgres
    
  4. Switch to the PostgreSQL user.


    # su - postgres
    
  5. Set your PATH variable.


    $ PATH=$PATH:/usr/local/bin:/usr/sfw/bin:/usr/ccs/bin
    $ export PATH
    
  6. Set your LD_LIBRARY_PATH variable.


    $ LD_LIBRARY_PATH=/usr/sfw/lib:/usr/local/lib:/usr/lib:
    $ export LD_LIBRARY_PATH
    
  7. Switch to your build directory.


    $ cd /tmp/postgres/version
    
  8. Configure the PostgreSQL build.


    $ ./configure --prefix=/global/postgres/version
    
  9. Complete, verify and install the build.


    $ gmake
    $ gmake check
    $ gmake install
    

ProcedureHow to Enable a Zone to Run PostgreSQL in a Zone Configuration

For a complete example of deploying in a zone, see Appendix D, Deployment Example: Installing PostgreSQL in a Non-Global Zone.

  1. As superuser register the SUNW.HAStoragePlus and the SUNW.gds resource types.


    # clresourcetype register SUNW.HAStoragePlus SUNW.gds
    
  2. Install and boot the zone pgs-zone on all the nodes to host Sun Cluster HA for PostgreSQL.

  3. Create a failover resource group.


    # clresourcegroup create -n node-1:pgs-zone,node-2:pgs-zone PostgreSQL-resource-group
    
  4. Create a resource for the PostgreSQL zone`s disk storage.


    # clresource create -t SUNW.HAStoragePlus \
    -p FileSystemMountPoints=PostgreSQL-instance-mount-points \
    PostgreSQL-has-resource
    
  5. (Optional) Create a resource for the PostgreSQL`s logical hostname.


    # clreslogicalhostname create -g PostgreSQL-resource-group \
    PostgreSQL-logical-hostname-resource-name
    
  6. Enable the resource group.


    # clresourcegroup online -M  PostgreSQL-resource-group
    

Procedure How to Install and Configure PostgreSQL in a Zone


Note –

For complete information about installing PostgreSQL, go to http://www.postgresql.org.


For a complete example of deploying in a failover zone, see Appendix D, Deployment Example: Installing PostgreSQL in a Non-Global Zone.

Before You Begin

Determine the following requirements for the deployment of PostgreSQL with Sun Cluster:

The following assumptions are made:

  1. As superuser log in to the zone.


    # zlogin postgres-zone
    
  2. Add a group for PostgreSQL.


    # groupadd -g 1000 postgres
    
  3. Add a user who owns the PostgreSQL installation on every node.


    # useradd -u 1000 -g postgres -d /postgres -m -s /usr/bin/ksh postgres
    
  4. Switch to the PostgreSQL user.


    # su - postgres
    
  5. Set your PATH variable.


    $ PATH=$PATH:/usr/local/bin:/usr/sfw/bin:/usr/ccs/bin
    $ export PATH
    
  6. Set your LD_LIBRARY_PATH variable.


    $ LD_LIBRARY_PATH=/usr/sfw/lib:/usr/local/lib:/usr/lib:
    $ export LD_LIBRARY_PATH
    
  7. Switch to your build directory.


    $ cd /tmp/postgres/version
    
  8. Configure the PostgreSQL build.


    $ ./configure --prefix=/postgres/version
    
  9. Complete, verify, and install the build.


    $ gmake
    $ gmake check
    $ gmake install
    

ProcedureHow to Enable a Zone to Run PostgreSQL in a Failover Zone Configuration

For a complete example of deploying in a failover zone, see Appendix D, Deployment Example: Installing PostgreSQL in a Non-Global Zone.

  1. As superuser register the SUNW.HAStoragePlus and the SUNW.gds resource types.


    # clresourcetype register SUNW.HAStoragePlus SUNW.gds
    
  2. Create a failover resource group.


    # clresourcegroup create PostgreSQL-resource-group
    
  3. Create a resource for the PostgreSQL zone`s disk storage.


    # clresource create -t SUNW.HAStoragePlus \
    -p FileSystemMountPoints=PostgreSQL-instance-mount-points \
    PostgreSQL-has-resource
    
  4. (Optional) If you want the protection against a total adapter failure for your public network, create a resource for the PostgreSQL`s logical hostname.


    # clreslogicalhostname create -g PostgreSQL-resource-group \
    PostgreSQL-logical-hostname-resource-name
    
  5. Place the resource group in the managed state.


    # clresourcegroup online -M  PostgreSQL-resource-group
    
  6. Install the zone.

    Install the zone according to the Sun Cluster HA for Solaris Containers agent documentation, assuming that the resource name is pgsql-zone-rs and that the zone name is pgsql-zone.

  7. Verify the zone's installation.


    # zoneadm -z pgsql-zone boot
    # zoneadm -z pgsql-zone halt
    
  8. Register the zone's boot component.

    1. Copy the container resource boot component configuration file.


      # cp /opt/SUNWsczone/sczbt/util/sczbt_config zones-target-configuration-file
      
    2. Use a plain text editor to set the following variables:

      RS=pgsql-zone-rs
      RG=PostgreSQL-resource-group
      PARAMETERDIR=pgsql-zone-parameter-directory
      SC_NETWORK=true|false
      SC_LH=PostgreSQL-logical-hostname-resource-name
      FAILOVER=true|false
      HAS_RS=PostgreSQL-has-resource
      Zonename=pgsql-zone
      Zonebootopt=zone-boot-options
      Milestone=zone-boot-milestone
      Mounts=
    3. Create the parameter directory for your zone's resource.


      # mkdir pgsql-zone-parameter-directory
      
    4. Execute the Sun Cluster HA for Solaris Container's registration script.


      # /opt/SUNWsczone/sczbt/util/sczbt_register -f zones-target-configuration-file
      
    5. Enable the Solaris Container resource


      # clresource enable pgsql-zone-rs
      
  9. Enable the resource group.


    # clresourcegroup online PostgreSQL-resource-group
    

Procedure How to Install and Configure PostgreSQL in a Failover Zone


Note –

For complete information about installing PostgreSQL, go to http://www.postgresql.org.


For a complete example of deploying in a failover zone, see Appendix D, Deployment Example: Installing PostgreSQL in a Non-Global Zone.

Before You Begin

Determine the following requirements for the deployment of PostgreSQL with Sun Cluster:

The following assumptions are made:

  1. Log in to the zone.


    # zlogin postgres-zone
    
  2. Add a group for PostgreSQL.


    # groupadd -g 1000 postgres
    
  3. Add a user who owns the PostgreSQL installation on every node.


    # useradd -u 1000 -g postgres -d /postgres -m -s /usr/bin/ksh postgres
    
  4. Switch to the PostgreSQL user.


    # su - postgres
    
  5. Set your PATH variable.


    $ PATH=$PATH:/usr/local/bin:/usr/sfw/bin:/usr/ccs/bin
    $ export PATH
    
  6. Set your LD_LIBRARY_PATH variable.


    $ LD_LIBRARY_PATH=/usr/sfw/lib:/usr/local/lib:/usr/lib:
    $ export LD_LIBRARY_PATH
    
  7. Switch to your build directory.


    $ cd /tmp/postgres/version
    
  8. Configure the PostgreSQL build.


    $ ./configure --prefix=/postgres/version
    
  9. Complete, verify, and install the build.


    $ gmake
    $ gmake check
    $ gmake install
    

Verifying the Installation and Configuration of PostgreSQL

Before you install the Sun Cluster HA for PostgreSQL packages, verify that each PostgreSQL instance that you created is correctly configured to run in a cluster. The instance is the PostgreSQL database cluster together with the associated postmaster processes. This verification does not confirm that the PostgreSQL databases are highly available because the Sun Cluster HA for PostgreSQL data service is not yet configured.

ProcedureHow to Verify the Installation and Configuration of PostgreSQL

Perform this procedure for each PostgreSQL instance that you created in Installing and Configuring PostgreSQL. During the verification you will complete the PostgreSQL postinstallation steps.

Before You Begin

Determine whether you are in a local zone or in a global zone. If you are in a failover zone, use /postgres instead of /global/postgres for your directory prefix in this procedure.

  1. Switch to the PostgreSQL user if necessary.


    # su - postgres
    
  2. (Optional) Set the PATH and LD_LIBRARY_PATH variables.


    $ PATH=$PATH:/usr/local/bin:/usr/sfw/bin:/usr/ccs/bin
    $ export PATH
    $ LD_LIBRARY_PATH=/usr/sfw/lib:/usr/local/lib:/usr/lib:
    $ export LD_LIBRARY_PATH
    
  3. Set the PGDATA variable.

    The PGDATA variable points to the directory where the PostgreSQL database cluster is installed. The PostgreSQL database cluster is a directory that contains the configuration and the data files for all the databases.


    $ PGDATA=/global/postgres/data
    $ export PGDATA
    
  4. Create the data directory and the logs directory.


    $ mkdir /global/postgres/data
    $ mkdir /global/postgres/logs
    
  5. Initialize the PostgreSQL cluster.


    $ cd ~/postgres-version
    $ ./bin/initdb -D $PGDATA
    
  6. Start the PostgreSQL database server.


    $ ./bin/pg_ctl -l /global/postgres/logs/firstlog start
    
  7. Create and delete a test database.


    $ ./bin/createdb test
    $ ./bin/dropdb test
    
  8. If you are in a non global zone, leave this zone and return to the target zone.

Installing the Sun Cluster HA for PostgreSQL Packages

If you did not install the Sun Cluster HA for PostgreSQL packages during your initial Sun Cluster installation, perform this procedure to install the packages. To install the packages, use the Sun JavaTM Enterprise System Installation Wizard.

ProcedureHow to Install the Sun Cluster HA for PostgreSQL Packages

Perform this procedure on each cluster node where you are installing the Sun Cluster HA for PostgreSQL packages.

You can run the Sun Java Enterprise System Installation Wizard with a command-line interface (CLI) or with a graphical user interface (GUI). The content and sequence of instructions in the CLI and the GUI are similar.


Note –

Even if you plan to configure this data service to run in non-global zones, install the packages for this data service in the global zone. The packages are propagated to any existing non-global zones and to any non-global zones that are created after you install the packages.


Before You Begin

Ensure that you have the Sun Java Availability Suite DVD-ROM.

If you intend to run the Sun Java Enterprise System Installation Wizard with a GUI, ensure that your DISPLAY environment variable is set.

  1. On the cluster node where you are installing the data service packages, become superuser.

  2. Load the Sun Java Availability Suite DVD-ROM into the DVD-ROM drive.

    If the Volume Management daemon vold(1M) is running and configured to manage DVD-ROM devices, the daemon automatically mounts the DVD-ROM on the /cdrom directory.

  3. Change to the Sun Java Enterprise System Installation Wizard directory of the DVD-ROM.

    • If you are installing the data service packages on the SPARC® platform, type the following command:


      # cd /cdrom/cdrom0/Solaris_sparc
      
    • If you are installing the data service packages on the x86 platform, type the following command:


      # cd /cdrom/cdrom0/Solaris_x86
      
  4. Start the Sun Java Enterprise System Installation Wizard.


    # ./installer
    
  5. When you are prompted, accept the license agreement.

    If any Sun Java Enterprise System components are installed, you are prompted to select whether to upgrade the components or install new software.

  6. From the list of Sun Cluster agents under Availability Services, select the data service for PostgreSQL.

  7. If you require support for languages other than English, select the option to install multilingual packages.

    English language support is always installed.

  8. When prompted whether to configure the data service now or later, choose Configure Later.

    Choose Configure Later to perform the configuration after the installation.

  9. Follow the instructions on the screen to install the data service packages on the node.

    The Sun Java Enterprise System Installation Wizard displays the status of the installation. When the installation is complete, the wizard displays an installation summary and the installation logs.

  10. (GUI only) If you do not want to register the product and receive product updates, deselect the Product Registration option.

    The Product Registration option is not available with the CLI. If you are running the Sun Java Enterprise System Installation Wizard with the CLI, omit this step

  11. Exit the Sun Java Enterprise System Installation Wizard.

  12. Unload the Sun Java Availability Suite DVD-ROM from the DVD-ROM drive.

    1. To ensure that the DVD-ROM is not being used, change to a directory that does not reside on the DVD-ROM.

    2. Eject the DVD-ROM.


      # eject cdrom
      
Next Steps

See Registering and Configuring Sun Cluster HA for PostgreSQL to register Sun Cluster HA for PostgreSQL and to configure the cluster for the data service.

Registering and Configuring Sun Cluster HA for PostgreSQL

Before you perform the procedures in this section, ensure that the Sun Cluster HA for PostgreSQL data service packages are installed.

The configuration and registration file in the /opt/SUNWscPostgreSQL/util directory exists to register the Sun Cluster HA for PostgreSQL resources. This file defines the dependencies that are required between the Sun Cluster HA for PostgreSQL component and other resources. For information about these dependencies, see Dependencies Between Sun Cluster HA for PostgreSQL Components

This section covers the following main topics:

Specifying Configuration Parameters for the PostgreSQL Resource

Sun Cluster HA for PostgreSQL provides a script that automates the process of configuring the PostgreSQL resource. This script obtains configuration parameters from the pgs_config file. A template for this file is in the /opt/SUNWscPostgreSQL/util directory. To specify configuration parameters for the PostgreSQL resource, copy the pgs_config file to another directory and edit this pgs_config file.


Note –

This configuration file needs to be accessible from the zone where the PostgreSQL is installed.


Each configuration parameter in the pgs_config file is defined as a keyword-value pair. The pgs_config file already contains the required keywords and equals signs. For more information, see Listing of pgs_config. When you edit the /myplace/pgs_config file, add the required value to each keyword.

The keyword-value pairs in the pgs_config file are as follows:

RS=PostgreSQL-resource
RG=PostgreSQL-resource-group
PORT=80
LH=PostgreSQL-logical-hostname-resource-name
HAS_RS=PostgreSQL-has-resource
PFILE=pgsql-parameter-file
ZONE=pgsql-zone
ZONE_BT=pgsql-zone-rs
PROJECT=pgsql-zone-project
USER=pgsql-user
PGROOT=pgsql-root-directory
PGDATA=pgsql-data-directory
PGPORT=pgsql-port
PGLOGFILE=pgsql-log-file
LD_LIBRARY_PATH=pgsql-ld-library-path
ENVSCRIPT=pgsql-environment-script
SCDB=pgsql-mon-db
SCUSER=pgsql-mon-user
SCTABLE=pgsql-mon-table
SCPASS=pgsql-mon-pwd
NOCONRET=pgsql-noconn-rtcode

The meaning and permitted values of the keywords in the pgs_config file are as follows:

RS=PostgreSQL-resource

Specifies the name that you are assigning to the PostgreSQL resource. You must specify a value for this keyword.

RG=PostgreSQL-resource-group

Specifies the name of the resource group where the PostgreSQL resource will reside. You must specify a value for this keyword.

PORT=80

In a global zone configuration specifies the value of a dummy port only if you specified the LH value for the PostgreSQL resource. This variable is used only at registration time. If you will not specify an LH, omit this value.

In a failover zone configuration, omit this value.

LH=PostgreSQL-logical-hostname-resource-name

In a global zone configuration specifies the name of the SUNW.LogicalHostName resource for the PostgreSQL resource. This name must be the SUNW.LogicalHostname resource name you assigned when you created the resource in How to Enable a Zone to Run PostgreSQL in a Failover Zone Configuration. If you did not register a SUNW.LogicalHostname resource, omit this value.

In a failover zone configuration, omit this value.

HAS_RS=PostgreSQL-has-resource

Specifies the names of resources on which your PostgreSQL will depend, for example, the SUNW.HAStoragePlus resource, for the PostgreSQL resource. This name must be the SUNW.HAStoragePlus resource name that you assigned when you created the resource in How to Enable a PostgreSQL Database to Run in a Global Zone Configuration. Dependencies to additional resources can be specified here. They must be separated by a comma.

PFILE=pgsql-parameter-file

Specifies the name of the parameter file where the PostgreSQL specific parameters of the PostgreSQL resource are stored. This file is automatically created at registration time. You must specify a value for this keyword.

ZONE=pgsql-zonename

Specifies the name of the failover zone to host the PostgreSQL database. Omit this value if you configure a global zone environment.

ZONE_BT=pgsql-zone-rs

Specifies the name of the zone boot resource in a failover zone configuration. Omit this value if you configure a global zone environment.

PROJECT=pgsql-zone-project

Specifies the name of the resource management project in the failover zone. Omitting this value in a failover zone configuration results in the default project for USER. Leave the value blank for a global zone configuration.

USER=pgsql-user

Specifies the name of the Solaris user who owns the PostgreSQL database. You must specify a value for this keyword.

PGROOT=pgsql-root-directory

Specifies the name of the directory in which PostgreSQL is installed. For example, if PostgreSQL version 8.1.2 is installed in/global/postgres/postgresql-8.1.2, the variable PGROOT needs to be set to /global/postgres/postgresql-8.1.2. A valid PGROOT variable contains the file pg_ctl, which is located in its subdirectory bin. You must specify a value for this keyword.

Examples for PGROOT:

/usr

Root path for PostgreSQL shipped with Solaris OS. 

/usr/local/psql

Root path for the PostgreSQL build without a prefix. 

/your-path

Fully customized root path for PostgreSQL. This is where to place the binaries on the shared storage. A known convention is /path/postgresql-x.y.z.

PGDATA=pgsql-data-directory

Specifies the name of the directory where the “PostgreSQL data cluster” is initialized. This directory is where the data directories and at least the postgresql.conf file are located. You must specify a value for this keyword.

PGPORT=pgsql-port

Specifies the port on which the PostgreSQL server will listen.

PGLOGFILE=pgsql-log-file

Specifies the name of the log file of PostgreSQL. All server messages will be found in this file. You must specify a value for this keyword.

LD_LIBRARY_PATH=pgsql-ld-library-path

Specifies the libraries needed to start the PostgreSQL server and utilities. This parameter is optional.

ENVSCRIPT=pgsql-environment-script

Specifies the name of a script to source PostgreSQL—specific environment variables. In a global zone configuration, the script type is either C shell or Korn shell, according to the login shell of the PostgreSQL user. In a failover zone configuration, the script type must be a valid Korn shell script.

This parameter is optional.

SCDB=pgsql-mon-db

Specifies the name of the PostgreSQL database that will be monitored. You must specify a value for this keyword.

SCUSER=pgsql-mon-user

Specifies the name of the PostgreSQL database user, which is needed to monitor the condition of the database. This user will be created during the installation process. You must specify a value for this keyword.

SCTABLE=pgsql-mon-table

Specifies the name of the table that will be modified to monitor the health of the PostgreSQL application. This table will be created during the installation process. You must specify a value for this keyword.

SCPASS=pgsql-mon-pwd

Specifies the password for SCUSER. If no password is specified, the user set by SCUSER needs to be allowed to log in from the localhost without a password challenge.

This parameter is optional.

NOCONRET=pgs-noconn-rtcode

Specifies the value below 100 of the return code for failed database connections. For more information, seeTuning the Sun Cluster HA for PostgreSQL Fault Monitor

For illustration purposes, two examples for the pgs_config file are provided. Example 1 shows the pgs_config file for a global zone configuration. Example shows the pgs_config file for a failover zone configuration.


Example 1 Sample pgs_config File for a Global Zone of Zone Configuration

This example shows a pgs_config file in which configuration parameters are set as follows:

RS=postgres-rs
RG=postgres-rg
PORT=80
LH=postgres-lh
HAS_RS=postgres-has-rs
PFILE=/global/postgres/pfile
ZONE=
ZONE_BT=
PROJECT=
USER=postgres
PGROOT=/global/postgres/postgresql-8.1.2
PGDATA=/global/postgres/data
PGPORT=5432
PGLOGFILE=/global/postgres/logs/scinstance1
LD_LIBRARY_PATH=/usr/sfw/lib:/usr/local/lib:/usr/lib:
ENVSCRIPT=/global/postgres/variables.ksh
SCDB=testdb
SCUSER=testusr
SCTABLE=testtbl
SCPASS=testpwd
NOCONRET=10


Example 2 Sample pgs_config File for a Failover Zone Configuration

This example shows an pgs_config file in which configuration parameters are set as follows:

RS=postgres-zrs
RG=postgres-rg
PORT=
LH=
HAS_RS=
PFILE=/postgres/pfile
ZONE=pgs-zone
ZONE_BT=pgs-zone-rs
PROJECT=pgs-project
USER=zpostgr
PGROOT=/postgres/potgresql-8.1.2
PGDATA=/postgres/data
PGPORT=5432
PGLOGFILE=/postgres/logs/scinstance1
LD_LIBRARY_PATH=/usr/sfw/lib:/usr/local/lib:/usr/lib:
ENVSCRIPT=/postgres/variables.ksh
SCDB=testdb
SCUSER=testusr
SCTABLE=testtbl
SCPASS=testpwd
NOCONRET=10

Prepare Your PostgreSQL Installation for Cluster Control

To prepare your PostgreSQL installation for cluster control, you create a database, a user, and a table to be monitored by the PostgreSQL resource. Because you need to differentiate between a global zone and a failover zone, two procedures are provided.

ProcedureHow to Prepare Your PostgreSQL for Sun Cluster Registration in a Global Zone Configuration

Before You Begin

Ensure that you have edited the pgs_config file to specify configuration parameters for the Sun Cluster HA for PostgreSQL data service. For more information, see Specifying Configuration Parameters for the PostgreSQL Resource.

  1. As superuser change the rights of the configuration file to be accessible for your PostgreSQL user.


    # chmod 755 /myplace/pgs_config 
    
  2. Switch to your PostgreSQL user.


    # su - postgres
    
  3. If the login shell is not the Korn shell, switch to ksh.


    % ksh
    
  4. Set the necessary variables.


    $ . /myplace/pgs_config
    $ export PGDATA PGPORT LD_LIBRARY_PATH
    
  5. If your PostgreSQL is not already running, start the PostgreSQL server.


    $ $PGROOT/bin/pg_ctl -l $PGLOGFILE start
    
  6. Prepare the database.


    $ /opt/SUNWscPostgreSQL/util/pgs_db_prep -f /myplace/pgs_config
    
  7. (Optional) Configure your PostgreSQL instance to listen on the logical host's TCP/IP name.

    If you want your PostgreSQL databases to listen on more than localhost, configure the listen_address parameter in the file postgresql.conf. Use a plain text editor such as vi, and set the value of listen_address to an appropriate value.


    Caution – Caution –

    The PostgreSQL instance must listen on localhost. For additional information, see http://www.postgresql.org.


    listen_address = 'localhost,myhost'
  8. Set the security policy for the test database.

    Use a plain text editor such as vi to add the following line to the file pg_hba.conf.

    local   testdb         all                               password

    Note –

    For additional information about the pg_hba.conf file, see http://www.postgresql.org.


  9. Stop the PostgreSQL database server.


    $ $PGROOT/bin/pg_ctl stop
    

ProcedureHow to Prepare Your PostgreSQL for Sun Cluster Registration in a Failover Zone Configuration

Before You Begin

Ensure, that you have edited the pgs_config file to specify configuration parameters for the Sun Cluster HA for PostgreSQL data service. For more information, see Specifying Configuration Parameters for the PostgreSQL Resource. Also make sure that the package directory of the Sun Cluster HA for PostgreSQL, /opt/SUNWscPostgreSQL, is available in the target zone.

  1. As superuser change the rights of the configuration file to be accessible for your PostgreSQL user.


    Note –

    Ensure, that your pgs_config file is accessible from your zone. Otherwise, transfer the file to your zone by using appropriate methods.



    # chmod 755 /myplace/pgs_config 
    
  2. Switch to the target zone.


    # zlogin pgsql-zone
    
  3. Switch to the PostgreSQL user.


    # su -  zpostgr
    
  4. If the login shell is not the Korn shell, switch to ksh.


    % ksh
    
  5. Set the necessary variables.


    $ . /myplace/pgs_config
    $ export PGDATA PGPORT LD_LIBRARY_PATH
    
  6. If your PostgreSQL is not already running, start the PostgreSQL server.


    $ $PGROOT/bin/pg_ctl -l $PGLOGFILE start
    
  7. Prepare the database.


    $ /opt/SUNWscPostgreSQL/util/pgs_db_prep -f /myplace/pgs_config
    
  8. (Optional) Configure your PostgreSQL instance to listen on the logical hosts TCP/IP name.

    If you want your PostgreSQL databases to listen on more than localhost, configure the listen_address parameter in the file postgresql.conf. Use a plain text editor such as vi, and set the value of listen_address to an appropriate value.


    Caution – Caution –

    The PostgreSQL instance must listen on localhost. For additional information, see http://www.postgresql.org .


    listen_address = 'localhost,myhost'
  9. Set the security policy for the test database.

    Use a plain text editor such as vi to add the following line to the pg_hba.conf file.

    local   testdb         all                               password

    Note –

    For additional information, see http://www.postgresql.org.


  10. Stop the PostgreSQL database server.


    $ $PGROOT/bin/pg_ctl stop
    
  11. Leave the target zone and return to the global zone.

Creating and Enabling Resources for PostgreSQL

ProcedureHow to Create and Enable Resources for PostgreSQL

Before You Begin

Ensure that you have edited the pgs_config file to specify configuration parameters for the Sun Cluster HA for PostgreSQL data service. For more information, see Specifying Configuration Parameters for the PostgreSQL Resource.

  1. Become superuser on one of the nodes in the cluster that will host PostgreSQL.

  2. Go to the directory that contains the script for creating the Sun Cluster HA for PostgreSQL resource.


    # cd /opt/SUNWscPostgreSQL/util
    
  3. Run the script that creates the PostgreSQL resource.


    # ksh ./pgs_register -f /myplace/pgs_config
    

    If you omit the —f option, the file /opt/SUNWscPostgreSQL/util/pgs_config will be used.

  4. Bring the PostgreSQL resource online.


    # clresource enable postgres-rs
    

ProcedureHow to Modify Parameters in the Sun Cluster HA for PostgreSQL Manifest

Perform this task to change parameters in the Sun Cluster HA for PostgreSQL manifest and to validate the parameters in the failover zone. Parameters for the Sun Cluster HA for PostgreSQL manifest are stored as properties of the SMF service. To modify parameters in the manifest, change the related properties in the SMF service then validate the parameter changes.

  1. Become superuser or assume a role that provides solaris.cluster.modify and solaris.cluster.admin RBAC authorizations on the zones console.

  2. Change the Solaris Service Management Facilities (SMF) properties for the Sun Cluster HA for PostgreSQL manifest.


    # svccfg svc:/application/sczone-agents:resource
    

    For more information, see the svccfg(1M) man page.

  3. Validate the parameter changes.


    # /opt/SUNWscPostgreSQL/bin/control_pgs validate resource
    

    Messages for this command are stored in the /var/adm/messages/ directory of the failover zone.

  4. Disconnect from the failover zone's console.

ProcedureHow to Remove a Sun Cluster HA for PostgreSQL Resource From a Failover Zone

  1. Become superuser or assume a role that provides solaris.cluster.modify and solaris.cluster.admin RBAC authorizations.

  2. Disable and remove the resource that is used by the Sun Cluster HA for PostgreSQL data service.


    # clresource disable resource
    # clresource delete resource
    
  3. Log in as superuser to the failover zone's console.

  4. Unregister Sun Cluster HA for PostgreSQL from the Solaris Service Management Facilities (SMF) service.


    # /opt/SUNWscPostgreSQL/util/pgs_smf_remove -f filename
    
    -f

    Specifies the configuration file name.

    filename

    The name of the configuration file that you used to register Sun Cluster HA for PostgreSQL with the SMF service.


    Note –

    If you no longer have the configuration file that you used to register Sun Cluster HA for PostgreSQL with the SMF service, create a replacement configuration file:

    1. Make a copy of the default file, /opt/SUNWscPostgreSQL/util/pgs_config.

    2. Set the ZONE and RS parameters with the values that are used by the data service.

    3. Run the pgs_smf_remove command and use the -f option to specify this configuration file.


  5. Disconnect from the failover zone's console.

Verifying the Sun Cluster HA for PostgreSQL Installation and Configuration

After you install, register, and configure Sun Cluster HA for PostgreSQL, verify this installation and configuration to determine whether the Sun Cluster HA for PostgreSQL data service makes your PostgreSQL database highly available.

ProcedureHow to Verify the Sun Cluster HA for PostgreSQL Installation and Configuration

  1. Become superuser on a cluster node that is to host the PostgreSQL component.

  2. Ensure that all the PostgreSQL resources are online.

    For each resource, perform the following steps:

    1. Determine whether the resource is online.


      # clresource status postgres-rs
      
    2. If the resource is not online, bring the resource online.


      # clresource enable postgres-rs
      
  3. Switch the resource group to another cluster node, such as node2.


    # clresourcegroup switch-h node2 postgres-rg
    
  4. Confirm that the resource is now online on node2.


    # clresource status  postgres-rs
    

Tuning the Sun Cluster HA for PostgreSQL Fault Monitor

The Sun Cluster HA for PostgreSQL fault monitor verifies that the data service is running in a healthy condition.

A Sun Cluster HA for PostgreSQL fault monitor is contained in each resource that represents the PostgreSQL instance. You created these resources when you registered and configured Sun Cluster HA for PostgreSQL. For more information, see Registering and Configuring Sun Cluster HA for PostgreSQL.

System properties and extension properties of the PostgreSQL resources control the behavior of the fault monitor. The default values of these properties determine the preset behavior of the fault monitor. Because the preset behavior should be suitable for most Sun Cluster installations, tune the Sun Cluster HA for PostgreSQL fault monitor only if you need to modify this preset behavior.

Tuning the Sun Cluster HA for PostgreSQL fault monitor involves the following tasks:

The fault monitor Sun Cluster HA for PostgreSQL differentiates between connection problems and definitive application failures. The value of NOCONRET in the PostgreSQL parameter file specifies the return code for connection problems. This value results in a certain amount of ignored consecutive failed probes as long as they all return the value of NOCONRET. The first successful probe reverts this “failed probe counter” back to zero. The maximum number of failed probes is calculated as100 / NOCONRET. A definitive application failure will result in an immediate restart or failover.

The definition of the return value NOCONRET defines one of two behaviors for failed database connections of a PostgreSQL resource.

  1. Retry the connection to the test database several times before considering the PostgreSQL resource as failed and triggering a restart or failover.

  2. Complain at every probe that the connection to the test database failed. No restart or failover will be triggered.

To achieve either of these behaviors, you need to consider the standard resource properties retry_interval and thorough_probe_interval.

The value 100/NOCONRET defines the maximum number of retries for the probe in the case of a failed connection.

Assume that the following resource parameters are set:

If you encounter, for example, a shortage of available database sessions for 7 minutes, you will see 7 complaints in /var/adm/messages, but no resource restart. If the shortage lasts 10 minutes, you will have a restart of the PostgreSQL resource after the 10th probe.

If you do not want a resource restart in the previous example, set the value of NOCONRET=10 to 5 or less.

For more information, see Tuning Fault Monitors for Sun Cluster Data Services in Sun Cluster Data Services Planning and Administration Guide for Solaris OS.

Operation of the Sun Cluster HA for PostgreSQL Parameter File

The Sun Cluster HA for PostgreSQL resources use a parameter file to pass parameters to the start, stop, and probe commands. Changes to these parameters take effect at least at every restart or enabling, disabling of the resource.

Changing one of the following parameters, takes effect at the next probe of the PostgreSQL resource:


Note –

A false change of the parameters with an enabled PostgreSQL resource might result in an unplanned service outage. Therefore, disable the PostgreSQL resource first, execute the change, and then re-enable the resource.


Operation of the Fault Monitor for Sun Cluster HA for PostgreSQL

The fault monitor for Sun Cluster HA for PostgreSQL ensures that all the requirements for the zone boot component to run are met:

Debugging Sun Cluster HA for PostgreSQL

Sun Cluster HA for PostgreSQL has a file named config that enables you to activate debugging for PostgreSQL resources. This file is in the /opt/SUNWscPostgreSQL/etc directory.

ProcedureHow to Activate Debugging for Sun Cluster HA for PostgreSQL

  1. Determine whether you are in a global zone or in a failover zone configuration.

    If your operating system is Solaris 10 and your PostgreSQL resource is dependent on a Solaris Container boot component resource, you are in a failover zone configuration. In any other case, especially on a Solaris 9 system , you are in a global zone configuration.

  2. Determine whether debugging for Sun Cluster HA for PostgreSQL is active.


    # grep daemon /etc/syslog.conf
    *.err;kern.debug;daemon.notice;mail.crit        /var/adm/messages
    *.alert;kern.err;daemon.err                     operator
    #

    If debugging is inactive, daemon.notice is set in the file /etc/syslog.conf of the appropriate zone.

  3. If debugging is inactive, edit the /etc/syslog.conf file in the appropriate zone to change daemon.notice to daemon.debug.

  4. Confirm that debugging for Sun Cluster HA for PostgreSQL is active.

    If debugging is active, daemon.debug is set in the file /etc/syslog.conf.


    # grep daemon /etc/syslog.conf
    *.err;kern.debug;daemon.debug;mail.crit        /var/adm/messages
    *.alert;kern.err;daemon.err                    operator
    #
  5. Restart the syslogd daemon in the appropriate zone.

    • If your operating system is Solaris 9, type:


      # pkill -1 syslogd
      
    • If your operating system is Solaris 10, type:


      # svcadm refresh svc:/system/system-log:default
      
  6. Edit the /opt/SUNWsczone/sczbt/etc/config file to change the DEBUG= variable according to one of the examples:

    • DEBUG=ALL

    • DEBUG=resource name

    • DEBUG=resource name,resource name, ...


    # cat /opt/SUNWscPostgreSQL/etc/config
    #
    # Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
    # Use is subject to license terms.
    #
    # Usage:
    #       DEBUG=<RESOURCE_NAME> or ALL
    #
    DEBUG=ALL
    #

    Note –

    To deactivate debugging, repeat step 1 to 6, changing daemon.debug to daemon.notice and changing the DEBUG variable to DEBUG=.