Author: Nelio Alves Pereira Filho (
nelio@ime.usp.br
)
http://www.ime.usp.br/~nelio
Master
Studies in Computer Science
Clusters
- High Availability
Distributed Adaptative Scheduler
This project was developed to study Distributed Schedulers, and
to implement algorithms to achieve remote scheduling, load balancing and
process migration. The process migration might be manual (called by the user
through the GUI) or automatic (the system itself calls a process migration).
This automatic process migration is used to keep the same load on each node
of the execution cluster, whenever it's possible.
The Scheduler Tasks are centered in one special node (Monitor), and the
Processors (nodes that are willing to execute processes) are active, meaning
that if a node wants to be a Processor, it should contact the Monitor and
make the request.
As it's just a study project, many details were lost, and other assumptions
had to be made. For instance, the load on a node of the cluster is simply
the number of active process it's running; a Process for this scheduler is
an object that implements a special interface. Also, it's not a very robust
system. It's goals where not High Availability and it has several SPOF (Single
Point Of Failures), and other details that might have an unusual behave in
failures.
First of all, you need to unpack the tarball. Just untar it,
and you should get a directory tree with all information you need. The system
was written in Java, and it's very simple to run. You'll only need a JVM (>=
1.2). If you have Ant
installed, just click here
to jump to Ant's section. For simplicity, let's call INSTALL the basedir
of the unpacked tar.
$ export \
CLASSPATH=$CLASSPATH:<INSTALL>/Devel/build/classes
$ rmiregistry &
$ java \
-Djava.rmi.server.codebase=<INSTALL>/Devel/build/classes/
\
-Djava.security.policy=<INSTALL>/Devel/src/sod/util/policy
\
sod.server.Monitor
- Now run the client wherever you want. Make sure that the rmiregistry
is running. Let MONITOR ADDRESS be the host address of where the Monitor is
running.
$ java \
-Djava.rmi.server.codebase=<INSTALL>/Devel/build/classes/
\
-Djava.security.policy=<INSTALL>/Devel/src/sod/util/policy
\
sod.client.ProcessorImpl <MONITOR ADDRESS>
For users using Ant, follow these instructions:
- Set environment variables for ant in file <INSTALL>/Devel/env.properties.
- Get into the build directory for the project:
$ cd <INSTALL>/Devel/build
$ rmiregistry &
$ ant run.server
- Now, just run Processors wherever you want (make sure
rmiregistry is running):
$ ant run.client
You can download the package with the source code, binaries and API documentation
here. Don't expect too much of the API documentation,
it's just a draft. Still the code is the better documentation...
Other information may be found in the API documentations, that is in <INSTALL>/Docs, or can be generated with Ant:
$ ant doc
An important detail about these Processes is that they have a OutputStream
variable called out that should be used for printing information to stdout.
To develop such a process, just extends sod.util.AbstractApplication, and
implement the necessary methods.
The system has 3 packages: sod.server, sod.client and sod.util. The package
sod.exec contains just some demos to test the scheduler and all its components.
This tests are sod.exec.Run1 and sod.util.Run2, which just print numbers
in the stdout.