2017-08-15 57 views
0

我想通過端口轉發連接到遠程MongoDB服務器。在mgo.DialInfo中,撥號服務器將返回一個連接(類型爲*net.Conn)到中間主機,Addrs將是一串遠程MongoDB服務器的地址(一組種子服務器)。我的問題是,如果我給這些服務器的遠程IP地址,程序工作正常,我能夠連接到遠程MongoDB服務器,但因爲IP地址可以改變我想給服務器的域名,說mongodbserver1mongodbserver2當我給出這個,程序掛起。據我瞭解,該程序正試圖解決我的本地計算機上的域名不起作用,他們需要在中介主機上解決。我想知道我該怎麼做。如何解析遠程服務器的域名,同時ssh端口轉發

在代碼方面,下面的工作正常,

dialinfo := mgo.DialInfo{ 
    Addrs: {"1.2.3.45","1.2.3.56"} 
    Database: Mongo1, 
    Username: User, 
    Password: Pwd, 
    Timeout: 60 * time.Second, 
    DialServer: func(addr *mgo.ServerAddr) (net.Conn, error) { 
     conn, err := connectToCluster("172.12.13.145") 
     if err != nil { 
      fmt.Println("couldn't connect to the cluster, trying again..") 
      return nil, err 
     } 
     remote, err := conn.Dial("tcp", addr.String()) 
     if err != nil { 
      fmt.Println("couldn't connect to the mongodb server:", addr.String()) 
     } 
     return remote, err 
    }, 
} 
session, err = mgo.DialWithInfo(dialinfo) 

但一個低於不起作用

dialinfo := mgo.DialInfo{ 
    Addrs: {"mongodbserver1","mongodbserver2"} 
    Database: Mongo1, 
    Username: User, 
    Password: Pwd, 
    Timeout: 60 * time.Second, 
    DialServer: func(addr *mgo.ServerAddr) (net.Conn, error) { 
     conn, err := connectToCluster("172.12.13.145") 
     if err != nil { 
      fmt.Println("couldn't connect to the cluster, trying again..") 
      return nil, err 
     } 
     remote, err := conn.Dial("tcp", addr.String()) 
     if err != nil { 
      fmt.Println("couldn't connect to the mongodb server:", addr.String()) 
     } 
     return remote, err 
    }, 
} 
session, err = mgo.DialWithInfo(dialinfo) 

回答

0

配置名稱解析到你的機器上工作。這可能意味着將測試條目添加到/etc/hosts(如果您使用的是* nix)。或者你可以爲生產DNS服務器添加一個條目到/etc/resolv.conf(同樣,假設* nix)。

+0

我想要在代碼中進行更改,而不是更改/ etc/hosts文件,以便運行此代碼的任何人不必手動更改任何文件。 – user1851006

+0

我不明白你想要什麼。你想使用域名,但你也想硬編碼的IP地址?感覺就像你在問矛盾的事情。 – Flimzy

+0

不,這不是我想要的。我的意思是,如果我在任何機器上運行此代碼(使用域名而非IP地址),該機器應該自動解析域名,並且不應該有任何需要的手動配置。 – user1851006

相關問題