From bfeed190ea335ec8d7158ebf8a53edfc8d918b5c Mon Sep 17 00:00:00 2001 From: Brandon Philips Date: Sat, 31 Aug 2013 21:53:08 -0700 Subject: [PATCH 1/3] feat(etcd): Default server listen and client listen to advertised IPs Map the advertised IP to the listening IP by default. This will make things nicer for the user. --- etcd.go | 4 ++-- util.go | 7 ++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/etcd.go b/etcd.go index 0bc3ef4ed..46546e8cc 100644 --- a/etcd.go +++ b/etcd.go @@ -52,8 +52,8 @@ func init() { flag.StringVar(&argInfo.Name, "n", "default-name", "the node name (required)") flag.StringVar(&argInfo.EtcdURL, "c", "127.0.0.1:4001", "the advertised public hostname:port for etcd client communication") flag.StringVar(&argInfo.RaftURL, "s", "127.0.0.1:7001", "the advertised public hostname:port for raft server communication") - flag.StringVar(&argInfo.EtcdListenHost, "cl", "127.0.0.1", "the listening hostname for etcd client communication") - flag.StringVar(&argInfo.RaftListenHost, "sl", "127.0.0.1", "the listening hostname for raft server communication") + flag.StringVar(&argInfo.EtcdListenHost, "cl", "", "the listening hostname for etcd client communication (defaults to advertised ip)") + flag.StringVar(&argInfo.RaftListenHost, "sl", "", "the listening hostname for raft server communication (defaults to advertised ip)") flag.StringVar(&argInfo.WebURL, "w", "", "the hostname:port of web interface") flag.StringVar(&argInfo.RaftTLS.CAFile, "serverCAFile", "", "the path of the CAFile") diff --git a/util.go b/util.go index 8ddaa93cc..22cbed641 100644 --- a/util.go +++ b/util.go @@ -114,11 +114,16 @@ func sanitizeListenHost(listen string, advertised string) string { fatal(err) } - _, aport, err := net.SplitHostPort(aurl.Host) + ahost, aport, err := net.SplitHostPort(aurl.Host) if err != nil { fatal(err) } + // If the listen host isn't set use the advertised host + if listen == "" { + listen = ahost + } + return net.JoinHostPort(listen, aport) } From e28fd7cc2bee1c92980e8496fa1f09cbb72d74c4 Mon Sep 17 00:00:00 2001 From: Brandon Philips Date: Sat, 31 Aug 2013 21:53:58 -0700 Subject: [PATCH 2/3] fix(README): use 127.0.0.1 everywhere 0.0.0.0 used to be the default advertised ip, fix this everywhere. --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 687e48ced..32480ba6f 100644 --- a/README.md +++ b/README.md @@ -363,7 +363,7 @@ curl -L http://127.0.0.1:4001/v1/machines We should see there are three nodes in the cluster ``` -http://0.0.0.0:4001, http://0.0.0.0:4002, http://0.0.0.0:4003 +http://127.0.0.1:4001, http://127.0.0.1:4002, http://127.0.0.1:4003 ``` The machine list is also available via this API: @@ -373,7 +373,7 @@ curl -L http://127.0.0.1:4001/v1/keys/_etcd/machines ``` ```json -[{"action":"GET","key":"/_etcd/machines/node1","value":"raft=http://0.0.0.0:7001&etcd=http://0.0.0.0:4001","index":4},{"action":"GET","key":"/_etcd/machines/node2","value":"raft=http://0.0.0.0:7002&etcd=http://0.0.0.0:4002","index":4},{"action":"GET","key":"/_etcd/machines/node3","value":"raft=http://0.0.0.0:7003&etcd=http://0.0.0.0:4003","index":4}] +[{"action":"GET","key":"/_etcd/machines/node1","value":"raft=http://127.0.0.1:7001&etcd=http://127.0.0.1:4001","index":4},{"action":"GET","key":"/_etcd/machines/node2","value":"raft=http://127.0.0.1:7002&etcd=http://127.0.0.1:4002","index":4},{"action":"GET","key":"/_etcd/machines/node3","value":"raft=http://127.0.0.1:7003&etcd=http://127.0.0.1:4003","index":4}] ``` The key of the machine is based on the ```commit index``` when it was added. The value of the machine is ```hostname```, ```raft port``` and ```client port```. @@ -386,7 +386,7 @@ curl -L http://127.0.0.1:4001/v1/leader The first server we set up should be the leader, if it has not dead during these commands. ``` -http://0.0.0.0:7001 +http://127.0.0.1:7001 ``` Now we can do normal SET and GET operations on keys as we explored earlier. @@ -414,13 +414,13 @@ curl -L http://127.0.0.1:4001/v1/leader ``` ``` -http://0.0.0.0:7002 +http://127.0.0.1:7002 ``` or ``` -http://0.0.0.0:7003 +http://127.0.0.1:7003 ``` You should be able to see this: From de0a8c60ac52073267df2ced3d0250bee885db41 Mon Sep 17 00:00:00 2001 From: Brandon Philips Date: Sat, 31 Aug 2013 22:10:30 -0700 Subject: [PATCH 3/3] feat(README): document -cl flag --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 32480ba6f..05e789228 100644 --- a/README.md +++ b/README.md @@ -347,6 +347,9 @@ We use -s to specify server port and -c to specify client port and -d to specify ./etcd -s 127.0.0.1:7001 -c 127.0.0.1:4001 -d nodes/node1 -n node1 ``` +**Note:** If you want to run etcd on external IP address and still have access locally you need to add `-cl 0.0.0.0` so that it will listen on both external and localhost addresses. +A similar argument `-sl` is used to setup the listening address for the server port. + Let the join two more nodes to this cluster using the -C argument: ```sh