Hi,

1. By default get() will read backups if node, on which it's invoked is
affinity node. In other words, if current node has backups, Ignite prefer to
read local data from backup rather requesting primary node over network.
This can be changed by setting CacheConfiguration.setReadFromBackup(false)
[1]. 

2. It depends on operations that you call. If you use get() - request will
go to primary node only. If you do SQL query by primary key or affinity key
- it will go to primary node too. In other cases SQL will be invoked on all
nodes as it doesn't know beforehand what data nodes have data satisfied your
query.

3. Optimal configuration is highly depends on your cluster size and hardware
resources. In your case, you have three node and 2 backups, that means each
node keeps full dataset and if two of three nodes failed, you don't loose
data. But if you have more data than available memory for one node, than
it's better either reduce number of backups or increase number of nodes. IMO
the best backup configuration is that allows you to loose 20-30% of nodes
without loosing data.

4. On node fail, affinity function will re-maps partitions between live
nodes, re-balance them and restores number of backups. The more
sophisticated behavior if you use persistence, because baseline topology
will try to avoid re-balancing [2].

[1]
https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/CacheConfiguration.html#setReadFromBackup-boolean-

[2] https://apacheignite.readme.io/docs/baseline-topology

Thanks!
-Dmitry



--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/

Reply via email to