If you somehow suffer a split-LAN event, how do you determine which is the official and which the split, and how can you remerge them?
The way we solve this is to configure every node to know every other node -- this way everyone knows how big the cluster is, and knows if it's able to talk with more than half of it. If a node can't talk with more than half of the cluster, then it will refuse to "stand up" to be the leader.
Would bedrock be suitable for synchronizing a large number of instances? say 100-200, where the DB is quite simple however (low traffic and amount of data)
I haven't tried that many, but I can't think of any reason why this wouldn't work. The one complication is, as mentioned above, the design requires that every node know every other node ahead of time -- new nodes currently can't be added or removed without restarting the cluster.
Is Bedrock different than RQLite in some important feature? The plugins like cache and job queue are valuable, for instance.
Honestly I don't know much about RQLite, sorry!
I am trying to compile Bedrock on Mac OSX, and I get the following error: libstuff/libstuff.h:44:59: fatal error: pcrecpp.h: No such file or directory
make: * No rule to make target
.build/main.d', needed by.build/main.o'. Stop.
brewis always breaking, and I feel like I need to reinstall my entire OS whenever anything breaks.
DBplugin to make leaders just refuse writes escalated from permanent followers.
Permafollower, such as shown here: https://github.com/Expensify/Bedrock/blob/cf2c36027f569df277d3f97ea08ff8a917ad014a/sqlitecluster/SQLiteNode.cpp#L370
DB.cppto a new file
/plugins-- that'll ensure it just compiles easy. Later when you have proven it out, you'll likely want to move your
SecureDB.cppplugin into your own private repo, but I'd suggest skipping that to start.
SecureDBplugin, launch Bedrock with the
-plugins SecureDBparameter to enable it (and notably, don't enable
DB, as that doesn't have the security check you want)
Permafollower, but it is as simple as making the
-priorityof the follower
0in the follower's command line, and then adding
?Permafollower=trueto the node definition in
-peerListon all of the full nodes. So, like
-peerList node1:9001,node2:9002?Permafollower=truewould indicate that
node2:9002is a Permafollower. This is necessary to configure on the leader as well as the follower, because obviously the leader can't trust the follower to advertise its own permafollower status (given that you are using this to identify "untrusted" nodes).