Mailinglist Archive: opensuse (2831 mails)

< Previous Next >
Re: [opensuse] Cluster and SuSE
  • From: "Yu Safin" <calanet@xxxxxxxxx>
  • Date: Thu, 27 Jul 2006 12:37:35 -0400
  • Message-id: <ddcadbdb0607270937l5b8356c5tde00f24ddfb91380@xxxxxxxxxxxxxx>
On 7/26/06, Pascal Bleser <pascal.bleser@xxxxxxxxx> wrote:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Yu Safin wrote:
> On 7/22/06, Pascal Bleser <pascal.bleser@xxxxxxxxx> wrote:
>> Yu Safin wrote:
>>> I currently have an application that runs Oracle under one SuSE server
>>> and Java in-house code in another SuSE server.
>>> I was wondering if anybody can suggest a cluster solution so I can
>>> have my Java code duplicated in two+ SuSE servers.
>>
>> What is that in-house Java application ? Running in a servlet container
>> (e.g. Tomcat), an EJB container (e.g. JBoss), ... ?
>>
>> You should consider two things:
>> 1) a cluster software to provide high availability of the cluster nodes
>> themselves (most importantly: heartbeat checking between the nodes +
>> migrating the cluster's IP address (the "VIP")) - I use heartbeat [1]
>> for that, works nicely and necessary RPMs are shipped with SUSE Linux
>>
>> 2) cluster your Java application: you can do that with Tomcat and JBoss
>> (and Weblogic, and Websphere, and Glassfish, and ...)
>>
>> [1] http://www.linux-ha.org/
>>
>>> How about Oracle, can I cluster Oracle to run on two+ servers?
>>> I am trying to achieve not only higher availability but also put to
>>> work some hardware servers I have on the floor collecting dust.
>>
>> You _can_ cluster Oracle, but... you'll have to set up Oracle RAC, which
>> is both very complex *and* very expensive (different license fees).
>
> The Java application is in a JAR that runs on a schedule (batch).

(I'm afraid this is strongly drifting into off-topicness but well..
maybe it's of some interest to others as well ;))
Thank you for putting up with the incomplete information you have
received so far.

How is remoting involved ? I mean, to cluster an application, you need
to have actual points where you can load-balance incoming requests.
My front-end is a WEB interface written in .NET. This has an
interface to my scheduler that submits my Java batch processing.
There will always be only one active in an active/passive fail-over
type of set up.

If you want some help with this, you'll have to give a lot more details
than just "runs on a schedule (batch)".
I apologize for the frustration I might be causing you. I do greatly
appreciate the questions and comments. I will write what I know
towards the end of this note.
Are there any clients ? If so, how do the clients trigger the batch ? Or
is it just triggered e.g. by cron ?
The clients trigger a scheduler via an interface (it is just like
cron). The interface to this scheduler give us a change to decide
when to schedule the request. The on-line user moves on to other
things to do since the processing takes 10+ hours.
What are you looking for, High Availability or Load Balancing ? (or both ?)
Hot standby or parallel processing ?
I am looking at active/passive fail-over. I run under zVM on a
mainframe so I don't need the advantages of two active nodes. I do
need to be able to go from active to passive when something goes wrong
and as automated a fail-over as possible with little impact to my
customers. This is the critical part that I am trying to learn so I
set things up properly. Remember, my Java code (a JAR) makes calls to
Oracle.

If it's a plain Java application that does not run inside an EJB
container (like Jboss) or Servlet container (like Tomcat), then it
becomes more difficult to cluster.
I hear you. Unfortunately there is neither JBoss or Tomcat. It is a
stand-alone JAR.
First off, you have to take care of the replication of the Jar yourself
(i.e. if you deploy a new version of the jar, or modified configuration
files, etc...).
You can either do that "manually" (with rsync, for example) or with a
shared filesystem.
I was thinking of using either unison or rsync. My biggest concern is
the Oracle part of the application.
Shared filesystems are typically very complex and extremely expensive
things (SCSI or FC attached disks that can do DLOCK). Except if you use
a IP and software based solution such as nbd (network block device),
drbd or similar solutions (that are less reliable than physically shared
disks).
both of my active/passive nodes are in the same server under a virtual
machine. This is an almost fault tolerant hardware. Most of my
downtime is caused by negligence or code failures (no hardware). The
disk subsystem is EMC so it is the same for both nodes i.e. it is
external to both nodes.
OCFS2 (Oracle Cluster FileSystem v2) might be an option as well, haven't
tried it myself though (btw, ocfs2 is included on SUSE Linux.. from 10.0
on, AFAICR):
http://oss.oracle.com/projects/ocfs2/
http://www.eweek.com/article2/0,1895,1847510,00.asp
(OCFS2 is not limited to Oracle RAC databases, it can be used as a
software shared filesystem for virtually anything)

Anyhow, I would say that a "manual" solution would be the best option as
its cheap and your application is probably simple enough so you can
handle it that way.
I heard the comment before "money is not an object". However, I am
trying to present all of the options so the decision makers can make
an intelligent choice. I can go with one option RAC and I might get
the money. Next time around a consulant or audit may show that it was
no needed. I am trying to do my due diligence before asking the
decision maker to take my recommendations.

> is there anything similar to RAC in the open-source community?
> what would be missing with linux-ha compared to RAC?

linux-ha has nothing to do with RAC.
I thought they did. Both try to deal with the issue of a failing
node, don't they?

Oracle RAC (Real Application Cluster) is an enterprise option of Oracle
9i and 10g (which, as already said, is *very* expensive).
The most important feature of RAC is that you can effectively have a HA
clustered Oracle database with several nodes.
You can even use every node independently (in parallel).
Oracle RAC knows that it runs in a cluster and that there are several
Oracle database nodes (and workers) that access the database (and shared
filesystem) at the same time. Hence, it has the (extremely complex)
necessary mechanisms to check which node owns a filesystem block,
whether it can write directly to disk or must send the data to the node
that owns the block, etc...
Sorry, totally beyond the scope of this list (I think we're quite
off-topic already ;)), would take half a day to explain the nitty gritty
of how Oracle RAC works.
I agree. We have Sun with Oracle and RAC. Before we jump both feet
into the same configuration again, I am exploring my options. I am
being asked to take an existing aix application without fail-over (no
RAC either) and move it to Linux and to look into fail-over for high
availability. I am going to a mainframe that is costing more than aix
(may be) so money is not my motivator, RAS is more important.

Anyway, I guess it's not an option for you because it's very complex to
set up (even for seasoned Oracle admins), extremely expensive both
because of its licenses and because it requires high-performance (hence,
physical) shared disks (typically Fiber Channel + SAN or JBODs, JBODs
being the cheapest option, starting at 10K USD for the slowest ones).

AFAIK there's nothing comparable to RAC, neither opensource nor
proprietary/commercial.

What comes closest as opensource is MySQL Cluster [1] but I wouldn't bet
my business on it (yet ?). Dunno. I guess it has to mature a little -
it's not like Oracle didn't take several years to have a well-working RAC.
[1] http://www.mysql.com/products/database/cluster/
I agree. I have some MySQL just for proof of concepts. We go Oracle
for the real systems.

The cheapest and simplest option is to move the database on its own
cluster (of two nodes, for example), behind the application cluster.
Instead of having something like RAC that can do failover +
load-balancing at the same time, just set up a hot standby cluster,
where only one of the two database server nodes is active.
YES YES YES, this is what I think I need to explore as an option to RAC.
The other node is passive and will only be switched to when the first
node fails (that's "hot standby").
Use linux-ha (heartbeat) to monitor the database cluster nodes and
perform the takeover.
To keep the database on the passive node in sync, I would recommend
using MySQL with binary replication (master is the active node, slave is
the passive node) - it's very fast and simple to set up (the most
complex thing being the script to perform the slave->master switch when
doing the takeover).
NO NO, I need to switch over and work with Oracle. This is non
negotiable. how can I accomplish a fail-over from an active to a
passive node automatically with just some quick log re-apply for the
missing transactions. this is the key of this entire discussion, in
my mind.

Anyhow, SUSE Linux comes with all the software you'd need:
- - MySQL (including binary replication)
- - heartbeat for doing the cluster monitoring and resource failover
- - rsync to keep the application in sync on both application cluster nodes
- - drbd or nbd if you want cheap shared storage

Hope this helps, but I'm afraid HA clustering is a very complex topic.
The easiest solution to cluster an application is to have it running
inside e.g. Tomcat or JBoss as they take care of most of the ugly stuff
(but not of the database).
But if your application is batch-oriented and only driven by a
scheduling system (like cron, Quartz, ...), then Tomcat or JBoss are of
no help.

cheers


OK, let me explain in more details. We receive data (massive) every
quarter from a lot of Fortune 500 companies. This data is analyzed
and processed into our Oracle database.
Then, our customers (those same Fortune 500 companies) and internal
people need to ensure compliace, completeness and some other things on
the data. They go to our Web site and trigger the analysis they need
to have done. When they do this action on the Web site. They are
hitting .NET code that we wrote in-house. This .NET code will
interface to our scheduler and will schedule the next run for this
request (we check to make sure that the same is not done twice, that
we are not running to many of them concurrently and so on). This
scheduler (similar to cron) will trigger the next time this request
starts to process.
The request is handled by Java (JAR) that gets kicked into action in
batch. It takes about 10 to 12 hours to do its job. It consist of 9
steps. Some of them take a lot of CPU (will take whatever it can get)
and will process 400 Gbytes worth of data with massive deletes and
massive inserts of 300 to 400 thousands rows at a time. I have seen
our aix with 10 CPU's (1.6 GHz each) come to its knees at 2% idle for
hours at time running this batch work.
We can do only one request at a time as you can tell.
If I am still not giving you the full picture, please let me know and
I will elaborate.
- --
-o) Pascal Bleser http://linux01.gwdg.de/~pbleser/
/\\ <pascal.bleser@xxxxxxxxx> <guru@xxxxxxxxxxx>
_\_v The more things change, the more they stay insane.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2 (GNU/Linux)

iD8DBQFEx+hLr3NMWliFcXcRAmk5AKCLd2LsUPYoa90L2t5dGqW9m+bqAACgpJ0A
HFSbp/o5Iy0Zz5bKKCt/SfY=
=2O2u
-----END PGP SIGNATURE-----

---------------------------------------------------------------------
To unsubscribe, e-mail: opensuse-unsubscribe@xxxxxxxxxxxx
For additional commands, e-mail: opensuse-help@xxxxxxxxxxxx



---------------------------------------------------------------------
To unsubscribe, e-mail: opensuse-unsubscribe@xxxxxxxxxxxx
For additional commands, e-mail: opensuse-help@xxxxxxxxxxxx

< Previous Next >