If you do go ZFS, you would probably be better off with either OpenSolaris or FreeBSD. I use ZFS on FreeBSD8 in RAID-Z config, and the flexibility is very nice.
For additional data security, you can set copies=3 on some directory so it would store three copies of each file, on different physical harddrives. If you want RAID-6, you can opt for RAID-Z2, which is advisable if you go beyond 8 drives.
Assuming you need 40TB usable space, that would mean something like:
24 * 2TB = 48TB raw capacity = 44TB RAID-6 overhead = 40,02TiB usable space.
So 24 drives. That means three 8-port controllers, without RAID. For example these may do:
http://www.supermicro.com/products/accessories/addon/AO...
http://www.supermicro.com/products/accessories/addon/AO...
You can connect 8 disks to each of such a controller, which should be under $200.
So price may be:
Computer system = $1000
24 Samsung 5400rpm 2TB = $4392
3 controllers ($150) = $450
Total hardware price = ~$6000
You need 2 of them, so at least $12k. Additional cost may include accessories and and man-hours.
The software part, would include installing the operating system of choice on the separate system drive - a small SSD would be great for reliability/uptime reasons. Then you would use zfs to create a new RAID-Z2 array, like this:
zpool create tank raidz2 { all your data drives here }
If you choose FreeBSD, you should use glabel first:
glabel label disk1 /dev/ad4
glabel label disk2 /dev/ad6
..etc..
then you use ZFS command like this:
zpool create tank raidz2 /dev/label/disk1 /dev/label/disk2 ...
I'm assuming this is a DIY-situation, or are you going for an all-round solution with service packages etc? In that case, you may not have the flexibility to chose ZFS in an optimal configuration.
The fact that you opt for 2 mirrored machines is very good; and ZFS allows you to make incremental backups really easy using snapshots. A small cron-job (script) that runs every night can make a new snapshot and then synchronise from the master server using 'rsync'.
The CIFS access is easy using Samba, the FTP access can be done with either ProFTPd or PureFTPd. Please consider NFS-access too. The server systems should have at least 2/4 cores and would need to be 64-bit since that's more or less required for such a serious ZFS setup. Please allow plenty of memory - this will both speed up I/O due to caching and will allow ZFS to run in full glory. ZFS can use multiple gigabytes during heavy I/O.