I am hoping to get some feedback on the architecture I've been planning
for a medium to high volume site. This is my first time working
with Solr, so I want to be sure what I'm planning isn't totally weird,
unsupported, etc.
We've got a a pair of F5 loadbalancers and 4 hosts. 2 of those hosts will
be repeaters (master+slave), and 2 of those hosts will be pure slaves. One
of the F5 vips, "Index-vip" will have members HOST1 and HOST2, but HOST2
will be "downed" and not taking traffic from that vip. The second vip,
"Search-vip" will have 3 members: HOST2, HOST3, and HOST4. The
"Index-vip" is intended to be used to post and commit index changes. The
"Search-vip" is intended to be customer facing.
Here is some ASCII art. The line with the "X"'s thru it denotes a
"downed" member of a vip, one that isn't taking any traffic. The "M:"
denotes the value in the solrconfig.xml that the host uses as the master.
Index-vip Search-vip
/ \ / | \
/ X / | \
/ \ / | \
/ X / | \
/ \ / | \
/ X / | \
/ \ / | \
HOST1 HOST2 HOST3 HOST4
REPEATER REPEATER SLAVE SLAVE
M:Index-vip M:Index-vip M:Index-vip M:Index-vip
I've been working through a couple failure scenarios. Recovering from a
failure of HOST2, HOST3, or HOST4 is pretty straightforward. Loosing
HOST1 is my major concern. My plan for recovering from a failure of HOST1
is as follows: Enable HOST2 as a member of the Index-vip, while disabling
member HOST1. HOST2 effectively becomes the Master. HOST2, 3, and 4
continue fielding customer requests and pulling indexes from "Index-vip."
Since HOST2 is now in charge of crunching indexes and fielding customer
requests, I assume load will increase on that box.
When we recover HOST1, we will simply make sure it has replicated against
"Index-vip" and then re-enable HOST1 as a member of the Index-vip and
disable HOST2.
Hopefully this makes sense. If all goes correctly, I've managed to keep
all services up and running without loosing any index data.
So, I have a few questions:
1. Has anyone else tried this dual repeater approach?
2. Am I going to have any semaphore/blocking issues if a repeater is
pulling index data from itself?
3. Is there a better way to do this?
Thanks,
Parker