thanks, erick. great info.

although you can't (yet) direct queries to one or the other. So just making
> them all NRT and forgetting about it is reasonable.


are you simply flagging the fact that we wouldn't direct the queries to A
v. B v. C since SolrCloud will make the decisions itself as to which part
of the distro gets hit for the operation? if not, can you expound on this a
bit more?

The very nature of merging is such that you will _always_ get large merges
> until you have 5G segments (by default)


bummer

Quite possible, but you have to route things yourself. But in that case
> you're limited to one machine to handle all your NRT traffic. I skimmed
> your post so don't know whether your NRT traffic load is high enough to
> worry about.


ok. i think we'll take a two-pronged approach. for the immediate purposes
of trying to solve an issue we've begun encountering we will begin
thoroughtesting the load between various operations in the master-slave
setup we've set up. pending the results, we can roll forward w a temporary
patch in which all end-user touch points route through the primary box for
read/write while large scale operations/processing we do in the background
will point to the ELB the slaves are sitting behind. we'll also begin
setting up a simple solrcloud instance to toy with per your suggestion
above. inb4 tons more questions on my part :)

thanks!

--
John Blythe

On Tue, Apr 10, 2018 at 11:14 AM, Erick Erickson <erickerick...@gmail.com>
wrote:

> bq: should we try to bite the solrcloud bullet and be done w it
>
> that's what I'd do. As of 7.0 there are different "flavors", TLOG,
> PULL and NRT so that's also a possibility, although you can't (yet)
> direct queries to one or the other. So just making them all NRT and
> forgetting about it is reasonable.
>
> bq:  is there some more config work we could put in place to avoid ...
> commit issue and the ultra large merge dangers
>
> No. The very nature of merging is such that you will _always_ get
> large merges until you have 5G segments (by default). The max segment
> size (outside "optimize/forceMerge/expungeDeletes" which you shouldn't
> do) is 5G so the steady-state worst-case segment pull is limited to
> that.
>
> bq: maybe for our initial need we use Master for writing and user
> access in NRT events, but slaves for the heavier backend
>
> Quite possible, but you have to route things yourself. But in that
> case you're limited to one machine to handle all your NRT traffic. I
> skimmed your post so don't know whether your NRT traffic load is high
> enough to worry about.
>
> The very first thing I'd do is set up a simple SolrCloud setup and
> give it a spin. Unless your indexing load is quite heavy, the added
> work the NRT replicas have in SolrCloud isn't a problem so worrying
> about that is premature optimization unless you have a heavy load.....
>
> Best,
> Erick
>
> On Mon, Apr 9, 2018 at 4:36 PM, John Blythe <johnbly...@gmail.com> wrote:
> > Thanks a bunch for the thorough reply, Shawn.
> >
> > Phew. We’d chosen to go w Master-slave replication instead of SolrCloud
> per
> > the sudden need we had encountered and the desire to avoid the nuances
> and
> > changes related to moving to SolrCloud. But so much for this being a more
> > straightforward solution, huh?
> >
> > Few questions:
> > - should we try to bite the solrcloud bullet and be done w it?
> > - is there some more config work we could put in place to avoid the soft
> > commit issue and the ultra large merge dangers, keeping the replications
> > happening quickly?
> > - maybe for our initial need we use Master for writing and user access in
> > NRT events, but slaves for the heavier backend processing. Thoughts?
> > - anyone do consulting on this that would be interested in chatting?
> >
> > Thanks again!
> >
> > On Mon, Apr 9, 2018 at 18:18 Shawn Heisey <apa...@elyograg.org> wrote:
> >
> >> On 4/9/2018 12:15 PM, John Blythe wrote:
> >> > we're starting to dive into master/slave replication architecture.
> we'll
> >> > have 1 master w 4 slaves behind it. our app is NRT. if user performs
> an
> >> > action in section A's data they may choose to jump to section B which
> >> will
> >> > be dependent on having the updates from their action in section A. as
> >> such,
> >> > we're thinking that the replication time should be set to 1-2s (the
> >> chances
> >> > of them arriving at section B quickly enough to catch the 2s gap is
> >> highly
> >> > unlikely at best).
> >>
> >> Once you start talking about master-slave replication, my assumption is
> >> that you're not running SolrCloud.  You would NOT want to try and mix
> >> SolrCloud with replication.  The features do not play well together.
> >> SolrCloud with NRT replicas (this is the only replica type that exists
> >> in 6.x and earlier) may be a better option than master-slave
> replication.
> >>
> >> > since the replicas will simply be looking for new files it seems like
> >> this
> >> > would be a lightweight operation even every couple seconds for 4
> >> replicas.
> >> > that said, i'm going *entirely* off of assumption at this point and
> >> wanted
> >> > to check in w you all to see any nuances, gotchas, hidden landmines,
> etc.
> >> > that we should be considering before rolling things out.
> >>
> >> Most of the time, you'd be correct to think that indexing is going to
> >> create a new small segment and replication will have little work to do.
> >> But as you create more and more segments, eventually Lucene is going to
> >> start merging those segments.  For discussion purposes, I'm going to
> >> describe a situation where each new segment during indexing is about
> >> 100KB in size, and the merge policy is left at the default settings.
> >> I'm also going to assume that no documents are getting deleted or
> >> reindexed (which will delete the old version).  Deleted documents can
> >> have an impact on merging, but it will usually only be a dramatic impact
> >> if there are a LOT of deleted documents.
> >>
> >> The first ten segments created will be this 100KB size.  Then Lucene is
> >> going to see that there are enough segments to trigger the merge policy
> >> - it's going to combine ten of those segments into one that's
> >> approximately one megabyte.  Repeat this ten times, and ten of those 1
> >> megabyte segments will be combined into one ten megabyte segment.
> >> Repeat all of THAT ten times, and there will be a 100 megabyte segment.
> >> And there will eventually be another level creating 1 gigabyte
> >> segments.  If the index is below 5GB in size, the entire thing *could*
> >> be merged into one segment by this process.
> >>
> >> The end result of all this:  Replication is not always going to be
> >> super-quick.  If merging creates a 1 gigabyte segment, then the amount
> >> of time to transfer that new segment is going to depend on how fast your
> >> disks are, and how fast your network is.  If you're using commodity SATA
> >> drives in the 4 to 10 terabyte range and a gigabit network, the network
> >> is probably going to be the bottleneck -- assuming that the system has
> >> plenty of memory and isn't under a high load.  If the network is the
> >> bottleneck in that situation, it's probably going to take close to ten
> >> seconds to transfer a 1GB segment, and the greater part of a minute to
> >> transfer a 5GB segment, which is the biggest one that the default merge
> >> policy configuration will create without an optimize operation.
> >>
> >> Also, you should understand something that has come to my attention
> >> recently (and is backed up by documentation):  If the master does a soft
> >> commit and the segment that was committed remains in memory (not flushed
> >> to disk), that segment will NOT be replicated to the slaves.  It has to
> >> get flushed to disk before it can be replicated.
> >>
> >> Thanks,
> >> Shawn
> >>
> >> --
> > John Blythe
>

Reply via email to