Takes care of transactionality. Only one master node is really active
(the active master node is called “primary master”) at any given time,
extra masters are spares (they are called “secondary masters”).

“storage” nodes (mandatory, 1 or more)

Stores data, preserving history. All available storage nodes are in use
simultaneously. This offers redundancy and data distribution.
Available backends: MySQL, SQLite

“admin” nodes (mandatory for startup, optional after)

Accepts commands from neoctl tool and transmits them to the
primary master, and monitors cluster state.

In addition of the disclaimer contained in the licence this code is
released under, please consider the following.

NEO does not implement any authentication mechanism between its nodes, and
does not encrypt data exchanged between nodes either.
If you want to protect your cluster from malicious nodes, or your data from
being snooped, please consider encrypted tunelling (such as openvpn).

NEO can be installed like any other egg (see setup.py). Or you can simply
make neo directory available for Python to import (for example, by
adding its container directory to the PYTHONPATH environment variable).

Write a neo.conf file like the example provided. If you use MySQL,
you’ll also need create 1 database per storage node.

Client failed at reconnecting properly to master. It could kill the master
(during tpc_finish!) or end up with invalid caches (i.e. possible data
corruption). Now, connection to master is even optional between
transaction.begin() and tpc_begin, as long as partition table contains
up-to-date data.

Compatibility with ZODB 3.9 has been dropped. Only 3.10.x branch is supported.

This version mainly comes with stabilized SQL tables format and efficient backup
feature, relying on replication, which has been fully reimplemented:

It is now incremental, instead of being done on whole partitions.
Schema of MySQL tables have been changed in order to optimize storage layout,
for good partial replication performance.

It runs at lowest priority not to degrade performance for client nodes.

A cluster in the new BACKINGUP state is a client to a normal cluster and all
its storage nodes are notified of invalidations and replicate from upstream
nodes.

Other changes are:

Compatibility with Python < 2.6 and ZODB < 3.9 has been dropped.

Cluster is now automatically started when all storage nodes of UP_TO_DATE
cells are available, similarly to mdadm assemble --no-degraded behaviour.

NEO learned to check replicas, to detect data corruption or bugs during
replication. When done on a backup cluster, upstream data is used as
reference. This is still limited to data indexes (tid & oid/serial).

NEO logs now are SQLite DB that always contain all debugging information
including exchanged packets. Records are first kept in RAM, at most 16 MB by
default, and there are flushed to disk only upon RTMIN signal or any important
record. A ‘neolog’ script has been written to help reading such DB.

Master addresses must be separated by spaces. ‘/’ can’t be used anymore.

Adding and removing master nodes is now easier: unknown incoming master nodes
are now accepted instead of rejected, and nodes can be given a path to a file
that maintains a list of known master nodes.

Node UUIDs have been shortened from 16 to 4 bytes, for better performance and
easier debugging.