NFS Document root (was: Re: Forwarding Requests to Multiple Upstream Servers?)

Igor Clark igor at pokelondon.com
Wed Jul 9 17:12:48 MSD 2008


Thanks, Thanos and Andan, interesting stuff.

It would also be great to hear of anyone using the APC cache or  
similar in this situation.

On 9 Jul 2008, at 11:42, Thanos Chatziathanassiou wrote:

> Igor Clark wrote:
>> Hi there,
>> Somewhat off-topic for nginx, but I'm really interested to hear  
>> more about this. I recently tried this out by sharing a PHP code  
>> base between 2 application servers over NFS, NFS server on app  
>> server 1 and client on app server 2. I found that as soon as I  
>> added app server 2 (nfs client) into the nginx upstream list, the  
>> load on the app server immediately and dramatically increased. I  
>> assumed it was something to do with insufficiently aggressive NFS  
>> caching and tried various tweaks on the mount and export options  
>> including the sync settings, but it didn't really make any  
>> difference. When I switched the app server 2 to use local PHP files  
>> instead, the load dropped immediately.
>> Our application was built on our PHP framework which uses a lot of  
>> include files, hence we were using APC opcode cache to minimise  
>> interpreter time. I guessed these factors might have been big  
>> contributors to the load as PHP would have been checking  
>> modification times on a lot of files, and then APC was probably  
>> doing more checks.
>> Do you (or anyone) have any thoughts on whether what I was doing  
>> just isn't well suited to NFS sharing, whether it was possibly  
>> related to the caching stuff, or whether if I'd been able to spend  
>> more time tuning the NFS configuration I might have been able to  
>> get lower CPU usage? I do seem to hear of people doing what I  
>> wanted to do (obviously it's better to have the code in one place  
>> and not have to update in multiple places if possible) so I'm sure  
>> there must be ways to get it to work; quite possibly my NFS  
>> configuration was naïve ...
> I'm not sure, we use an NFS mounted directory shared between 4 web  
> servers.
> Our exported directory is sitting on hardware RAID10 (4x15000 RPM  
> Ultra320 disks on an LSI megaraid with 512mb battery backed up  
> cache) with the following export options:
> /opt/shared/htdocs x.x.x.x/255.255.255.0(rw,no_subtree_check,sync)
> clients mount it with options
> rw,hard,intr,udp,noatime,rsize=8192,wsize=8192,async,auto
> (on bonded gigabit ethernet)
>
> Each of the 4 web servers uses it for an apache+mod_perl document  
> root, as well as nginx (for the static files).
>
> Latency is tolerable though certainly higher than local filesystem,  
> read performance is OK, write performance is lousy, even if (or  
> perhaps because) you get NFS locking working properly.
>
> Everything pretty much works, but directories with heavy read/write  
> activity suffer (ie Apache::Session directories).
> Some benchmarks (somewhat old - with plain apache+mod_perl only):
> three runs of ``ab -n10000 c10''
>
> Test 1: no sessions, local file
> Requests/sec:		480.34	478.35	481.22
>
> Test 2: no sessions, file served on nfs
> Requests/sec:		475.26	472.72	472.41
>
> Test 3: local sessions using tmpfs (AKA shm fs)
> Requests/sec:		122.68	120.15	112.74
>
> Test 4: sessions on nfs mounted device (ext3)
> Requests/sec:		21.87	22.32	21.57
>
> Test 5: sessions on nfs mounted ramdisk (ext2)
> Requests/sec:		94.96	88.75	108.80
>
> We use sessions on a very small subset of files served so that loss  
> is acceptable.
> YMMV, of course.
>
>> Thanks,
>> Igor
>> On 9 Jul 2008, at 10:08, Tit Petric wrote:
>>> Does nginx support forwarding specific request types (POST request  
>>> only for example), to a specific backend?
>>>
>>> Handling file propagation from one "master" backend to the other  
>>> nodes would be easier than to have it come to a random backend.
>>>
>>> For the original poster, I would recommend using a NFS server to  
>>> share files between the various backends. Keep in mind that NFS  
>>> would be slower than a local file system, so I would advise  
>>> keeping a file&directory index in the database, to avoid some  
>>> basic problems. As far as reading and writing files goes, I've had  
>>> very little problems over the years with a setup that uses NFS  
>>> extensively.
>>>
>>> Best regards,
>>> Tit
>>>
>>> Igor Sysoev wrote:
>>>> On Wed, Jul 09, 2008 at 09:15:25AM +0200, Sven C. Koehler wrote:
>>>>
>>>>
>>>>> I am wondering whether it's possible from within an nginx module  
>>>>> to
>>>>> forward a request to multiple upstream servers....  AFAIU nginx's
>>>>> existing infrastructure does normally only support sending  
>>>>> requests to
>>>>> one upstream server.  In my example I'd like to update data that  
>>>>> resides
>>>>> on multiple servers if it's a POST request and want to send back  
>>>>> only the
>>>>> response of the first upstream server.
>>>>>
>>>>
>>>> No, nginx does not support it.
>>>>
>>>>
>>>>
>
>

--
Igor Clark • POKE • 10 Redchurch Street • E2 7DD • +44 (0)20 7749 5355  
• www.pokelondon.com








More information about the nginx mailing list