This book provides guidelines for creating a resource type for a software application, such as Oracle®, Sun JavaTM System Web Server (formerly Sun ONE Web Server), or DNS. As such, this book is intended for developers of resource types.
This chapter provides an overview of the concepts that you need to understand to develop a data service. This chapter covers the following topics:
This book uses the terms resource type and data service interchangeably. The term agent, though rarely used in this book, is equivalent to resource type and data service.
The Sun Cluster system enables applications to be run and administered as highly available and scalable resources. The Resource Group Manager (RGM) provides the mechanism for high availability and scalability. The following elements form the programming interface to this facility:
The Data Service Development Library (DSDL), a set of library functions that encapsulates the low-level API and process-management functionality at a higher level. The DSDL adds some additional functionality to ease the writing of callback methods. These functions are implemented in the libdsdev.so library.
SunPlex Agent Builder, which is described in Chapter 9, SunPlex Agent Builder, is a tool in the Sun Cluster package that automates the process of creating a data service. Agent Builder generates data service code in either C (by using DSDL functions to write the callback methods) or in the Korn (ksh) shell command language (by using low-level API commands to write the callback methods).
The RGM runs as a daemon on each cluster node and automatically starts and stops resources on selected nodes according to preconfigured policies. The RGM makes a resource highly available in the event of a node failure or reboot by stopping the resource on the affected node and starting it on another node. The RGM also automatically starts and stops resource-specific monitors. These monitors detect resource failures and relocate failing resources onto other nodes or monitor other aspects of resource performance.
The RGM supports both failover resources, which can be online on only one node at a time, and scalable resources, which can be online on multiple nodes simultaneously.
The RGM handles three major kinds of interrelated objects: resource types, resources, and resource groups. One way to introduce these objects is by means of an example, as follows.
You implement a resource type, ha-oracle, that makes an existing Oracle DBMS application highly available. An end user defines separate databases for marketing, engineering, and finance, each of which is a resource of type ha-oracle. The cluster administrator places these resources in separate resource groups so that they can run on different nodes and fail over independently. You create a second resource type, ha-calendar, to implement a highly available calendar server that requires an Oracle database. The cluster administrator places the resource for the finance calendar into the same resource group as the finance database resource so that both resources run on the same node and fail over together.
A software application to be run in the cluster
Control programs that are used as callback methods by the RGM to manage the application as a cluster resource
A set of properties that form part of the static configuration of a cluster
The RGM uses resource type properties to manage resources of a particular type.
In addition to a software application, a resource type can represent other system resources, such as network addresses.
You specify the properties for the resource type and set property values in a resource type registration (RTR) file. The RTR file follows the format that is described in Setting Resource and Resource Type Properties and in the rt_reg(4) man page. See also Defining the Resource Type Registration File for a description of a sample RTR file.
Resource Type Properties provides a list of the resource type properties.
The cluster administrator installs and registers the resource type implementation and underlying application on a cluster. The registration procedure enters into the cluster configuration the information from the RTR file. The Sun Cluster Data Services Planning and Administration Guide for Solaris OS describes the procedure for registering a data service.
A resource inherits the properties and values of its resource type. In addition, you can declare resource properties in the RTR file. Resource Properties contains a list of resource properties.
The cluster administrator can change the values of particular properties depending on how the properties are specified in the RTR file. For example, property definitions can specify a range of allowable values. Property definitions can also specify when the property is tunable: never, any time, at creation (when the resource is added to the cluster), or when the resource is disabled. Within these specifications, the cluster administrator can make changes to properties by using administration commands.
The cluster administrator can create many resources of the same type, with each resource having its own name and set of property values, so that more than one instance of the underlying application can run in the cluster. Each instantiation requires a unique name within the cluster.
Each resource must be configured in a resource group. The RGM brings all resources in a group online and offline together on the same node. When the RGM brings a resource group online or offline, it runs callback methods on the individual resources in the group.
The nodes on which a resource group is currently online are called its primaries or primary nodes. A resource group is mastered by each of its primaries. Each resource group has an associated Nodelist property that identifies all potential primaries or masters of the resource group. The cluster administrator sets the Nodelist property.
A resource group also has a set of properties. These properties include configuration properties that can be set by the cluster administrator and dynamic properties, set by the RGM, that reflect the active state of the resource group.
The RGM defines two types of resource groups: failover and scalable. A failover resource group can be online on one node only at any time while a scalable resource group can be online on multiple nodes simultaneously. The RGM provides a set of properties to support the creation of each type of resource group. See Transferring a Data Service to a Cluster and Implementing Callback Methods for details about these properties.
Resource Group Properties contains a list of resource group properties.
The Resource Group Manager (RGM) is implemented as a daemon, rgmd, that runs on each member node of a cluster. All of the rgmd processes communicate with each other and act as a single cluster-wide facility.
The RGM supports the following functions:
Whenever a node boots or crashes, the RGM attempts to maintain the availability of all managed resource groups by automatically bringing them online on correct masters.
If a particular resource fails, its monitor program can request that the resource group be restarted on the same master or switched to a new master.
The cluster administrator can issue an administrative command to request one of the following actions:
Change mastery of a resource group.
Enable or disable a particular resource within a resource group.
Create, delete, or modify a resource type, a resource, or a resource group.
Whenever the RGM activates configuration changes, it coordinates its actions across all member nodes of the cluster. This kind of activity is known as a reconfiguration. To effect a state change on an individual resource, the RGM runs a resource type-specific callback method on that resource.
The Sun Cluster framework uses a callback mechanism to provide communication between a data service and the RGM. The framework defines a set of callback methods, including their arguments and return values, and the circumstances under which the RGM calls each method.
You create a data service by coding a set of individual callback methods and implementing each method as a control program that the RGM can call. That is, the data service does not consist of a single executable, but a number of executable scripts (ksh) or binaries (C), each of which the RGM can call directly.
Callback methods are registered with the RGM through the RTR file. In the RTR file you identify the program for each method that you have implemented for the data service. When a cluster administrator registers the data service on a cluster, the RGM reads the RTR file, which provides the identity of the callback programs and other information.
The only required callback methods for a resource type are a start method (Start or Prenet_start) and a stop method (Stop or Postnet_stop).
The callback methods can be grouped into the following categories:
Control and initialization methods
The Start and Stop methods start and stop resources in a group that is being brought online or offline.
The Init, Fini, and Boot methods execute initialization and termination code on resources.
Administrative support methods
The Validate method verifies properties that are set by administrative action.
The Update method updates the property settings of an online resource.
Prenet_start and Postnet_stop perform special startup or shutdown operations before network addresses in the same resource group are configured to go up or after they are configured to go down.
Monitor control methods
Monitor_start and Monitor_stop start or stop the monitor for a resource.
Monitor_check assesses the reliability of a node before a resource group is moved to the node.
See Chapter 3, Resource Management API Reference and the rt_callbacks(1HA) man page for more information about the callback methods. Also see Chapter 5, Sample Data Service and Chapter 8, Sample DSDL Resource Type Implementation for callback methods in sample data services.
For writing data service code, the resource management architecture provides a low-level or base API, a higher-level library that is built on top of the base API, and SunPlex Agent Builder, a tool that automatically generates a data service from basic input that you provide.
The Resource Management API (RMAPI) provides a set of low-level functions that enable a data service to access information about the resource types, resources, and resource groups in the system, to request a local restart or failover, and to set the resource status. You access these functions through the libscha.so library. The RMAPI provides these callback methods both in the form of shell commands and in the form of C functions. See the scha_calls(3HA) man page and Chapter 3, Resource Management API Reference for more information about the RMAPI functions. Also see Chapter 5, Sample Data Service for examples of how to use these functions in sample data service callback methods.
Built on top of the RMAPI is the Data Service Development Library (DSDL), which provides a higher-level integrated framework while retaining the underlying method-callback model of the RGM. The libdsdev.so library contains the DSDL functions. The DSDL brings together various facilities for data service development, including the following:
libscha.so. The low-level resource management APIs.
hatimerun. A facility for running programs under a timeout. See the hatimerun(1M) man page.
For the majority of applications, the DSDL provides most or all of the functionality you need to build a data service. Note, however, that the DSDL does not replace the low-level API but encapsulates and extends it. In fact, many DSDL functions call the libscha.so functions. Likewise, you can directly call libscha.so functions while using the DSDL to code the bulk of your data service.
Agent Builder is a tool that automates the creation of a data service. You input basic information about the target application and the data service to be created. Agent Builder generates a data service, which includes source and executable code (C or Korn shell), a customized RTR file, and a Solaris package.
For most applications, you can use Agent Builder to generate a complete data service with only minor manual changes on your part. Applications with more sophisticated requirements, such as adding validation checks for additional properties, might require work that Agent Builder cannot do. However, even in these cases, you might be able to use Agent Builder to generate the bulk of the code and manually code the rest. At a minimum, you can use Agent Builder to generate the Solaris package for you.
Install a cluster.
Administer a cluster.
Create and configure resources and resource groups.
Configure data services with the Sun Cluster software.
See the Sun Cluster Software Installation Guide for Solaris OS for instructions on how to install SunPlex Manager and how to use SunPlex Manager to install cluster software. SunPlex Manager provides online help for most unique administrative tasks.
You can perform most Sun Cluster administration tasks interactively with the scsetup(1M) utility.
You can administer the following Sun Cluster elements with the scsetup utility:
Device groups and volumes
Private host names
Other cluster properties
You can also perform the following operations with the scsetup utility:
Create a resource group
Add a network resource to a resource group
Add a data service resource to a resource group
Register a resource type
Bring a resource group online or offline
Switchover a resource group
Enable or disable a resource
Change resource group properties
Change resource properties
Remove a resource from a resource group
Remove a resource group
Clear the Stop_failed error flag from a resource
The scrgadm command enables you to view, create, configure, and delete a resource type, a resource group, and the resource objects that are used by the RGM. This command is part of the administrative interface for the cluster, but is not to be used in the same programming context as the application interface that is described in the rest of this chapter. However, scrgadm is the tool for constructing the cluster configuration in which the API operates. Understanding the administrative interface sets the context for understanding the application interface. See the scrgadm(1M) man page for details about the administrative tasks that you can perform with the command.
The scswitch command switches resource groups online and offline on specified nodes. This command also enables or disables a resource or its monitor. See the scswitch(1M) man page for details about the administrative tasks that the command can perform.
The scstat -g command shows the current dynamic state of all resource groups and resources. See the scstat(1M) man page for details about the administrative tasks that the command can perform.