[Gluster-devel] Performance Translators' Stability and Usefulness
Gordan Bobic
gordan at bobich.net
Sat Jul 4 16:43:54 UTC 2009
Geoff Kassel wrote:
> (If it wasn't for that migrating to another solution would cause considerable,
> business-destroying downtime for my client base, I would have done so quite
> some time ago.)
There is an argument somewhere in there about deploying things that
aren't production ready at time of deployment. But that's a different story.
> All I see instead is this constant drive towards new features, with little to
> no signs that functionality that should be complete by now is actually so.
I can understand your point of view, but at the same time I'm assuming
that the feature expansion is being done at the request of the paying
customers they have, whose priorities and use cases may well be
sufficiently different that the issues we are running into aren't as
critical for them.
> AFR is *the* key feature of GlusterFS in my mind - and the only point (I feel)
> for using it. Yet it's still this unstable after two plus years of
> development?
It is the only feature of it that I am looking into using, too, but it
is plausible that somebody with a large distributed server farm focused
on performance rather than redundancy may see it differently.
>>> I have been using GlusterFS since the v1.3.x days, and I have yet to see
>>> a version since then that doesn't crash at least once a day from just
>>> load on even the simplest configurations.
>
>> I wouldn't say daily, but occasionally, I have seen lock-ups recently
>> during multiple glusterfs resyncs (separate volumes) on the new/target
>> machine. I have only seen it once, however, forcefully killing the
>> processes fixed it and it didn't re-occur. I have a suspicion that this
>> was related to the mounting order. I have seen weirdness happen when
>> changing the server order cluster-wide, and when servers rejoin the
>> cluster.
>
> Well, I see one to two crashes nightly, when I rotate logs or perform backups
> that are stored on the GlusterFS exported drive. (It's hit and miss which
> processes run to completion on the first go before the crash, which should
> never be an issue with a reliable storage medium.)
There's a strong argument there for implementing syslog based logging.
How do you do log rotation, BTW? Do you have to issue a HUP? Or restart
the glusterfsd process? As I said, I have seen issues with restarting
server processes in different orders. Sometimes things will lock up and
the glusterfsd process has to be killed and restarted. It seems to work
when servers come up in priority order, but other orderings can be hit
and miss.
> The only common factor identifiable is higher-than-average I/O load.
>
> I don't run any performance translators, because they make the situation much
> worse. It's just a straight AFR/posix-locks/dataspace/namespace setup, as
> I've posted quite a few times before.
Why do you namespaces for straight AFR?
> I've had to institute server scripting to restart GlusterFS and any processes
> that touches replicated files (i.e. nearly everything running on my servers)
> because of these crashes to try to minimise the downtime to my clients.
Sounds like a lot of effort and micro-downtime compared to a migration
to something else. Have you explored other options like PeerFS, GFS and
SeznamFS? Or NFS exports with failover rather than Gluster clients, with
Gluster only server-to-server?
>> Yes, that was bad, 2.0.2 is pretty good. Sure, there is still that
>> annoying settle-time bug that consistently fails the first attempt to
>> access the file system immediately after mounting (the time gap is
>> pretty tight, but if you script it, it is 100% reproducible). But other
>> than that I'm finding that all the other issues I had with it have been
>> resolved.
>
> After two major data integrity bugs in two major releases in a row, I'm taking
> very much a wait-and-see attitude with any and all GlusterFS releases.
My use-case is somewhat unusual because I'm working on shared-rootfs
clusters, and I need WAN functionality which cripples solutions like
DRBD+GFS. But for data-only storage, there are probably alternatives out
there. I'm intending to implement SeznamFS for bulk data, for example,
because it's MySQL-like round-robin file replication distributes the
bandwidth usage much more effectively (at the expense of having no
locking capability and the replication ring being cut off if any one
node fails). I'll probably stick with Gluster for /home for now because
SeznamFS seemed to cause X and/or KDE to fail to start when /home was on
SeznamFS.
>> What exactly do you mean by "regression test"? Regression testing means
>> putting in a test case to check for all the bugs that were previously
>> discovered and fixed to make sure a further change doesn't re-introduce
>> the bug. I haven't seen the test suite, so have no reason to doubt that
>> there is regression testing being carried out for each release. Perhaps
>> the developers can clarify the situation on the testing?
>
> I meant it in the same sense that you do. I have not seen any framework -
> automated or otherwise - in the repository or release files to run through
> tests for previous and/or forseeable bugs and corner cases.
OK, I haven't actually checked. A "make test" feature listing all bugs
by bugzilla ID as it goes through the testing process would go a long
way toward providing some quality reassurance.
> A test to compare cryptographic hashes of files before, after, and during
> storage/transfer between GlusterFS clients and backends should surely exist
> if there's any half-serious attempt at regression testing going on.
One of the problems is that some tests in this case are impossible to
carry out without having multiple nodes up and running, as a number of
bugs have been arising in cases where nodes join/leave or cause race
conditions. It would require a distributed test harness which would be
difficult to implement so that they run on any client that builds the
binaries. Just because the test harness doesn't ship with the sources
doesn't mean it doesn't exist on a test rig the developers use.
> Surely, though, if tests like these existed and were being used, after the
> debacle with 2.0.0, they would have picked up at least the issue reported in
> 2.0.1 before release?
That depends. There are always going to be borderline or unusual use
cases that wouldn't have been foreseen. For example, I tripped several
issues with my usage of it for the root file system that would have been
unlikely to arise for most people. The most odd one was the fact that
glusterfsd wouldn't start without /tmp existing and being writable even
though it doesn't seem to keep anything in there after startup. I only
twigged that was what was happening when I was working on debuging it
with Harha and for him the mounting worked when he mounted under /tmp,
when I was mounting under /mnt. He thought it was something about /mnt
having some kind of weird permissions issue, but then I twigged that I
didn't actually have /tmp on my initrd bootstrap where this was being
done on my setup. To this day I haven't seen an explanation of why /tmp
is required and if it is a fuse requirement or gluster requirement or
something else entirely.
> That leads me to ask - where's the unit tests that are meant to exist,
> according to http://www.gluster.org/docs/index.php/GlusterFS_QA? If they
> exist, why (apparently) aren't tests like these still not part of them?
As I explained before, you can't sensibly come up with QA tests for
timing based issues and race conditions, because those will always be
heisenbuggy to some extent. I'm not saying such tests should exist, and
at least perform some hammering for extended periods that was known to
trigger the known issues, but that only counts statistically, it won't
provide conclusive evidence of absence of the bug.
Gordan
More information about the Gluster-devel
mailing list