Package com.netflix.eureka.aws
Class EIPManager
- java.lang.Object
-
- com.netflix.eureka.aws.EIPManager
-
- All Implemented Interfaces:
AwsBinder
@Singleton public class EIPManager extends java.lang.Object implements AwsBinder
An AWS specific elastic ip binding utility for binding eureka servers for a well knownIP address.Eureka clients talk to Eureka servers bound with well known
IP addressessince that is the most reliable mechanism to discover the Eureka servers. When Eureka servers come up they bind themselves to a well known elastic ipThis binding mechanism gravitates towards one eureka server per zone for resilience. At least one elastic ip should be slotted for each eureka server in a zone. If more than eureka server is launched per zone and there are not enough elastic ips slotted, the server tries to pick a free EIP slotted for other zones and if it still cannot find a free EIP, waits and keeps trying.
-
-
Constructor Summary
Constructors Constructor Description EIPManager(EurekaServerConfig serverConfig, com.netflix.discovery.EurekaClientConfig clientConfig, PeerAwareInstanceRegistry registry, com.netflix.appinfo.ApplicationInfoManager applicationInfoManager)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidbindEIP()Checks if an EIP is bound and optionally binds the EIP.java.util.Collection<java.lang.String>getCandidateEIPs(java.lang.String myInstanceId, java.lang.String myZone)Get the list of EIPs in the order of preference depending on instance zone.booleanisEIPBound()Checks if an EIP is already bound to the instance.voidshutdown()voidstart()voidunbindEIP()Unbind the EIP that this instance is associated with.
-
-
-
Constructor Detail
-
EIPManager
@Inject public EIPManager(EurekaServerConfig serverConfig, com.netflix.discovery.EurekaClientConfig clientConfig, PeerAwareInstanceRegistry registry, com.netflix.appinfo.ApplicationInfoManager applicationInfoManager)
-
-
Method Detail
-
isEIPBound
public boolean isEIPBound()
Checks if an EIP is already bound to the instance.- Returns:
- true if an EIP is bound, false otherwise
-
bindEIP
public void bindEIP()
Checks if an EIP is bound and optionally binds the EIP. The list of EIPs are arranged with the EIPs allocated in the zone first followed by other EIPs. If an EIP is already bound to this instance this method simply returns. Otherwise, this method tries to find an unused EIP based on information from AWS. If it cannot find any unused EIP this method, it will be retried for a specified interval. One of the following scenarios can happen here : 1) If the instance is already bound to an EIP as deemed by AWS, no action is taken. 2) If an EIP is already bound to another instance as deemed by AWS, that EIP is skipped. 3) If an EIP is not already bound to an instance and if this instance is not bound to an EIP, then the EIP is bound to this instance.
-
unbindEIP
public void unbindEIP() throws java.lang.ExceptionUnbind the EIP that this instance is associated with.- Throws:
java.lang.Exception
-
getCandidateEIPs
public java.util.Collection<java.lang.String> getCandidateEIPs(java.lang.String myInstanceId, java.lang.String myZone)Get the list of EIPs in the order of preference depending on instance zone.- Parameters:
myInstanceId- the instance id for this instancemyZone- the zone where this instance is in- Returns:
- Collection containing the list of available EIPs
-
-