Update 3/21/19 Core developers had pushed out a fix as of
366f64f3df266cf02a06412d6760f73626d0a2bf commit on the
mainnet branch that addresses this issue that I described below.
In the setting where you have a node in
--private-mode (to bake)
that connects itself to front (public) nodes, you must explicitly set
your front nodes to trust your private node (using
tezos-node or the config file of
tezos-node or RPCs)! Else,
there is a chance that at some point your front nodes decide to
disconnect themselves from your private node in favour of a fresh new
peer. The bug was that there were cases of disconnection of
trusted-private-peers (not really visible because nodes used to favour
old connections over new ones but still). we've now shielded those
Essentially, there is a new feature that allows you to set your private node as a peer on your public nodes. That will favor your private node over new peers on your public node.
This problem has been around since the beginning. The problem stems from that the private node is treated the same as every other peer in your public node(even setting one as trusted). Basically it's not prioritizing your private node higher and sometimes your public node may decide that your private node is less "useful" than others. I mean if you think about it, private nodes are just leechers, not really contributing to your public node(s) so your public node might disconnect your private node for another node in the network. Also if your private node somehow "misbehaves" such as not functioning correctly or taking up too much resources, your public node might even graylist it and not allow connections from your private node. Though you would expect setting as trusted should alleviate that!
Most of us early bakers solve this problem by increasing the number of redundancies(public nodes) so when one disconnects it's not a big deal and it should reconnect sooner or later. I think in general, this is a good idea as you'll likely need to upgrade your nodes and having no redundancy will make the process much trickier. These days, I actually find that my private node almost never disconnects unlike the early days. My suspicion is that the private node might have gain "credibility", kind of opposite of being graylisted.
Until a new feature is added that can ensure an undisrupted prioritized connection, your best options are really limited to bringing up more public nodes or adding the foundation nodes(likely trustworthy) as your trusted nodes. One thing you could try is quicksync or copy the chain data to your private node so you don't have to bootstrap your private node. It's possible that during the syncing process, it's getting disconnected due to the resources it's requiring. The problem could be your private node's workers, not your public node disconnecting it.