Dekel,
First, understand that in Elasticsearch, the concept of "master node" only relates to which node controls cluster state. It does not mean that node holds the authoritative copy of every index. There aren't any "slave nodes". (In fact, a best practice is to have dedicated masters - the nodes that are master eligible don't store any data. This is to increase cluster stability.) Which copy of a shard is the "primary" shard is entirely arbitrary, and nearly inconsequential. You likely have primary shards on each of your data nodes.
But to your question. What you are experiencing is that when you start a node, it recognizes that there are shards on the disk, but can't determine whether any one of those shards is identical to their supposed copies on other nodes. One reason for this is that each shard operates in isolation, and the segments of which it is comprised will most likely be different from the segments of another copy of the shard even when they are identical, and a full document-based comparison of the two would be possibly enormously costly.
So what do you do to avoid that painful wait? Enter Synced Flush [1]. The documentation explains nicely what it does, and how to do it, so I leave it there.
Hope that helps!
[1] https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-synced-flush.html