Home >Backend Development >Golang >Why Does My Golang mgo Connection to MongoDB Atlas Keep Failing with a \'No Reachable Server\' Error?

Why Does My Golang mgo Connection to MongoDB Atlas Keep Failing with a \'No Reachable Server\' Error?

Susan Sarandon
Susan SarandonOriginal
2024-11-27 19:18:13411browse

Why Does My Golang mgo Connection to MongoDB Atlas Keep Failing with a

Connecting to MongoDB Atlas using Golang mgo: Persistent "no reachable server" to replica set

This error message commonly arises when attempting to connect to a MongoDB Atlas replica set using Golang's mgo driver. To resolve this issue, consider the following steps:

Utilizing the mgo code snippet provided below:

import (
    "gopkg.in/mgo.v2"
    "crypto/tls"
    "net"
)

// Configure TLS settings
tlsConfig := &tls.Config{}

// Initialize the DialInfo object
dialInfo := &mgo.DialInfo{
    Addrs: []string{"prefix1.mongodb.net:27017", 
                    "prefix2.mongodb.net:27017",
                    "prefix3.mongodb.net:27017"},
    Database: "authDatabaseName",
    Username: "user",
    Password: "pass",
}

// Override the default DialServer method
dialInfo.DialServer = func(addr *mgo.ServerAddr) (net.Conn, error) {
    conn, err := tls.Dial("tcp", addr.String(), tlsConfig)
    return conn, err
}

// Establish the connection using DialWithInfo
session, err := mgo.DialWithInfo(dialInfo)

Keep in mind that specifying a single replica set member as a seed is an equally valid option:

Addrs: []string{"prefix2.mongodb.net:27017"}

For further insights, refer to the following resources:

  • [tls.Dial()](https://golang.org/pkg/crypto/tls/#Dial)
  • [DialInfo](https://godoc.org/gopkg.in/mgo.v2#DialInfo)
  • [DialWithInfo](https://godoc.org/gopkg.in/mgo.v2#DialWithInfo)

Update:

Alternatively, the mgo.ParseURL() method can be employed to interpret the MongoDB Atlas URI string. However, it currently lacks support for SSL.

As a workaround, you can remove the ssl=true parameter before parsing:

// URI without ssl=true
var mongoURI = "mongodb://username:[email protected],prefix2.mongodb.net,prefix3.mongodb.net/dbName?replicaSet=replName&authSource=admin"

dialInfo, err := mgo.ParseURL(mongoURI)

// Subsequent code remains similar to the previous example.

The above is the detailed content of Why Does My Golang mgo Connection to MongoDB Atlas Keep Failing with a \'No Reachable Server\' Error?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn