forked from chaos/genders
-
Notifications
You must be signed in to change notification settings - Fork 0
/
TUTORIAL
291 lines (230 loc) · 11.2 KB
/
TUTORIAL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
Genders
Jim Garlick
High Performance Computing Systems Group
Livermore Computing
Lawrence Livermore National Laboratory
June 19, 2000
(Revised by Albert Chu - May 2003, April 2004)
(Revised by Ben Casses - July 2015)
------------------------------------------------------------------------
NOTE: This document is part of the "Genders" software package,
approved by LLNL for public release. Please see the DISCLAIMER file
distributed with the package for restrictions.
------------------------------------------------------------------------
Introduction
Genders is a simple concept that has been extended to address configuration
management issues that arise on MPP clusters[1]. The basic concept is that a
genders file containing a list of node names and their attributes is
replicated on each node in a cluster. By representing the configuration of
an MPP in this file, scripts and rdist Distfiles that might otherwise
contain hard-coded node lists, can be generalized to work with different
configurations of the same cluster, and even with multiple clusters.
The framework has proven to be useful on clusters ranging in size from the
ASCI Blue-Pacific SST system at 1464 nodes, to collections of two or three
workstations.
Basic Operation
This section describes the formats of the genders file and the nodeattr
command. The genders file, briefly described in the introduction, contains
a list of node names and attributes. The genders file is typically found
in /etc (on Linux when installed from the genders RPM) or /admin/etc (on
other systems).
Genders Format
Each line of the genders file may have one of the following formats. See
the section "Host Ranges" below for most information on host ranges.
nodename attr[=value],attr[=value],...
nodename1,nodename2,... attr[=value],attr[=value],...
nodenames[A-B] attr[=value],attr[=value],...
The nodename(s) is the shortened[2] hostname of a node. This is followed by
any number of spaces or tabs, and then the comma-separated list of attributes,
each of which can optionally have a value. The substitution string "%n" can
be used in an attribute value to represent the nodename. Nodenames can be
listed on multiple lines, so a node's attributes can be specified on multiple
lines. However, no single node may have duplicate attributes.
There must be no spaces embedded in the attribute list and there is
no provision for continuation lines. Commas and equal characters are special
and cannot appear in attribute names or their values. Comments are prefixed
with the hash chracter (#) and can appear anywhere in the file. The active
genders file is typically found at /etc/genders or /admin/etc/genders.
Here is an example genders file from a small 16-node linux cluster:
# slc cluster genders file
slci,slcj,slc[0-15] eth2=e%n,cluster=slc,all
slci passwdhost
slci,slcj management
slc[1-15] compute
Host Ranges
As noted in section above, the genders database accepts ranges of
nodenames in the general form: prefix[n-m,l-k,...], where n < m and l <
k, etc., as an alternative to explicit lists of nodenames.
This range syntax is meant only as a convenience on clusters with a
prefixNN naming convention and specification of ranges should not be
considered necessary -- the list foo1,foo9 could be specified as such,
or by the range foo[1,9].
Some examples of range usage follow:
foo01,foo02,foo03,foo04,foo05: foo[01-05]
foo3,foo7,foo9,foo11: foo[3,7,9-11]
fooi,fooj,foo0,foo1,foo2: fooi,fooj,foo[0-2]
Host ranges with suffixes, i.e. foo[0-2]x, are generally supported, but behavior
may differ.
Nodeattr Usage
A program called nodeattr is used to query data in the genders file. Because
the genders file is replicated on all nodes in a cluster, this query is a
local operation, not dependent on the network. Nodeattr is invoked as
follows:
nodeattr [-f genders] [-q | -c | -n | -s] [-r] attr[=val]
nodeattr [-f genders] [-v] [node] attr[=val]
nodeattr [-f genders] -l [node]
nodeattr [-f genders] -k
The -f option specifies a genders file path other than the default.
The -q, -c, -n, or -s options followed by an attribute name cause a list of
nodes having the specified attribute to be printed on stdout, formatted
according to the option specified: -q (default) is host range, -c is
comma-separated, -n is newline separated, and -s is space separated.
If none of the formatting options are specified, nodeattr returns a zero
value if the local node has the specified attribute, else nonzero. The -v
option causes any value associated with the attribute to go to stdout. If a
node name is specified before the attribute, it is queried instead of the
local node.
The -l option is used to generate a list of attributes for a particular
node. If no node is listed, all attributes appearing in the genders file
will be listed.
The -k option checks the genders file for proper formatting. Information
about improper formatting will be output to standard error.
Nodeattr can usually be found in /usr/bin (Linux RPM) or /admin/scripts
(other systems).
Programming with Genders
Three different APIs have been developed that allow programmers to parse
and query the genders file. "libgenders" is a C API which can be linked
by including genders.h and linking the library libgenders. "Libgenders"
is a Perl module developed with Perl extensions. "Genders" is another
Perl modules, but offers a more traditional Perl API than "Libgenders."
The reader can learn more about these libraries by reading the manpages
libgenders(3), Libgenders(3), and Genders(3).
Example: Rc Script
The nodeattr command can enable a single script to behave differently
depending on the role or gender of the node it is executing on, simplifying
configuration management of the MPP. For example, all nodes in an MPP
could have the same rc.local file:
#!/bin/sh
if nodeattr raid; then
initialize_raid
fi
if nodeattr login;
then sshd
fi
...
If the node has "raid" in its attribute list, it would execute
initialize_raid; if it had "login" in its attribute list, it would start the
secure shell daemon. This technique is simpler and less prone to failure
than adding code to test for "clues" to a nodes function, such as the
existence of a RAID device in /dev or a different set of installed products
on a login node. Further, changing the role of a node does not require
a laborious audit of scripts; one simply changes the genders file and
all genders-enabled scripts change their behavior.
Attribute values might be used to store node configuration information such
as a node's default IP route. For example, the node may have an attribute:
iprouter=big-rtr.llnl.gov
and rc script could extract this value and pass it to the route command:
route add net default `nodeattr -v iprouter`
Example: Host Lists
Host lists are commonly needed on MPP's to set up parallel jobs or to run
system administration commands on particular sets of nodes. In the following
example, nodeattr generates a newline-separated list of nodes with the login
attribute to pass to the fping parallel ping command:
fping `nodeattr -c login`
Batch system configurations typically need lists of nodes that belong to
batch queues. These might be generated by assigning nodes belonging to a
particular queue an attribute in the genders file and then using nodeattr to
generate the batch configuration. For example, an NQS manager host might get
its configuration as follows, assuming the nqsmgr and nqscompute attributes
are appropriately assigned in the genders file:
#!/bin/sh
#
# Configure queues on the nqsmgr node.
#
if nodeattr nqsmgr; then
# All nodes with the nqscompute attribute will be B queue destinations.
# Make a comma-separated list of B@host destinations.
for host in `nodeattr -n nqscompute`; do
CPU_QUEUES=${CPU_QUEUES}B@${host},
done
CPU_QUEUES=`echo $CPU_QUEUES|sed 's/,$//'`
echo Adding manager queues
qmgr << EOT
set log_file /var/spool/nqs/log
set shell_strategy fixed = (/bin/sh)
set default destination_retry wait 1
create pipe_queue X priority = 10 \
server = (/usr/lib/nqs/pipeclient) \
destination = ($CPU_QUEUES)
run_limit = 1
set default batch_request queue X
enable queue X
start queue X
exit
EOT
fi
#
# Configure queues on the nqscompute nodes.
#
if nodeattr nqscompute; then
echo Adding compute queues
qmgr << EOT2
set log_file /var/spool/nqs/log
set shell_strategy fixed = (/bin/sh)
create batch_queue A priority=10
create pipe_queue B priority=10 \
server=(/usr/lib/nqs/pipeclient) \
destination=(A) run_limit=1
enable queue A
enable queue B
start queue A
start queue B
exit
EOT2
fi
exit 0
Example: nqs_mknmap
The following script uses the Genders library to get a list of all nodes
in the cluster. It then adds them to the NMAP database used by NQS:
#!/usr/bin/perl
#
# $Id: TUTORIAL,v 1.9 2004-11-13 19:58:09 achu Exp $
# $Source: /g/g0/achu/temp/genders-cvsbackup-full/genders/TUTORIAL,v $
#
use Genders;
$prog = "nqs_mknmap";
$path_nmapmgr = "/usr/bin/nmapmgr";
$path_nmapdir = "/etc/nmap";
if (opendir(DIR, $path_nmapdir)) {
foreach $file (grep(!/^\.\.?$/, readdir(DIR))) {
unlink("$path_nmapdir/$file");
}
closedir(DIR);
}
if (! -d $path_nmapdir) {
mkdir($path_nmapdir, 0755);
}
if (open(PIPE, "|$path_nmapmgr")) {
printf PIPE ("create\n");
$i = 0;
$obj = Genders->new();
foreach $node ($obj->getnodes()) {
printf PIPE ("add mid %d %s\n", $i, $node);
$i++;
}
printf PIPE ("exit\n");
close(PIPE);
} else {
printf STDERR ("%s: could not exec $path_nmap_mgr\n", $prog);
exit(1);
}
exit(0);
------------------------------------------------------------------------
[1] Here a cluster is a collection of nodes that are administered as a unit,
where each node runs its own UNIX operating system image.
[2] This should be the hostname as reported by the hostname -s command.
Names for other network interfaces on the same node do not appear in the
genders file.
------------------------------------------------------------------------
$Id: TUTORIAL,v 1.9 2004-11-13 19:58:09 achu Exp $
$Source: /g/g0/achu/temp/genders-cvsbackup-full/genders/TUTORIAL,v $