ポートフォワードを使用してリモートmongodbサーバーに接続しようとしています。 mgo.DialInfoでは、ダイヤルサーバーは接続(タイプ*net.Conn
)を中間ホストに返し、Addrs
はリモートmongodbサーバーのアドレス(シードサーバーのセット)の文字列になります。私の質問は、私はこれらのサーバーのリモートIPアドレスを与える場合、プログラムが正常に動作し、私はリモートmongodbサーバーに接続することができますが、以来、IPアドレスは、サーバーのドメイン名を与えたいmongodbserver1とmongodbserver2私はそれを与えると、プログラムがハングします。私が理解する限り、プログラムは動作しないドメインマシン上のドメイン名を解決しようとしており、中間のホスト上で解決する必要があります。私はそれをどうやってできるのか知りたい。コードの面では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)
/etc/hostsファイルを変更するのではなく、コード内で変更を加えて、誰でもこのコードを実行すると、手動でファイルを変更する必要はありません。 – user1851006
私はあなたが欲しいものを理解していません。ドメイン名を使用したいが、あなたはまた、IPアドレスをハードコードしたいと思う?あなたが矛盾したことを求めているように感じます。 – Flimzy
いいえ、それは私が欲しいものではありません。私が意味することは、どのマシンでもこのコード(ドメイン名とIPアドレスではない)を実行すると、そのマシンは自動的にドメイン名を解決し、手動で設定する必要はないはずです。 – user1851006