2017-08-15 9 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) 

を正常に動作しますが、1つは、以下のマシン上で動作するように

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

関連する問題