2017-08-15 1 views
0

Ich versuche, eine Verbindung zu Remote-Mongodb-Servern mit Port-Forwarding. In mgo.DialInfo gibt der Dial-Server eine Verbindung (vom Typ *net.Conn) an den zwischengeschalteten Host zurück, und Addrs wäre eine Zeichenfolge von entfernten mongodb-Server-Adressen (eine Reihe von Seed-Servern). Meine Frage ist, wenn ich die Remote-IP-Adressen dieser Server gebe, funktioniert das Programm gut und ich kann eine Verbindung zu den Remote-Mongodb-Servern herstellen, aber da sich die IP-Adressen ändern können, möchte ich die Domain-Namen der Server angeben mongodbserver1 und mongodbserver2 und wenn ich das gebe, hängt das Programm. Soweit ich verstanden habe, versucht das Programm, die Domänennamen auf meinem lokalen Rechner aufzulösen, die nicht funktionieren und sie müssen auf dem zwischengeschalteten Host aufgelöst werden. Ich möchte wissen, wie ich das machen kann.Wie Domänennamen von Remote-Servern aufgelöst werden, während ssh Port-Forwarding

In Bezug auf die Code funktioniert die folgende, fein

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) 

aber die unter nicht

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) 

Antwort

0

Konfigurieren der Namensauflösung auf dem Computer arbeiten funktioniert. Dies könnte bedeuten, Testeinträge zu /etc/hosts hinzuzufügen (wenn Sie * nix verwenden). Oder Sie könnten einen Eintrag für Ihren Produktions-DNS-Server zu /etc/resolv.conf hinzufügen (wieder unter der Annahme * nix).

+0

Ich möchte, dass die Änderungen innerhalb des Codes vorgenommen werden, anstatt die Datei/etc/hosts zu ändern, damit derjenige, der diesen Code ausführt, keine Änderungen an irgendeiner Datei manuell vornehmen muss. – user1851006

+0

Ich verstehe nicht, was Sie wollen. Sie möchten einen Domain-Namen verwenden, möchten aber die IP-Adresse fest codieren? Es fühlt sich an, als würden Sie nach widersprüchlichen Dingen fragen. – Flimzy

+0

Nein. Das ist nicht was ich will. Was ich meinte, ist, dass, wenn ich diesen Code (mit Domain-Namen und nicht IP-Adresse) auf jedem Computer ausführen, sollte dieser Computer den Domain-Namen automatisch auflösen und es sollte keine manuelle Konfiguration benötigt werden. – user1851006

Verwandte Themen