Browse Source

*: support client srv target

Xiang Li 10 years ago
parent
commit
bfa21001a1
3 changed files with 30 additions and 4 deletions
  1. 26 0
      Documentation/clustering.md
  2. 2 2
      client/srv.go
  3. 2 2
      client/srv_test.go

+ 26 - 0
Documentation/clustering.md

@@ -285,6 +285,13 @@ The following DNS SRV records are looked up in the listed order:
 
 If `_etcd-server-ssl._tcp.example.com` is found then etcd will attempt the bootstrapping process over SSL.
 
+To help clients discover the etcd cluster, the following DNS SRV records are looked up in the listed order:
+
+* _etcd-client._tcp.example.com
+* _etcd-client-ssl._tcp.example.com
+
+If `_etcd-client-ssl._tcp.example.com` is found, clients will attempt to communicate with the etcd cluster over SSL.
+
 #### Create DNS SRV records
 
 ```
@@ -294,6 +301,13 @@ _etcd-server._tcp.example.com. 300 IN	SRV	0 0 2380 infra1.example.com.
 _etcd-server._tcp.example.com. 300 IN	SRV	0 0 2380 infra2.example.com.
 ```
 
+```
+$ dig +noall +answer SRV _etcd-client._tcp.example.com
+_etcd-client._tcp.example.com. 300 IN SRV 0 0 2379 infra0.example.com.
+_etcd-client._tcp.example.com. 300 IN SRV 0 0 2379 infra1.example.com.
+_etcd-client._tcp.example.com. 300 IN SRV 0 0 2379 infra2.example.com.
+```
+
 ```
 $ dig +noall +answer infra0.example.com infra1.example.com infra2.example.com
 infra0.example.com.	300	IN	A	10.0.1.10
@@ -382,6 +396,18 @@ DNS SRV records can also be used to configure the list of peers for an etcd serv
 $ etcd --proxy on -discovery-srv example.com
 ```
 
+#### etcd client configuration
+
+DNS SRV records can also be used to help clients discover the etcd cluster.
+
+The official [etcd/client](../client) supports [DNS Discovery](https://godoc.org/github.com/coreos/etcd/client#Discoverer).
+
+`etcdctl` also supports DNS Discovery by specifying the `--discovery-srv` option.
+
+```
+$ etcdctl --discovery-srv example.com set foo bar
+```
+
 #### Error Cases
 
 You might see an error like `cannot find local etcd $name from SRV records.`. That means the etcd member fails to find itself from the cluster defined in SRV records. The resolved address in `-initial-advertise-peer-urls` *must match* one of the resolved addresses in the SRV targets.

+ 2 - 2
client/srv.go

@@ -50,8 +50,8 @@ func (d *srvDiscover) Discover(domain string) ([]string, error) {
 		return nil
 	}
 
-	errHTTPS := updateURLs("etcd-server-ssl", "https")
-	errHTTP := updateURLs("etcd-server", "http")
+	errHTTPS := updateURLs("etcd-client-ssl", "https")
+	errHTTP := updateURLs("etcd-client", "http")
 
 	if errHTTPS != nil && errHTTP != nil {
 		return nil, fmt.Errorf("dns lookup errors: %s and %s", errHTTPS, errHTTP)

+ 2 - 2
client/srv_test.go

@@ -78,10 +78,10 @@ func TestSRVDiscover(t *testing.T) {
 
 	for i, tt := range tests {
 		lookupSRV = func(service string, proto string, domain string) (string, []*net.SRV, error) {
-			if service == "etcd-server-ssl" {
+			if service == "etcd-client-ssl" {
 				return "", tt.withSSL, nil
 			}
-			if service == "etcd-server" {
+			if service == "etcd-client" {
 				return "", tt.withoutSSL, nil
 			}
 			return "", nil, errors.New("Unknown service in mock")