mongodb / mongo-php-library

The Official MongoDB PHP library
https://mongodb.com/docs/php-library/current/
Apache License 2.0
1.6k stars 261 forks source link

Cannot connect to MongoAtlas #362

Closed ghost closed 6 years ago

ghost commented 7 years ago

Setup: PHP 7.1 Latest mongo-php-library

Use case: I am trying to connect to MongoAtlas, free tier, from a simple PHP script. To do this I am using the following (sanitised) constructor.

$client = new MongoDB\Client("mongodb://USER:PASSWORD@CLUSTER-shard-00-02-7pxcd.mongodb.net:27017,CLUSTER-shard-00-01-7pxcd.mongodb.net:27017,CLUSTER-shard-00-02-7pxcd.mongodb.net:27017/DATABASE?ssl=true&replicaSet=CLUSTER-shard-0&authSource=admin");

When doing so, I receive the following error.

[06-May-2017 12:58:23 Europe/London] PHP Fatal error: Uncaught MongoDB\Driver\Exception\ConnectionTimeoutException: No suitable servers found (serverSelectionTryOnce set): [socket timeout calling ismaster on 'CLUSTER-shard-00-02-7pxcd.mongodb.net:27017'] [socket timeout calling ismaster on 'CLUSTER-shard-00-01-7pxcd.mongodb.net:27017'] [socket timeout calling ismaster on 'CLUSTER-shard-00-02-7pxcd.mongodb.net:27017'] in /vendor/mongodb/mongodb/src/Collection.php:749 thrown in /home/tomntech/public_html/test/vendor/mongodb/mongodb/src/Collection.php on line 749

I have read through numerous Issues in the Github repo but cannot seem to identify one demonstrating the same issue.

jmikola commented 7 years ago

Are you able to successfully connect to that URI using the mongo shell or another driver on the same machine? If not, Atlas may be denying connections due to the IP whitelist.

ghost commented 7 years ago

I can connect to Atlas via a Mongo Shell on another machine and for the purpose of the test I have whitelisted all IPs. I can try to connect into my hosting provider tomorrow, assuming mongo shell is installed, and form the same connection. I know the mongo prerequisites themselves are installed as A) I had to enable them and b) the composer install succeeded.

ghost commented 7 years ago

Unfortunately I cannot test any other driver on my shared host and the Mongo Shell isn't installed. I have however generated a log of my connection failure. Any thoughts?

[2017-05-08T09:10:59+00:00]     PHONGO: DEBUG   > Connection string: 'mongodb://USER:PASSWORD@CLUSTER-shard-00-02-7pxcd.mongodb.net:27017,CLUSTER-shard-00-01-7pxcd.mongodb.net:27017,CLUSTER-shard-00-02-7pxcd.mongodb.net:27017/DB?ssl=true&replicaSet=CLUSTER-shard-0&authSource=admin'
[2017-05-08T09:10:59+00:00]     PHONGO: DEBUG   > Creating Manager, phongo-1.2.4[stable] - mongoc-1.5.4(bundled), libbson-1.5.4(bundled), php-7.1.1
[2017-05-08T09:10:59+00:00]     mongoc: TRACE   > ENTRY: mongoc_topology_description_init():54
[2017-05-08T09:10:59+00:00]     mongoc: TRACE   >  EXIT: mongoc_topology_description_init():75
[2017-05-08T09:10:59+00:00]     mongoc: TRACE   > ENTRY: mongoc_server_description_init():94
[2017-05-08T09:10:59+00:00]     mongoc: TRACE   >  EXIT: mongoc_server_description_init():131
[2017-05-08T09:10:59+00:00]     mongoc: TRACE   > ENTRY: mongoc_server_description_init():94
[2017-05-08T09:10:59+00:00]     mongoc: TRACE   >  EXIT: mongoc_server_description_init():131
[2017-05-08T09:10:59+00:00]    cluster: TRACE   > ENTRY: mongoc_cluster_init():1764
[2017-05-08T09:10:59+00:00]    cluster: TRACE   >  EXIT: mongoc_cluster_init():1789
[2017-05-08T09:10:59+00:00]     PHONGO: DEBUG   > Created client hash: a:3:{s:3:"uri";s:246:"mongodb://USER:PASSWORD@CLUSTER-shard-00-02-7pxcd.mongodb.net:27017,CLUSTER-shard-00-01-7pxcd.mongodb.net:27017,CLUSTER-shard-00-02-7pxcd.mongodb.net:27017/DB?ssl=true&replicaSet=CLUSTER-shard-0&authSource=admin";s:7:"options";N;s:13:"driverOptions";N;}
[2017-05-08T09:10:59+00:00]     cursor: TRACE   > ENTRY: _mongoc_cursor_new_with_opts():227
[2017-05-08T09:10:59+00:00]     cursor: TRACE   >  EXIT: _mongoc_cursor_new_with_opts():325
[2017-05-08T09:10:59+00:00]     cursor: TRACE   > ENTRY: mongoc_cursor_next():1653
[2017-05-08T09:10:59+00:00]     cursor: TRACE   > TRACE: mongoc_cursor_next():1658 cursor_id(0)
[2017-05-08T09:10:59+00:00]     cursor: TRACE   > ENTRY: _mongoc_cursor_next():1724
[2017-05-08T09:10:59+00:00]     cursor: TRACE   > ENTRY: _mongoc_cursor_initial_query():576
[2017-05-08T09:10:59+00:00]     cursor: TRACE   > ENTRY: _mongoc_cursor_fetch_stream():537
[2017-05-08T09:10:59+00:00]    cluster: TRACE   > ENTRY: _mongoc_cluster_stream_for_optype():1854
[2017-05-08T09:10:59+00:00] topology_scanner: TRACE   > ENTRY: mongoc_topology_scanner_node_connect_tcp():427
[2017-05-08T09:10:59+00:00]     socket: TRACE   > ENTRY: mongoc_socket_new():727
[2017-05-08T09:10:59+00:00]     socket: TRACE   > ENTRY: _mongoc_socket_setnodelay():271
[2017-05-08T09:10:59+00:00]     socket: TRACE   >  EXIT: _mongoc_socket_setnodelay():283
[2017-05-08T09:10:59+00:00]     socket: TRACE   >  EXIT: mongoc_socket_new():751
[2017-05-08T09:10:59+00:00]     socket: TRACE   > ENTRY: mongoc_socket_connect():590
[2017-05-08T09:10:59+00:00]     socket: TRACE   > TRACE: _mongoc_socket_capture_errno():336 setting errno: 115
[2017-05-08T09:10:59+00:00]     socket: TRACE   > TRACE: _mongoc_socket_errno_is_again():360 errno is: 115
[2017-05-08T09:10:59+00:00]     socket: TRACE   > ENTRY: _mongoc_socket_wait():113
[2017-05-08T09:10:59+00:00]     socket: TRACE   >  EXIT: _mongoc_socket_wait():174
[2017-05-08T09:10:59+00:00]     socket: TRACE   >  EXIT: mongoc_socket_connect():620
[2017-05-08T09:10:59+00:00] stream-tls-openssl: TRACE   > ENTRY: mongoc_stream_tls_openssl_new():633
[2017-05-08T09:10:59+00:00] stream-tls-openssl: TRACE   >  EXIT: mongoc_stream_tls_openssl_new():705
[2017-05-08T09:10:59+00:00] topology_scanner: TRACE   > ENTRY: mongoc_topology_scanner_node_connect_tcp():427
[2017-05-08T09:10:59+00:00]     socket: TRACE   > ENTRY: mongoc_socket_new():727
[2017-05-08T09:10:59+00:00]     socket: TRACE   > ENTRY: _mongoc_socket_setnodelay():271
[2017-05-08T09:10:59+00:00]     socket: TRACE   >  EXIT: _mongoc_socket_setnodelay():283
[2017-05-08T09:10:59+00:00]     socket: TRACE   >  EXIT: mongoc_socket_new():751
[2017-05-08T09:10:59+00:00]     socket: TRACE   > ENTRY: mongoc_socket_connect():590
[2017-05-08T09:10:59+00:00]     socket: TRACE   > TRACE: _mongoc_socket_capture_errno():336 setting errno: 115
[2017-05-08T09:10:59+00:00]     socket: TRACE   > TRACE: _mongoc_socket_errno_is_again():360 errno is: 115
[2017-05-08T09:10:59+00:00]     socket: TRACE   > ENTRY: _mongoc_socket_wait():113
[2017-05-08T09:10:59+00:00]     socket: TRACE   >  EXIT: _mongoc_socket_wait():174
[2017-05-08T09:10:59+00:00]     socket: TRACE   >  EXIT: mongoc_socket_connect():620
[2017-05-08T09:10:59+00:00] stream-tls-openssl: TRACE   > ENTRY: mongoc_stream_tls_openssl_new():633
[2017-05-08T09:10:59+00:00] stream-tls-openssl: TRACE   >  EXIT: mongoc_stream_tls_openssl_new():705
[2017-05-08T09:10:59+00:00] topology_scanner: TRACE   > ENTRY: mongoc_topology_scanner_node_connect_tcp():427
[2017-05-08T09:10:59+00:00]     socket: TRACE   > ENTRY: mongoc_socket_new():727
[2017-05-08T09:10:59+00:00]     socket: TRACE   > ENTRY: _mongoc_socket_setnodelay():271
[2017-05-08T09:10:59+00:00]     socket: TRACE   >  EXIT: _mongoc_socket_setnodelay():283
[2017-05-08T09:10:59+00:00]     socket: TRACE   >  EXIT: mongoc_socket_new():751
[2017-05-08T09:10:59+00:00]     socket: TRACE   > ENTRY: mongoc_socket_connect():590
[2017-05-08T09:10:59+00:00]     socket: TRACE   > TRACE: _mongoc_socket_capture_errno():336 setting errno: 115
[2017-05-08T09:10:59+00:00]     socket: TRACE   > TRACE: _mongoc_socket_errno_is_again():360 errno is: 115
[2017-05-08T09:10:59+00:00]     socket: TRACE   > ENTRY: _mongoc_socket_wait():113
[2017-05-08T09:10:59+00:00]     socket: TRACE   >  EXIT: _mongoc_socket_wait():174
[2017-05-08T09:10:59+00:00]     socket: TRACE   >  EXIT: mongoc_socket_connect():620
[2017-05-08T09:10:59+00:00] stream-tls-openssl: TRACE   > ENTRY: mongoc_stream_tls_openssl_new():633
[2017-05-08T09:10:59+00:00] stream-tls-openssl: TRACE   >  EXIT: mongoc_stream_tls_openssl_new():705
[2017-05-08T09:10:59+00:00]     stream: TRACE   > ENTRY: _mongoc_stream_socket_poll():226
[2017-05-08T09:10:59+00:00]     socket: TRACE   > ENTRY: mongoc_socket_poll():217
[2017-05-08T09:11:09+00:00]     stream: TRACE   >  EXIT: _mongoc_stream_socket_poll():252
[2017-05-08T09:11:09+00:00]     stream: TRACE   > ENTRY: mongoc_stream_failed():79
[2017-05-08T09:11:09+00:00]     stream: TRACE   > ENTRY: mongoc_stream_destroy():103
[2017-05-08T09:11:09+00:00]     stream: TRACE   > ENTRY: _mongoc_stream_socket_destroy():71
[2017-05-08T09:11:09+00:00]     socket: TRACE   > ENTRY: mongoc_socket_close():531
[2017-05-08T09:11:09+00:00]     socket: TRACE   >  EXIT: mongoc_socket_close():556
[2017-05-08T09:11:09+00:00]     stream: TRACE   >  EXIT: _mongoc_stream_socket_destroy():82
[2017-05-08T09:11:09+00:00]     stream: TRACE   >  EXIT: mongoc_stream_destroy():111
[2017-05-08T09:11:09+00:00]     stream: TRACE   >  EXIT: mongoc_stream_failed():89
[2017-05-08T09:11:09+00:00]     mongoc: TRACE   > ENTRY: mongoc_server_description_handle_ismaster():497
[2017-05-08T09:11:09+00:00]     mongoc: TRACE   >  EXIT: mongoc_server_description_handle_ismaster():504
[2017-05-08T09:11:09+00:00]     mongoc: TRACE   > TRACE: mongoc_topology_description_handle_ismaster():1729 No transition entry to RSNoPrimary for Unknown
[2017-05-08T09:11:09+00:00]     stream: TRACE   > ENTRY: mongoc_stream_failed():79
[2017-05-08T09:11:09+00:00]     stream: TRACE   > ENTRY: mongoc_stream_destroy():103
[2017-05-08T09:11:09+00:00]     stream: TRACE   > ENTRY: _mongoc_stream_socket_destroy():71
[2017-05-08T09:11:09+00:00]     socket: TRACE   > ENTRY: mongoc_socket_close():531
[2017-05-08T09:11:09+00:00]     socket: TRACE   >  EXIT: mongoc_socket_close():556
[2017-05-08T09:11:09+00:00]     stream: TRACE   >  EXIT: _mongoc_stream_socket_destroy():82
[2017-05-08T09:11:09+00:00]     stream: TRACE   >  EXIT: mongoc_stream_destroy():111
[2017-05-08T09:11:09+00:00]     stream: TRACE   >  EXIT: mongoc_stream_failed():89
[2017-05-08T09:11:09+00:00]     mongoc: TRACE   > ENTRY: mongoc_server_description_handle_ismaster():497
[2017-05-08T09:11:09+00:00]     mongoc: TRACE   >  EXIT: mongoc_server_description_handle_ismaster():504
[2017-05-08T09:11:09+00:00]     mongoc: TRACE   > TRACE: mongoc_topology_description_handle_ismaster():1729 No transition entry to RSNoPrimary for Unknown
[2017-05-08T09:11:09+00:00]     stream: TRACE   > ENTRY: mongoc_stream_failed():79
[2017-05-08T09:11:09+00:00]     stream: TRACE   > ENTRY: mongoc_stream_destroy():103
[2017-05-08T09:11:09+00:00]     stream: TRACE   > ENTRY: _mongoc_stream_socket_destroy():71
[2017-05-08T09:11:09+00:00]     socket: TRACE   > ENTRY: mongoc_socket_close():531
[2017-05-08T09:11:09+00:00]     socket: TRACE   >  EXIT: mongoc_socket_close():556
[2017-05-08T09:11:09+00:00]     stream: TRACE   >  EXIT: _mongoc_stream_socket_destroy():82
[2017-05-08T09:11:09+00:00]     stream: TRACE   >  EXIT: mongoc_stream_destroy():111
[2017-05-08T09:11:09+00:00]     stream: TRACE   >  EXIT: mongoc_stream_failed():89
[2017-05-08T09:11:09+00:00]     mongoc: TRACE   > ENTRY: mongoc_server_description_handle_ismaster():497
[2017-05-08T09:11:09+00:00]     mongoc: TRACE   >  EXIT: mongoc_server_description_handle_ismaster():504
[2017-05-08T09:11:09+00:00]     mongoc: TRACE   > TRACE: mongoc_topology_description_handle_ismaster():1729 No transition entry to RSNoPrimary for Unknown
[2017-05-08T09:11:09+00:00]     mongoc: TRACE   > ENTRY: mongoc_topology_description_select():747
[2017-05-08T09:11:09+00:00]     mongoc: TRACE   > TRACE: _mongoc_replica_set_read_suitable_cb():375 Rejected [Unknown] [CLUSTER-shard-00-02-7pxcd.mongodb.net:27017] for mode [primary]
[2017-05-08T09:11:09+00:00]     mongoc: TRACE   > TRACE: _mongoc_replica_set_read_suitable_cb():375 Rejected [Unknown] [CLUSTER-shard-00-01-7pxcd.mongodb.net:27017] for mode [primary]
[2017-05-08T09:11:09+00:00]     mongoc: TRACE   >  EXIT: mongoc_topology_description_select():785
[2017-05-08T09:11:09+00:00]    cluster: TRACE   >  EXIT: _mongoc_cluster_stream_for_optype():1864
[2017-05-08T09:11:09+00:00]     cursor: TRACE   >  EXIT: _mongoc_cursor_fetch_stream():554
[2017-05-08T09:11:09+00:00]     cursor: TRACE   >  GOTO: _mongoc_cursor_initial_query():583 done
[2017-05-08T09:11:09+00:00]     cursor: TRACE   >  EXIT: _mongoc_cursor_initial_query():612
[2017-05-08T09:11:09+00:00]     cursor: TRACE   >  EXIT: _mongoc_cursor_next():1773
[2017-05-08T09:11:09+00:00]     cursor: TRACE   >  EXIT: mongoc_cursor_next():1697
[2017-05-08T09:11:09+00:00]     cursor: TRACE   > ENTRY: mongoc_cursor_error():1612
[2017-05-08T09:11:09+00:00]     cursor: TRACE   > ENTRY: _mongoc_cursor_error():1630
[2017-05-08T09:11:09+00:00]     cursor: TRACE   >  EXIT: _mongoc_cursor_error():1640
[2017-05-08T09:11:09+00:00]     cursor: TRACE   >  EXIT: mongoc_cursor_error():1622
[2017-05-08T09:11:09+00:00]     cursor: TRACE   > ENTRY: mongoc_cursor_destroy():472
[2017-05-08T09:11:09+00:00]     cursor: TRACE   > ENTRY: _mongoc_cursor_destroy():489
[2017-05-08T09:11:09+00:00]     cursor: TRACE   >  EXIT: _mongoc_cursor_destroy():528
[2017-05-08T09:11:09+00:00]     cursor: TRACE   >  EXIT: mongoc_cursor_destroy():482
[2017-05-08T09:11:09+00:00]     mongoc: DEBUG   > Not destroying persistent client for Manager
jmikola commented 7 years ago
socket: TRACE   > ENTRY: mongoc_socket_connect():590
socket: TRACE   > TRACE: _mongoc_socket_capture_errno():336 setting errno: 115
socket: TRACE   > TRACE: _mongoc_socket_errno_is_again():360 errno is: 115

These repeated (once for each host in the seed list) socket errors are evidence of the driver not being able to communicate with the remote hosts.

Unfortunately I cannot test any other driver on my shared host and the Mongo Shell isn't installed.

In https://github.com/mongodb/mongo-php-library/issues/361#issuecomment-299486305, I suggested that a user attempt connecting to a MongoDB server using file_get_contents() to troubleshoot SSL issues. If you're limited to PHP, you could try the same. Issuing any HTTP request on the database port (27017 in your case) should return a response of "It looks like you are trying to access MongoDB over HTTP on the native driver port." if you can actually reach the server.

If you're not able to establish a connection through alternative means, I'd suggest opening a support ticket from within the Atlas UI.

Shane5453 commented 7 years ago

I have the same problem

MongoDB Atlas 3.4

jmikola commented 6 years ago

Closing this due to inactivity in some time. Feel free to follow up if there are new developments based on my last comment in https://github.com/mongodb/mongo-php-library/issues/362#issuecomment-299869626.