I"m running two nodes cluster on two separate RHEL servers. Here are the configurations.

server ip ***1
elasticsearch.yml
cluster. name: es1
node.name: es1-node1
node.master: true
node.data: true
network.host: ***1
transport.host: localhost
http.port: 9200
transport.tcp.port: 9300
discovery.zen.ping.unicast.hosts: ["***1:9300",  "***2:9301]
discovery.zen.ping_timeout: 30s

server ip ***2
elasticsearch.yml
cluster. name: es1
node.name: es1-node2
node.master: false
node.data: true
network.host: ***2
transport.host: localhost
http.port: 9201
transport.tcp.port: 9301
discovery.zen.ping.unicast.hosts: ["***1:9300",  "***2:9301]
discovery.zen.ping_timeout: 30s

The node on server ***1 has master and data roles.
The node on server ***2 has data role.
I started ES instances on both servers without errors in their log files.
Also, I can successfully request indices via curl on server ***1.

Unfortunately data node on server ***2 is not joining the cluster and running check for its health with
curl -XGET 'http://***2:9201/_cat/health?v' on the server ***2 console outputs the following error:
("error":("root_cause":[("type":"master_not_discovered_exception","reason":"null"), "status":503)

I think I might be missing something in config files, may be on the transport level or something else and any advise or help to resolve the issue will be appreciated.

---
NEW: Monitor These Apps!
elasticsearch, apache solr, apache hbase, hadoop, redis, casssandra, amazon cloudwatch, mysql, memcached, apache kafka, apache zookeeper, apache storm, ubuntu, centOS, red hat, debian, puppet labs, java, senseiDB