【问题标题】:CreateSession: no reachable servers - mgoCreateSession:没有可访问的服务器 - mgo
【发布时间】:2017-04-21 08:19:09
【问题描述】:

我正在尝试使用 mgo 连接到 MongoDB Atlas 免费集群。

Golang 代码 -

package main

import (
     "fmt"
     "gopkg.in/mgo.v2"
     "time"
     "log"
)

const (
    AuthDatabase = "mydatabase"
    AuthUserName = "databaseadmin"
    AuthPassword = "databasepassword"
    ReplicaSetName = "myproject-shard-0"
)

func main(){

MongoDBHosts := []string{
    "myproject-shard-00-00-w4vds.mongodb.net:27017",
    "myproject-shard-00-01-w4vds.mongodb.net:27017",
    "myproject-shard-00-02-w4vds.mongodb.net:27017",
}

mongoDBDialInfo := &mgo.DialInfo{
    Addrs:    MongoDBHosts,
    Timeout:  60 * time.Second,
    Database: AuthDatabase,
    Username: AuthUserName,
    Password: AuthPassword,
    ReplicaSetName: ReplicaSetName,
}

mongoSession, err := mgo.DialWithInfo(mongoDBDialInfo)
if err != nil {
    log.Fatalf("CreateSession: %s\n", err)
}

defer  mongoSession.Close()
fmt.Printf("Connected to replica set %v!\n", mongoSession.LiveServers())
}

错误信息 -

CreateSession:没有可访问的服务器

环境

我正在使用带有 Google App Engine GO SDK 的 mongodb 免费集群

【问题讨论】:

    标签: mongodb google-app-engine go mgo


    【解决方案1】:

    要连接到 MongoDB Atlas,您需要 SSL

    先决条件

    TLS/SSL
    
        Clients must have support for TLS/SSL to connect to an Atlas cluster.
    
        Clients must have support for the SNI TLS extension to connect to an Atlas M0 Free Tier cluster.
    
    
    Whitelist
    
        To access a cluster, you must connect from an IP address on the Atlas group’s IP whitelist. If you need to add an IP address to the whitelist, you can do so in the Connect dialog. You can also add the IP address from the Security tab.
    

    因此我不得不更改以下代码

    mongoDBDialInfo := &mgo.DialInfo{
        Addrs:    MongoDBHosts,
        Timeout:  60 * time.Second,
        Database: AuthDatabase,
        Username: AuthUserName,
        Password: AuthPassword,
        ReplicaSetName: ReplicaSetName,
    }
    
    mongoDBDialInfo.DialServer = func(addr *mgo.ServerAddr) (net.Conn, error) {
            conn, err := tls.Dial("tcp", addr.String(), tlsConfig)
            return conn, err
        }
    

    我也必须导入以下内容

    "crypto/tls" 
    "net"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-18
      相关资源
      最近更新 更多