Hi Vishal,

Each server uses a different configuration file, so config files for
different servers can be different.  If you were in a situation where you
would _want_ to bind to the wildcard interface, then you would need
different configuration files anyway.  For example....

Assume Server 1 has two interfaces, one for each of 192.168.0.1 and
192.168.0.2.
---- Server 1 config file -----
server.1=*:3181:4181
server.2=192.169.0.3:3181:4181
server.3=192.169.0.4:3181:4181
----------------------------------

---- Server 2 config file -----
server.1=192.168.0.1:3181:4181  <--- note the ip
server.2=192.169.0.3:3181:4181
server.3=192.169.0.4:3181:4181
----------------------------------

---- Server 3 config file -----
server.1=192.168.0.2:3181:4181  <--- note the ip
server.2=192.169.0.3:3181:4181
server.3=192.169.0.4:3181:4181
----------------------------------

In this situation, where two servers are communicating with you through
different addresses, server 1 needs to bind to *.  However, in the normal
case where everyone has the same config file, every server will communicate
with server 1 on the same address, so server 1 has no need to bind to any
other address.

To me it seems like another config option would tell server 1 to bind to
wildcard (or a host or whatever), but then the config files of the servers
would still have to be different...

Does that make sense?

Jared


On Fri, Aug 27, 2010 at 10:49 AM, Vishal K <vishalm...@gmail.com> wrote:

> Hi Jared,
>
> If we keep this optional, then the servers would not need to bind to any
> specific interface. We will just use the current implementation
> (InetSocketAddress(port) with wildcard IP).
> You are right, keeping it optional does not buy us much. However, I did not
> understand your solution of using "server.#:0.0.0.0[:port][:port]" in the
> config file.
> How will a peer know the IP address of other peers?
>
> -Vishal
>
> On Fri, Aug 27, 2010 at 10:20 AM, Jared Cantwell
> <jared.cantw...@gmail.com>wrote:
>
> > Thanks for the response Vishal.  I agree that it should be used for both
> > FLE
> > and normal communication (both server ports).  I believe the diff I sent
> > incorporates that thinking, although I may not have been clear.  I
> > considered that it be optional, but cases where you would want it to bind
> > on
> > all interfaces seem rare to me, since it would require specializing the
> > config files for each server so that two different servers communicated
> > with
> > a third server on different ports.  Users who would want this to be
> > optional
> > could achieve the same effect by specifying their own
> > "server.#=address[:port][:[port]" entry as
> > "server.#:0.0.0.0[:port][:port]".
> >
> > I guess my proposal is that the address specified in the server.# should
> be
> > used.  Advanced configurations can specify 0:0:0:0 to get the current
> > behavior.  This way there wouldn't need to be another option to say that
> > (which would need customized anyway in such configurations).
> >
> > ~Jared
> >
> > On Fri, Aug 27, 2010 at 9:45 AM, Vishal K <vishalm...@gmail.com> wrote:
> >
> > > Hi Jared,
> > >
> > > I like the idea of allowing communication with ZK on only the IP
> > addresses
> > > specified in the config file. This is useful when you are having a host
> > > with
> > > multiple IP address and/or when you want to have traffic isolation. In
> > our
> > > setup, we will use this feature for traffic isolation. We have multiple
> > > interfaces on the server, and we want to route certain type of traffic
> > > through certain interfaces.
> > >
> > > Why not have this feature for both FLE and leader-follower
> communication?
> > I
> > > would suggest to keep this optional (add a property) since most users
> > would
> > > prefer to have the ability to reach the servers from all interfaces.
> > >
> > > -Vishal
> > >
> > > On Thu, Aug 26, 2010 at 1:34 PM, Jared Cantwell <
> > jared.cantw...@gmail.com
> > > >wrote:
> > >
> > > > Hello,
> > > >
> > > > My project currently has the need to specify the local address that
> is
> > > used
> > > > for leader communication (and not use the default of listening on all
> > > > interfaces).  This is similar to the clientPortAddress parameter that
> > was
> > > > recently added.  After reviewing the code, we can't think of a reason
> > why
> > > > only the port would be used with the wildcard interface, when servers
> > are
> > > > already connecting specifically to that interface anyway.  Is binding
> > to
> > > > the
> > > > wildcard interface for leader communication intentional?
> > > >
> > > > I believe the change would be straightforward-- one change for each
> > > leader
> > > > port used.  Note: this doesn't account for all leader election
> > > algorithms,
> > > > only the default.
> > > >
> > > > Index:
> > > >
> src/java/main/org/apache/zookeeper/server/quorum/QuorumCnxManager.java
> > > > ===================================================================
> > > > ---
> > > >
> src/java/main/org/apache/zookeeper/server/quorum/QuorumCnxManager.java
> > > > (revision 989805)
> > > > +++
> > > >
> src/java/main/org/apache/zookeeper/server/quorum/QuorumCnxManager.java
> > > > (working copy)
> > > > @@ -434,7 +434,7 @@
> > > >                     ss = ServerSocketChannel.open();
> > > >                     int port =
> > > > self.quorumPeers.get(self.getId()).electionAddr.getPort();
> > > >                     ss.socket().setReuseAddress(true);
> > > > -                    InetSocketAddress addr = new
> > > InetSocketAddress(port);
> > > > +                    InetSocketAddress addr =
> > > > self.quorumPeers.get(self.getId()).electionAddr;
> > > >                     LOG.info("My election bind port: " +
> > > addr.toString());
> > > >                     setName(addr.toString());
> > > >                     ss.socket().bind(addr);
> > > > Index: src/java/main/org/apache/zookeeper/server/quorum/Leader.java
> > > > ===================================================================
> > > > --- src/java/main/org/apache/zookeeper/server/quorum/Leader.java
> > > > (revision 989805)
> > > > +++ src/java/main/org/apache/zookeeper/server/quorum/Leader.java
> > > >  (working
> > > > copy)
> > > > @@ -128,10 +128,11 @@
> > > >     Leader(QuorumPeer self,LeaderZooKeeperServer zk) throws
> IOException
> > {
> > > >         this.self = self;
> > > >         try {
> > > > -            ss = new
> ServerSocket(self.getQuorumAddress().getPort());
> > > > +            ss = new ServerSocket();
> > > > +        ss.bind(self.getQuorumAddress());
> > > >         } catch (BindException e) {
> > > > -            LOG.error("Couldn't bind to port "
> > > > -                    + self.getQuorumAddress().getPort(), e);
> > > > +            LOG.error("Couldn't bind to address "
> > > > +                    + self.getQuorumAddress().getAddress() + ":" +
> > > > self.getQuorumAddress().getPort(), e);
> > > >             throw e;
> > > >         }
> > > >         this.zk=zk;
> > > >
> > > >
> > > > Does this seem like a reasonable change? Thoughts?
> > > >
> > > > ~Jared
> > > >
> > >
> >
>

Reply via email to