<p>I would like to make 2 TB or so available via NFS and CIFS. I am looking for a 2 (or more) server solution for high availability and the ability to load balance across the servers if possible. Any suggestions for clustering or high availability solutions?</p>

<p>This is business use, planning on growing to 5-10 TB over next few years. Our facility is almost 24 hours a day, six days a week. We could have 15-30 minutes of downtime, but we want to minimize data loss. I want to minimize 3 AM calls. </p>

<p>We are currently running one server with ZFS on Solaris and we are looking at AVS for the HA part, but we have had minor issues with Solaris (CIFS implementation doesn't work with Vista, etc) that have held us up. </p>

<p>We have started looking at </p>

<ul>
<li>DRDB over GFS (GFS for distributed
lock capability)</li>
<li>Gluster (needs
    client pieces, no native CIFS
    support?)</li>
<li>Windows DFS (doc says only
    replicates after file closes?)</li>
</ul>

<p>We are looking for a "black box" that serves up data.</p>

<p>We currently snapshot the data in ZFS and send the snapshot over the net to a remote datacenter for offsite backup.</p>

<p>Our original plan was to have a 2nd machine and rsync every 10 - 15 min. The issue on a failure would be that ongoing production processes would lose 15 minutes of data and be left "in the middle". They would almost be easier to start from the beginning than to figure out where to pickup in the middle. That is what drove us to look at HA solutions.</p>

[{'answer_id': 80211, 'author': 'David Ackerman', 'author_id': 2504, 'author_profile': 'https://Stackoverflow.com/users/2504', 'pm_score': 0, 'selected': False, 'text': '<p>Are you looking for an "enterprise" solution or a "home" solution?  It is hard to tell from your question, because 2TB is very small for an enterprise and a little on the high end for a home user (especially two servers).  Could you clarify the need so we can discuss tradeoffs?</p>\n'}, {'answer_id': 80212, 'author': 'Sev', 'author_id': 83819, 'author_profile': 'https://Stackoverflow.com/users/83819', 'pm_score': 1, 'selected': False, 'text': '<p>I would recommend <strong>NAS Storage.  (Network Attached Storage).</strong></p>\n\n<p>HP has some nice ones you can choose from.</p>\n\n<p><a href="http://h18006.www1.hp.com/storage/aiostorage.html" rel="nofollow noreferrer">http://h18006.www1.hp.com/storage/aiostorage.html</a></p>\n\n<p>as well as Clustered versions:</p>\n\n<p><a href="http://h18006.www1.hp.com/storage/software/clusteredfs/index.html?jumpid=reg_R1002_USEN" rel="nofollow noreferrer">http://h18006.www1.hp.com/storage/software/clusteredfs/index.html?jumpid=reg_R1002_USEN</a></p>\n'}, {'answer_id': 80218, 'author': 'pjz', 'author_id': 8002, 'author_profile': 'https://Stackoverflow.com/users/8002', 'pm_score': 2, 'selected': False, 'text': '<p>These days 2TB fits in one machine, so you\'ve got options, from simple to complex.  These all presume linux servers:</p>\n\n<ul>\n<li>You can get poor-man\'s HA by setting up two machines and doing a periodic rsync from the main one to the backup.</li>\n<li>You can use <a href="http://www.drbd.org" rel="nofollow noreferrer">DRBD</a> to mirror one from the other at the block level.  This has the disadvantage of being somewhat difficult to expand in the future.</li>\n<li>You can use <a href="http://oss.oracle.com/projects/ocfs2/" rel="nofollow noreferrer">OCFS2</a> to cluster the disks instead, for future expandability.</li>\n</ul>\n\n<p>There are also plenty of commercial solutions, but 2TB is a bit small for most of them these days.</p>\n\n<p>You haven\'t mentioned your application yet, but if hot failover isn\'t necessary, and all you really want is something that will stand up to losing a disk or two, find a NAS that support RAID-5, at least 4 drives, and hotswap and you should be good to go.</p>\n'}, {'answer_id': 80270, 'author': 'bmdhacks', 'author_id': 14032, 'author_profile': 'https://Stackoverflow.com/users/14032', 'pm_score': 0, 'selected': False, 'text': '<p>There\'s two ways to go at this.  The first is to just go buy a SAN or a NAS from Dell or HP and throw money at the problem.  Modern storage hardware just makes all of this easy to do, saving your expertise for more core problems.</p>\n\n<p>If you want to roll your own, take a look at using Linux with DRBD.</p>\n\n<p><a href="http://www.drbd.org/" rel="nofollow noreferrer"><a href="http://www.drbd.org/" rel="nofollow noreferrer">http://www.drbd.org/</a></a></p>\n\n<p>DRBD allows you to create networked block devices.  Think RAID 1 across two servers instead of just two disks.  DRBD deployments are usually done using Heartbeat for failover in case one system dies.</p>\n\n<p>I\'m not sure about load balancing, but you might investigate and see if LVS can be used to load balance across your DRBD hosts:</p>\n\n<p><a href="http://www.linuxvirtualserver.org/" rel="nofollow noreferrer"><a href="http://www.linuxvirtualserver.org/" rel="nofollow noreferrer">http://www.linuxvirtualserver.org/</a></a></p>\n\n<p>To conclude, let me just reiterate that you\'re probably going to save yourself a lot of time in the long run just forking out the money for a NAS.</p>\n'}, {'answer_id': 80473, 'author': 'Community', 'author_id': -1, 'author_profile': 'https://Stackoverflow.com/users/-1', 'pm_score': 0, 'selected': False, 'text': "<p>I assume from the body of your question is you're a business user?  I purchased a 6TB RAID 5 unit from Silicon Mechanics and have it NAS attached and my engineer installed NFS on our servers.  Backups performed via rsync to another large capacity NAS.</p>\n"}, {'answer_id': 80520, 'author': 'pro', 'author_id': 352728, 'author_profile': 'https://Stackoverflow.com/users/352728', 'pm_score': 0, 'selected': False, 'text': '<p>Have a look at Amazon Simple Storage Service (Amazon S3)</p>\n\n<p><a href="http://www.amazon.com/S3-AWS-home-page-Money/b/ref=sc_fe_l_2?ie=UTF8&amp;node=16427261&amp;no=3435361&amp;me=A36L942TSJ2AJA" rel="nofollow noreferrer">http://www.amazon.com/S3-AWS-home-page-Money/b/ref=sc_fe_l_2?ie=UTF8&amp;node=16427261&amp;no=3435361&amp;me=A36L942TSJ2AJA</a></p>\n\n<p>--\nThis may be of interest re. High Availability</p>\n\n<p>Dear AWS Customer:</p>\n\n<p>Many of you have asked us to let you know ahead of time about features and services that are currently under development so that you can better plan for how that functionality might integrate with your applications. To that end, we are excited to share some early details with you about a new offering we have under development here at AWS -- a content delivery service.</p>\n\n<p>This new service will provide you a high performance method of distributing content to end users, giving your customers low latency and high data transfer rates when they access your objects. The initial release will help developers and businesses who need to deliver popular, publicly readable content over HTTP connections. Our goal is to create a content delivery service that:</p>\n\n<p>Lets developers and businesses get started easily - there are no minimum fees and no commitments. You will only pay for what you actually use. \nIs simple and easy to use - a single, simple API call is all that is needed to get started delivering your content. \nWorks seamlessly with Amazon S3 - this gives you durable storage for the original, definitive versions of your files while making the content delivery service easier to use. \nHas a global presence - we use a global network of edge locations on three continents to deliver your content from the most appropriate location.</p>\n\n<p>You\'ll start by storing the original version of your objects in Amazon S3, making sure they are publicly readable. Then, you\'ll make a simple API call to register your bucket with the new content delivery service. This API call will return a new domain name for you to include in your web pages or application. When clients request an object using this domain name, they will be automatically routed to the nearest edge location for high performance delivery of your content. It\'s that simple.</p>\n\n<p>We\'re currently working with a small group of private beta customers, and expect to have this service widely available before the end of the year. If you\'d like to be notified when we launch, please let us know by clicking here.</p>\n\n<p>Sincerely,</p>\n\n<p>The Amazon Web Services Team </p>\n'}, {'answer_id': 85518, 'author': 'ben', 'author_id': 7561, 'author_profile': 'https://Stackoverflow.com/users/7561', 'pm_score': 0, 'selected': False, 'text': '<p>Your best bet maybe to work with experts who do this sort of thing for a living.  These guys are actually in our office complex...I\'ve had a chance to work with them on a similar project I was lead on.</p>\n\n<p><a href="http://www.deltasquare.com/About" rel="nofollow noreferrer">http://www.deltasquare.com/About</a></p>\n'}, {'answer_id': 85606, 'author': 'Tony Dodd', 'author_id': 16465, 'author_profile': 'https://Stackoverflow.com/users/16465', 'pm_score': 3, 'selected': False, 'text': '<p>I\'ve recently deployed hanfs using DRBD as the backend, in my situation, I\'m running active/standby mode, but I\'ve tested it successfully using OCFS2 in primary/primary mode too.  There unfortunately isn\'t much documentation out there on how best to achieve this, most that exists is barely useful at best.  If you do go along the drbd route, I highly recommend joining the drbd mailing list, and reading all of the documentation.  Here\'s my ha/drbd setup and script I wrote to handle ha\'s failures:</p>\n\n<hr>\n\n<p>DRBD8 is required - this is provided by drbd8-utils and drbd8-source. Once these are installed (I believe they\'re provided by backports), you can use module-assistant to install it - m-a a-i drbd8. Either depmod -a or reboot at this point, if you depmod -a, you\'ll need to modprobe drbd.</p>\n\n<p>You\'ll require a backend partition to use for drbd, do not make this partition LVM, or you\'ll hit all sorts of problems. Do not put LVM on the drbd device or you\'ll hit all sorts of problems.</p>\n\n<p>Hanfs1:</p>\n\n<pre><code>\n/etc/drbd.conf\n\nglobal {\n        usage-count no;\n}\ncommon {\n        protocol C;\n        disk { on-io-error detach; }\n}\nresource export {\n        syncer {\n                rate 125M;\n        }\n        on hanfs2 {\n                address         172.20.1.218:7789;\n                device          /dev/drbd1;\n                disk            /dev/sda3;\n                meta-disk       internal;\n        }\n        on hanfs1 {\n                address         172.20.1.219:7789;\n                device          /dev/drbd1;\n                disk            /dev/sda3;\n                meta-disk       internal;\n       }\n}</code></pre>\n\n<p>Hanfs2\'s /etc/drbd.conf:</p>\n\n<p><pre><code>\nglobal {\n        usage-count no;\n}\ncommon {\n        protocol C;\n        disk { on-io-error detach; }\n}\nresource export {\n        syncer {\n                rate 125M;\n        }\n        on hanfs2 {\n                address         172.20.1.218:7789;\n                device          /dev/drbd1;\n                disk            /dev/sda3;\n                meta-disk       internal;\n        }\n        on hanfs1 {\n                address         172.20.1.219:7789;\n                device          /dev/drbd1;\n                disk            /dev/sda3;\n                meta-disk       internal;\n       }\n}</pre></code></p>\n\n<p>Once configured, we need to bring up drbd next.</p>\n\n<pre>\ndrbdadm create-md export\ndrbdadm attach export\ndrbdadm connect export\n</pre>\n\n<p>We must now perform an initial synchronization of data - obviously, if this is a brand new drbd cluster, it doesn\'t matter which node you choose.</p>\n\n<p></p>\n\n<p>Once done, you\'ll need to mkfs.yourchoiceoffilesystem on your drbd device - the device in our config above is /dev/drbd1. <a href="http://www.drbd.org/users-guide/p-work.html" rel="noreferrer">http://www.drbd.org/users-guide/p-work.html</a> is a useful document to read while working with drbd.</p>\n\n<p>Heartbeat</p>\n\n<p>Install heartbeat2. (Pretty simple, apt-get install heartbeat2).</p>\n\n<p>/etc/ha.d/ha.cf on each machine should consist of:</p>\n\n<p>hanfs1:\n<pre><code>\nlogfacility local0\nkeepalive 2\nwarntime 10\ndeadtime 30\ninitdead 120</p>\n\n<p>ucast eth1 172.20.1.218</p>\n\n<p>auto_failback no</p>\n\n<p>node hanfs1\nnode hanfs2\n</pre></code></p>\n\n<p>hanfs2:</p>\n\n<p><pre><code>\nlogfacility local0\nkeepalive 2\nwarntime 10\ndeadtime 30\ninitdead 120</p>\n\n<p>ucast eth1 172.20.1.219</p>\n\n<p>auto_failback no</p>\n\n<p>node hanfs1\nnode hanfs2\n</pre></code></p>\n\n<p>/etc/ha.d/haresources should be the same on both ha boxes:</p>\n\n<pre>\nhanfs1 IPaddr::172.20.1.230/24/eth1\nhanfs1  HeartBeatWrapper</pre>\n\n<p>I wrote a wrapper script to deal with the idiosyncracies caused by nfs and drbd in a failover scenario. This script should exist within /etc/ha.d/resources.d/ on each machine.</p>\n\n<p><pre><code></p>\n\n<h1>!/bin/bash</h1>\n\n<h1>heartbeat fails hard.</h1>\n\n<h1>so this is a wrapper</h1>\n\n<h1>to get around that stupidity</h1>\n\n<h1>I\'m just wrapping the heartbeat scripts, except for in the case of umount</h1>\n\n<h1>as they work, mostly</h1>\n\n<p>if [[ -e /tmp/heartbeatwrapper ]]; then\n    runningpid=$(cat /tmp/heartbeatwrapper)\n    if [[ -z $(ps --no-heading -p $runningpid) ]]; then\n        echo "PID found, but process seems dead.  Continuing."\n    else<br>\n        echo "PID found, process is alive, exiting."<br>\n        exit 7<br>\n    fi<br>\nfi                                                            </p>\n\n<p>echo $$ > /tmp/heartbeatwrapper</p>\n\n<p>if [[ x$1 == "xstop" ]]; then</p>\n\n<p>/etc/init.d/nfs-kernel-server stop #>/dev/null 2>&amp;1</p>\n\n<h1>NFS init script isn\'t LSB compatible, exit codes are 0 no matter what happens.</h1>\n\n<h1>Thanks guys, you really make my day with this bullshit.</h1>\n\n<h1>Because of the above, we just have to hope that nfs actually catches the signal</h1>\n\n<h1>to exit, and manages to shut down its connections.</h1>\n\n<h1>If it doesn\'t, we\'ll kill it later, then term any other nfs stuff afterwards.</h1>\n\n<h1>I found this to be an interesting insight into just how badly NFS is written.</h1>\n\n<p>sleep 1</p>\n\n<pre><code>#we don\'t want to shutdown nfs first!\n#The lock files might go away, which would be bad.\n\n#The above seems to not matter much, the only thing I\'ve determined\n#is that if you have anything mounted synchronously, it\'s going to break\n#no matter what I do.  Basically, sync == screwed; in NFSv3 terms.      \n#End result of failing over while a client that\'s synchronous is that   \n#the client hangs waiting for its nfs server to come back - thing doesn\'t\n#even bother to time out, or attempt a reconnect.                        \n#async works as expected - it insta-reconnects as soon as a connection seems\n#to be unstable, and continues to write data.  In all tests, md5sums have   \n#remained the same with/without failover during transfer.                   \n\n#So, we first unmount /export - this prevents drbd from having a shit-fit\n#when we attempt to turn this node secondary.                            \n\n#That\'s a lie too, to some degree. LVM is entirely to blame for why DRBD\n#was refusing to unmount.  Don\'t get me wrong, having /export mounted doesn\'t\n#help either, but still.                                                     \n#fix a usecase where one or other are unmounted already, which causes us to terminate early.\n\nif [[ "$(grep -o /varlibnfs/rpc_pipefs /etc/mtab)" ]]; then                                 \n    for ((test=1; test &lt;= 10; test++)); do                                                  \n        umount /export/varlibnfs/rpc_pipefs  &gt;/dev/null 2&gt;&amp;1                                \n        if [[ -z $(grep -o /varlibnfs/rpc_pipefs /etc/mtab) ]]; then                        \n            break                                                                           \n        fi                                                                                  \n        if [[ $? -ne 0 ]]; then                                                             \n            #try again, harder this time                                                    \n            umount -l /var/lib/nfs/rpc_pipefs  &gt;/dev/null 2&gt;&amp;1                              \n            if [[ -z $(grep -o /varlibnfs/rpc_pipefs /etc/mtab) ]]; then                    \n                break                                                                       \n            fi                                                                              \n        fi                                                                                  \n    done                                                                                    \n    if [[ $test -eq 10 ]]; then                                                             \n        rm -f /tmp/heartbeatwrapper                                                         \n        echo "Problem unmounting rpc_pipefs"                                                \n        exit 1                                                                              \n    fi                                                                                      \nfi                                                                                          \n\nif [[ "$(grep -o /dev/drbd1 /etc/mtab)" ]]; then                                            \n    for ((test=1; test &lt;= 10; test++)); do                                                  \n        umount /export  &gt;/dev/null 2&gt;&amp;1                                                     \n        if [[ -z $(grep -o /dev/drbd1 /etc/mtab) ]]; then                                   \n            break                                                                           \n        fi                                                                                  \n        if [[ $? -ne 0 ]]; then                                                             \n            #try again, harder this time                                                    \n            umount -l /export  &gt;/dev/null 2&gt;&amp;1                                              \n            if [[ -z $(grep -o /dev/drbd1 /etc/mtab) ]]; then                               \n                break                                                                       \n            fi                                                                              \n        fi                                                                                  \n    done                                                                                    \n    if [[ $test -eq 10 ]]; then                                                             \n        rm -f /tmp/heartbeatwrapper                                                         \n        echo "Problem unmount /export"                                                      \n        exit 1                                                                              \n    fi                                                                                      \nfi                                                                                          \n\n\n#now, it\'s important that we shut down nfs. it can\'t write to /export anymore, so that\'s fine.\n#if we leave it running at this point, then drbd will screwup when trying to go to secondary.  \n#See contradictory comment above for why this doesn\'t matter anymore.  These comments are left in\n#entirely to remind me of the pain this caused me to resolve.  A bit like why churches have Jesus\n#nailed onto a cross instead of chilling in a hammock.                                           \n\npidof nfsd | xargs kill -9 &gt;/dev/null 2&gt;&amp;1\n\nsleep 1                                   \n\nif [[ -n $(ps aux | grep nfs | grep -v grep) ]]; then\n    echo "nfs still running, trying to kill again"   \n    pidof nfsd | xargs kill -9 &gt;/dev/null 2&gt;&amp;1       \nfi                                                   \n\nsleep 1\n\n/etc/init.d/nfs-kernel-server stop #&gt;/dev/null 2&gt;&amp;1\n\nsleep 1\n\n#next we need to tear down drbd - easy with the heartbeat scripts\n#it takes input as resourcename start|stop|status                \n#First, we\'ll check to see if it\'s stopped                       \n\n/etc/ha.d/resource.d/drbddisk export status &gt;/dev/null 2&gt;&amp;1\nif [[ $? -eq 2 ]]; then                                    \n    echo "resource is already stopped for some reason..."  \nelse                                                       \n    for ((i=1; i &lt;= 10; i++)); do                          \n        /etc/ha.d/resource.d/drbddisk export stop &gt;/dev/null 2&gt;&amp;1\n        if [[ $(egrep -o "st:[A-Za-z/]*" /proc/drbd | cut -d: -f2) == "Secondary/Secondary" ]] || [[ $(egrep -o "st:[A-Za-z/]*" /proc/drbd | cut -d: -f2) == "Secondary/Unknown" ]]; then                                                                                                                             \n            echo "Successfully stopped DRBD"                                                                                                             \n            break                                                                                                                                        \n        else                                                                                                                                             \n            echo "Failed to stop drbd for some reason"                                                                                                   \n            cat /proc/drbd                                                                                                                               \n            if [[ $i -eq 10 ]]; then                                                                                                                     \n                    exit 50                                                                                                                              \n            fi                                                                                                                                           \n        fi                                                                                                                                               \n    done                                                                                                                                                 \nfi                                                                                                                                                       \n\nrm -f /tmp/heartbeatwrapper                                                                                                                              \nexit 0                                                                                                                                                   \n</code></pre>\n\n<p>elif [[ x$1 == "xstart" ]]; then</p>\n\n<pre><code>#start up drbd first\n/etc/ha.d/resource.d/drbddisk export start &gt;/dev/null 2&gt;&amp;1\nif [[ $? -ne 0 ]]; then                                   \n    echo "Something seems to have broken. Let\'s check possibilities..."\n    testvar=$(egrep -o "st:[A-Za-z/]*" /proc/drbd | cut -d: -f2)       \n    if [[ $testvar == "Primary/Unknown" ]] || [[ $testvar == "Primary/Secondary" ]]\n    then                                                                           \n        echo "All is fine, we are already the Primary for some reason"             \n    elif [[ $testvar == "Secondary/Unknown" ]] || [[ $testvar == "Secondary/Secondary" ]]\n    then                                                                                 \n        echo "Trying to assume Primary again"                                            \n        /etc/ha.d/resource.d/drbddisk export start &gt;/dev/null 2&gt;&amp;1                       \n        if [[ $? -ne 0 ]]; then                                                          \n            echo "I give up, something\'s seriously broken here, and I can\'t help you to fix it."\n            rm -f /tmp/heartbeatwrapper                                                         \n            exit 127                                                                            \n        fi                                                                                      \n    fi                                                                                          \nfi                                                                                              \n\nsleep 1                                                                                         \n\n#now we remount our partitions                                                                  \n\nfor ((test=1; test &lt;= 10; test++)); do                                                          \n    mount /dev/drbd1 /export &gt;/tmp/mountoutput                                                  \n    if [[ -n $(grep -o export /etc/mtab) ]]; then                                               \n        break                                                                                   \n    fi                                                                                          \ndone                                                                                            \n\nif [[ $test -eq 10 ]]; then                                                                     \n    rm -f /tmp/heartbeatwrapper                                                                 \n    exit 125                                                                                    \nfi                                                                                              \n\n\n#I\'m really unsure at this point of the side-effects of not having rpc_pipefs mounted.          \n#The issue here, is that it cannot be mounted without nfs running, and we don\'t really want to start\n#nfs up at this point, lest it ruin everything.                                                     \n#For now, I\'m leaving mine unmounted, it doesn\'t seem to cause any problems.                        \n\n#Now we start up nfs.\n\n/etc/init.d/nfs-kernel-server start &gt;/dev/null 2&gt;&amp;1\nif [[ $? -ne 0 ]]; then\n    echo "There\'s not really that much that I can do to debug nfs issues."\n    echo "probably your configuration is broken.  I\'m terminating here."\n    rm -f /tmp/heartbeatwrapper\n    exit 129\nfi\n\n#And that\'s it, done.\n\nrm -f /tmp/heartbeatwrapper\nexit 0\n</code></pre>\n\n<p>elif [[ "x$1" == "xstatus" ]]; then</p>\n\n<pre><code>#Lets check to make sure nothing is broken.\n\n#DRBD first\n/etc/ha.d/resource.d/drbddisk export status &gt;/dev/null 2&gt;&amp;1\nif [[ $? -ne 0 ]]; then\n    echo "stopped"\n    rm -f /tmp/heartbeatwrapper\n    exit 3\nfi\n\n#mounted?\ngrep -q drbd /etc/mtab &gt;/dev/null 2&gt;&amp;1\nif [[ $? -ne 0 ]]; then\n    echo "stopped"\n    rm -f /tmp/heartbeatwrapper\n    exit 3\nfi\n\n#nfs running?\n/etc/init.d/nfs-kernel-server status &gt;/dev/null 2&gt;&amp;1\nif [[ $? -ne 0 ]]; then\n    echo "stopped"\n    rm -f /tmp/heartbeatwrapper\n    exit 3\nfi\n\necho "running"\nrm -f /tmp/heartbeatwrapper\nexit 0\n</code></pre>\n\n<p>fi\n</pre></code></p>\n\n<p>With all of the above done, you\'ll then just want to configure /etc/exports</p>\n\n<pre>/export 172.20.1.0/255.255.255.0(rw,sync,fsid=1,no_root_squash)</pre>\n\n<p>Then it\'s just a case of starting up heartbeat on both machines and issuing hb_takeover on one of them. You can test that it\'s working by making sure the one you issued the takeover on is primary - check /proc/drbd, that the device is mounted correctly, and that you can access nfs. </p>\n\n<p>--</p>\n\n<p>Best of luck man.  Setting it up from the ground up was, for me, an extremely painful experience.</p>\n'}, {'answer_id': 764265, 'author': 'McGovernTheory', 'author_id': 85095, 'author_profile': 'https://Stackoverflow.com/users/85095', 'pm_score': 0, 'selected': False, 'text': '<p>May I suggest you visit the F5 site and check out <a href="http://www.f5.com/solutions/virtualization/file/" rel="nofollow noreferrer">http://www.f5.com/solutions/virtualization/file/</a></p>\n'}, {'answer_id': 2167246, 'author': 'fish.ada94', 'author_id': 262384, 'author_profile': 'https://Stackoverflow.com/users/262384', 'pm_score': 0, 'selected': False, 'text': '<p>You can look at Mirror File System. It does the file replication on file system level.\nThe same file on both primary and backup systems are live file.</p>\n\n<p><a href="http://www.linux-ha.org/RelatedTechnologies/Filesystems" rel="nofollow noreferrer">http://www.linux-ha.org/RelatedTechnologies/Filesystems</a></p>\n'}]
['https://Stackoverflow.com/questions/80195', 'https://Stackoverflow.com', 'https://Stackoverflow.com/users/15020/']