Have you ever taken a look at rdiff-backup?
We've used it to synchronize over 4 million files from one Ubuntu file server to another without any issues. One very nice feature of rdiff-backup is that is keeps both a mirror copy and a differential copy (you can configure set how long). This comes in handy when you're backing up things like source code, images that change, etc as you can always restore the file to a point in time.
Here's the description from their website:
rdiff-backup backs up one directory to
another, possibly over a network. The
target directory ends up a copy of the
source directory, but extra reverse
diffs are stored in a special
subdirectory of that target directory,
so you can still recover files lost
some time ago. The idea is to combine
the best features of a mirror and an
incremental backup. rdiff-backup also
preserves subdirectories, hard links,
dev files, permissions, uid/gid
ownership, modification times,
extended attributes, acls, and
resource forks. Also, rdiff-backup can
operate in a bandwidth efficient
manner over a pipe, like rsync. Thus
you can use rdiff-backup and ssh to
securely back a hard drive up to a
remote location, and only the
differences will be transmitted.
Finally, rdiff-backup is easy to use
and settings have sensical defaults.
My second choice would be rsync and a cron job set to however frequent you desire.
JungleDisk / Amazon S3
My third choice (depending on your EXACT needs) would be on offsite backup to Amazon's S3 cloud via JungleDisk or some similar program.
We actually backup over 4 million files from our master Ubuntu file server to a slave Ubuntu file server (same location) via rdiff-backup once every hour.
We then backup once every 6 hours via rsync (or Jungledisk) to the Amazon S3 cloud.
This way we can handle the "easy stuff" with just the master/backup but if something catastrophic were to happen we'd still have the Amazon S3 backup in the cloud.
Hope this gives you some ideas...