Hi,
On 07 06 06, J?rg Streckfu? wrote:
> First a tribut for the good work to the authors of hoststated.
> In the future i plan to use hoststated in production environments
> to check for the availability of our webservices.
>
> But before I set it up on my production machine I would make some
> testing. I took two tiny Soekrises with OpenBSD 4.1 stable installed,
> configured the first one as loadbalancer and the second one as a webserver
> with three IPs on one interface.
>
> Here ist the setup in explicit detail:
>
>
> ---------- ---------------- ------------
> | client |-----------| loadbalancer |---------| webserver |
> ---------- ---------------- ------------
> 192.168.0.10 192.168.0.1 10.0.0.10 10.0.0.1
> 10.0.0.2
> 10.0.0.3
>
> my hoststated.conf:
>
> <snip>
>
> #
> # Macros
> #
> public_ip="10.0.0.1"
> webhost1="10.0.0.1"
> webhost2="10.0.0.2"
> webhost3="10.0.0.3"
>
> #
> # Global Options
> #
> interval 15
> timeout 5000
> prefork 1
> log all
>
> #
> # Each table will be mapped to a pf table.
> #
> table webhosts {
> real port 443
> check https "/index.html" code 200
> host $webhost1
> host $webhost2
> host $webhost3
> }
>
>
> table fallback {
> real port 443
> check https "/index.html" code 200
> host 127.0.0.1
> }
>
> #
> # Services will be mapped to a rdr rule.
> #
> service www {
> virtual host $public_ip port 443
> table webhosts
> backup table fallback
> }
>
> </snip>
>
> At first everything seemed to work correctly. But when I tried to disable
> one of the webhosts and bring him back after a few seconds, hoststated
> crashed with the following messages in /var/log/deamon:
>
> <snip>
> Jun 6 11:37:24 loadbalancer hoststated[1333]: fatal: relay_dispatch_pfe:
> desynchronized
> Jun 6 11:37:24 loadbalancer hoststated[5247]: fatal: pfe_dispatch_relay: pipe
> closed
> Jun 6 11:37:24 loadbalancer hoststated[24980]: fatal: main_dispatch_relay:
> pipe closed
> Jun 6 11:37:24 loadbalancer hoststated[12810]: fatal: hce_dispatch_parent:
> pipe closed
> </snip>
>
> This were the commands which brought hoststated down:
>
> # hoststatectl host disable 1
> command succeeded
> # hoststatectl host enable 1
> command succeeded
> # hoststatectl show hosts
> hoststatectl: connect: /var/run/hoststated.sock: Connection refused
>
> So I ask myself, is hoststated already stable enough for production
> environments or should I wait for the release of 4.2 ?
well ;)
probably you will have to wait for 4.2, but fix for similar problem (try
to disable table, then enable it ;)
so probably the same applies for host disabling, enabling...
at least, with this patch it works for me.
--- src/usr.sbin/hoststated/relay.c.orig Wed Mar 7 19:40:32 2007
+++ src/usr.sbin/hoststated/relay.c Sun May 13 18:37:48 2007
@@ -1775,7 +1775,7 @@
fatalx("relay_dispatch_pfe: invalid host id");
if (host->flags & F_DISABLE)
break;
- if (host->up == st.up) {
+ if (host->up != st.up) {
log_debug("relay_dispatch_pfe: host %d => %d",
host->id, host->up);
fatalx("relay_dispatch_pfe: desynchronized");
and since you are not using check tcp, you probably won't notice this ;)
--- src/usr.sbin/hoststated/check_tcp.c.orig Sun May 13 18:36:36 2007
+++ src/usr.sbin/hoststated/check_tcp.c Sun May 13 18:37:07 2007
@@ -219,6 +219,7 @@
if (event == EV_TIMEOUT) {
cte->host->up = HOST_DOWN;
+ close(cte->s);
buf_free(cte->buf);
hce_notify_done(cte->host, "tcp_read_buf: timeout");
return;