We're interested in this as well, as we will be serving our docroot from a GlusterFS share. Have you tried nginx? I have not tested this, but after your benchmarks it sounds like I need to. Your inotifiy script looks like it would work, but it wouldn't for me; we use GlusterFS so we can store ~70TB of data, which we can't copy to the regular filesystem. This is a big risk indeed - can you share your benchmarking method? Did you simply use ab? Thanks for the heads up P On Wed, Sep 15, 2010 at 9:58 AM, Emile Heitor <emile.heitor at nbs-system.com> wrote: > Hi list, > > For a couple of weeks, we're experimenting a web hosting system based on > GlusterFS in order to share customers documentroots between > more-than-one machine. > > Involved hardware and software are : > > Two servers composed of 2x Intel 5650 (i.e. 2x12 cores @2,6Ghz), 24GB > DDR3 RAM, 146GB SAS disks / RAID 1 > Both servers running 64bits Debian Lenny GNU/Linux with GlusterFS 3.0.5 > The web server is Apache 2.2, the application is a huge PHP/MySQL monster. > > For our first naive tests were using the glusterfs mountpoint as > apache's documentroot. In short, performances were catastrophic. > A single of these servers, without GlusterFS, is capable of handling > about 170 pages per second with 100 concurrent users. > The same server, with apache documentroot being a gluster mountpoint, > drops to 5 PPS for 20 CU and just stops responding for 40+. > > We tried a lot of tips (quick-read, io-threads, io-cache, thread-count, > timeouts...) we read on this very mailing list, various websites, or > experiences on our own, we never got better than 10 PPS / 20 users. > > So we took another approach: instead of declaring gluster mountpoint as > the documentroot, we declared the local storage, but of course, without > any modification, this would lead to inconsistencies if by any chance > apache writes something (.htaccess, tmp file, log...). And so enters > inotify. Using inotify-tools's "inotifywait", we have this little script > watching for local documentroot modifications, duplicating them to the > glusterfs share. The infinite loop is avoided by a md5 comparison. Here > a very early proof of concept : > > #!/bin/sh > > [ $# -lt 2 ?]&& ?echo "usage: $0<source> ?<destination>"&& ?exit 1 > > PATH=${PATH}:/bin:/sbin:/usr/bin:/usr/sbin; export PATH > > SRC=$1 > DST=$2 > > cd ${SRC} > > # no recursion > RSYNC='rsync -dlptgoD --delete "${srcdir}" "${dstdir}/"' > > inotifywait -mr \ > ? ?--exclude \..*\.sw.* \ > ? ?-e close_write -e create -e delete_self -e delete . | \ > ? ?while read dir action file > ? ?do > ? ? ? ?srcdir="${SRC}/${dir}" > ? ? ? ?dstdir="${DST}/${dir}" > > ? ? ? ?[ -d "${srcdir}" ]&& ?\ > ? ? ? ?[ ! -z "`df -T \"${srcdir}\"|grep tmpfs`" ] \ > && ?continue > > ? ? ? ?# debug > ? ? ? ?echo ${dir} ${action} ${file} > > ? ? ? ?case "${action}" in > ? ? ? ?CLOSE_WRITE,CLOSE) > ? ? ? ? ? ?[ ! -f "${dstdir}/${file}" ]&& ?eval ${RSYNC}&& ?continue > > ? ? ? ? ? ?md5src="`md5sum \"${srcdir}/${file}\"|cut -d' ' -f1`" > ? ? ? ? ? ?md5dst="`md5sum \"${dstdir}/${file}\"|cut -d' ' -f1`" > ? ? ? ? ? ?[ ! $md5src == $md5dst ]&& ?eval ${RSYNC} > ? ? ? ? ? ?;; > ? ? ? ?CREATE,ISDIR) > ? ? ? ? ? ?[ ! -d "${dstdir}/${file}" ]&& ?eval ${RSYNC} > ? ? ? ? ? ?;; > ? ? ? ?DELETE|DELETE,ISDIR) > ? ? ? ? ? ?eval ${RSYNC} > ? ? ? ? ? ?;; > ? ? ? ?esac > ? ?done > > As for now a gluster mountpoint is barely unusable as an Apache > DocumentRoot for us (and yes, with htaccess disabled), i'd like to have > the list's point of view on this approach. Do you see any terrible glitch ? > > Thanks in advance, > > -- > Emile Heitor, Responsable d'Exploitation > --- > www.nbs-system.com, 140 Bd Haussmann, 75008 Paris > Tel: 01.58.56.60.80 / Fax: 01.58.56.60.81 > > > _______________________________________________ > Gluster-users mailing list > Gluster-users at gluster.org > http://gluster.org/cgi-bin/mailman/listinfo/gluster-users > -- http://philcryer.com