Jeff I wanted your opinion about startup.com files in a VMS Cluster environment. I work at a hospital that has a three node cluster consisting of two alpha 8400 and a GS140. Currently we have a "SYSTARTUP_VMS.COM file in a common directory. Some of other startup procedures are in the node specific directories, "SYPAGSWPFILES.COM" for example is in node specific directory for two nodes, and in a common directory for the third node. I understand that this configuration is not good, but the system still boots correctly. The "Open VMS Cluster System" manual recommended "SYSTARTUP_VMS.COM" file should be Node specific with another "COM" file in a common directory for common procedures. Where do you recommended "Startup Command Procedures" be executed from in a cluster environment. Mike from Tallahassee |
Dear Mike from Tallahassee That's a very good question, and you can
get many different answers and opinions on the subject
depending on who you talk to. Mainly, we are talking about
four, possibly five command procedures, all located in
SYS$MANAGER. They are SYCONFIG.COM, SYLOGICALS.COM,
SYPAGSWPFILES.COM, SYSTARTUP_VMS.COM and optionally
SYLOGIN.COM if you have one defined. Concerning your current set up, yes, it
will boot up correctly, but remember, should any node not
find it's SYPAGSWPFILES.COM file in it's specific directory,
it will execute the one in the common root which is tailored
for your third node. But before we go any further, some
background on the topic. In a VMS Cluster the system disk is
constructed such that each boot node sees it's own root of
directories (known as the specific root) and then the common
root (known to all nodes). This is done so that each system
root does not need to duplicate files that all systems
require, for example executable files. Most of the logical names that pertain to
the system disk are what they call "Search lists". This
means they point to two or more places. In the case of these
logical names, for any given root they point to the node's
specific root, then to the common root. So this means
whenever a system file is needed the file system first looks
in the node's specific root, and if the file is not found
there, then it looks in the common root. To look at this
structure enter in the command : $SHOW LOGICAL
SYS$SYSROOT Doing this for each node you will find
that each node has it's own first translation (the specific
root) and they all share the same second translations (the
common root). Now to get to the ROOT of your question
(no pun intended). Which root do you put these files in? My
preference is to put them all into the common root. I'll
tell you why in a moment, but first I'll present reasons for
doing otherwise. First of all, different nodes in a
cluster are typically configured differently hardware wise.
This is a good reason for putting SYCONFIG.COM in the
specific root, and maintaining a separate SYCONFIG.COM file
for each node in your cluster. And certainly if you have an
alternate page and swap device, or secondary page and swap
files, and these are different for each node, one can argue
that the file SYPAGSWPFILES.COM also be placed in the
specific root, and a separate or each node in the cluster.
Finally if your Cluster is known as a Heterogeneous Cluster
instead of a Homogeneous Cluster, which means each node is
vastly different in configuration and use (such as a
different set of users and different purpose like one for
accounting and one for payroll) then you could argue for the
other three files also being placed in the specific
root. Not me! Even if you have all of the above
conditions, I believe it is best to have all of these files
located in the common root, because it makes it so much
easier to maintain and make changes. Imagine if you had a
five node cluster, and you needed to make a change cluster
wide. Would it be easier to change one file, or five? If you
had five files to change, you might make a slight mistake in
one causing a problem that you wouldn't find until a user
complained about it. Or you might even forget to change one
node. It is hard to keep multiple files synchronized with
changes. I manage a 67 node cluster consisting of Alphas and
VAXs, with 4 system disks, and believe me, the larger your
cluster grows, the more important this becomes. If you have one file in one location, you
only make one change, and you can keep a complete history of
all changes in the comment section of the command procedure.
But now you have another problem. If you have one file that
serves all nodes in a cluster, how do you get the one
procedure to do different things based on the particular
node that it is running on, or the particular architecture
of the CPU (VAX or Alpha). Very simple! Use the lexical
function F$GETSYI. This wonderful function can give you all
sorts of great information about the particular node you are
running on, or even about other nodes in your cluster.
Here are two DCL code examples. The first
helps you determine which node you are running on. The
second shows you how to determine what kind of CPU
architecture your are running on. In the first case, if a
new node is added to the cluster, the system is alerted by
an OPCOM message that the command procedure needs to be
edited to handle the new addition. $ $ This way you can easily maintain your
cluster by having fewer files to maintain. If you have multiple system disks in your
cluster, you may want to have some of these files specified
only once in your cluster. If this is true, you still need
to have at least one of these files on each boot disk. They
could, in turn call their equivalent on a master system
disk, but this gives you a single point of failure should
that master system disk go down. So I recommend against
having a single file for a multiple SYSTEM DISK cluster. But
each system disk should have one, and only one version of
the appropriate file in the common root. I hope this helps! Sincerely! Jeff Cameron
$!*** How to determine which node is executing this
procedure
$ NODE = F$GETSYI ("NODENAME")
$ IF (NODE .EQS. "SPOCK") THEN $ GOTO SPOCK
$ IF (NODE .EQS. "KIRK") THEN $ GOTO KIRK
$ IF (NODE .EQS. "MCCOY") THEN $ GOTO MCCOY
$
$ PROCEDURE = F$ENVIRONMENT ("PROCEDURE")
$ REQUEST -
"''node' is not known to file ''procedure'. Please
EDIT."
$ GOTO DONE
$
$SPOCK:
$!*** Put commands specific to node SPOCK here.
$ GOTO DONE
$
$MCCOY:
$!*** Put commands specific to node MCCOY here.
$ GOTO DONE
$
$KIRK:
$!*** Put commands specific to node KIRK here.
$ GOTO DONE
$
$DONE:
$!*** How to determine the CPU architecture
$ ARCH = F$GETSYI ("ARCH_NAME")
$
$ IF (ARCH .EQS. "Alpha")
$ THEN
$ RUN/DETACHED ORDER_PROCESSING_AXP.EXE
$ ELSE
$ ENDIF
$
$ IF (ARCH .EQS. "VAX")
$ THEN
$ RUN/DETACHED ORDER_PROCESSING_VAX.EXE
$ ELSE
$ ENDIF
$
DCL | Utilities | Management | Tips