2017-04-21 160 views
0

我正在尝试使用mgo连接到MongoDB Atlas免费群集。CreateSession:无法访问服务器 - mgo

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:无可达服务器

环境

我使用MongoDB的空闲簇与谷歌的App Engine SDK GO

回答

0

要连接到MongoDB的地图集,你需要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"