HAST - detect failure and restore avoiding an outage?
Mikolaj Golub
trociny at FreeBSD.org
Thu Feb 21 22:00:49 UTC 2013
On Wed, Feb 20, 2013 at 02:54:54PM -0600, Chad M Stewart wrote:
>
> I built a 2 node cluster for testing HAST out. Each node is an older HP server with 6 scsi disks. Each disk is configured as RAID 0 in the raid controller, I wanted a JBOD to be presented to FreeBSD 9.1 x86. I allocated a single disk for the OS, and the other 5 disks for HAST.
>
> node2# zpool status
> pool: scsi-san
> state: ONLINE
> scan: scrub repaired 0 in 0h27m with 0 errors on Tue Feb 19 17:38:55 2013
> config:
>
> NAME STATE READ WRITE CKSUM
> scsi-san ONLINE 0 0 0
> raidz1-0 ONLINE 0 0 0
> hast/disk1 ONLINE 0 0 0
> hast/disk2 ONLINE 0 0 0
> hast/disk3 ONLINE 0 0 0
> hast/disk4 ONLINE 0 0 0
> hast/disk5 ONLINE 0 0 0
>
>
> pool: zroot
> state: ONLINE
> scan: none requested
> config:
>
> NAME STATE READ WRITE CKSUM
> zroot ONLINE 0 0 0
> gpt/disk0 ONLINE 0 0 0
>
>
>
> Yesterday I physically pulled disk2 (from node1) out to simulate a
> failure. ZFS didn't see anything wrong, expected. hastd did see
> the problem, expected. 'hastctl status' didn't show me anything
> unusual or indicate any problem that I could see on either node. I
> saw hastd reporting problems in the logs, otherwise everything
> looked fine. Is there a way to detect a failed disk from hastd
> besides the log? camcontrol showed the disk had failed and
> obviously I'll be monitoring using it as well.
It looks currently logs are only way to detect errors from hastd side.
Here is a patch that adds local i/o error statistics, accessable avia
hastctl:
http://people.freebsd.org/~trociny/hast.stat_error.1.patch
hastctl output:
role: secondary
provname: test
localpath: /dev/md102
extentsize: 2097152 (2.0MB)
keepdirty: 0
remoteaddr: kopusha:7771
replication: memsync
status: complete
dirty: 0 (0B)
statistics:
reads: 0
writes: 366
deletes: 0
flushes: 0
activemap updates: 0
local i/o errors: 269
Pawel, what do you think about this patch?
> For recovery I installed a new disk in the same slot. To protect
> the data reliability the safest way I can think of to recover is to
> do the following:
>
> 1 - node1 - stop the apps
> 2 - node1 - export pool
> 3 - node1 - hastctl create disk2
> 4 - node1 - for D in 1 2 3 4 5; do hastctl role secondary;done
> 5 - node2 - for D in 1 2 3 4 5; do hastctl role primary;done
> 6 - node2 - import pool
> 7 - node2 - start the apps
> At step 5 the hastd will start to resynchronize node2:disk2 ->
> node1:disk2. I've been trying to think of a way to re-establish the
> mirror without having to restart/move the pool _and_ not pose
> additional risk of data loss.
>
> To avoid an application outage I suppose the following would work:
>
> 1 - insert new disk in node1
> 2 - hastctl role init disk2
> 3 - hastctl create disk2
> 4 - hastctl role primary disk2
>
> At that point ZFS would have seen a disk failure and then started
> resilvering the pool. No application outage, but now only 4 disks
> contain the data (assuming changing bits on the pool, not static
> content). Using the previous steps application outage, but a
> healthy pool is maintained always.
> Is there another scenario I'm thinking of where both data health and
> no application outage could be achieved?
>
--
Mikolaj Golub
More information about the freebsd-questions
mailing list