diff --git hbase-common/src/main/java/org/apache/hadoop/hbase/HConstants.java hbase-common/src/main/java/org/apache/hadoop/hbase/HConstants.java index 24fa8e5..fe4133f 100644 --- hbase-common/src/main/java/org/apache/hadoop/hbase/HConstants.java +++ hbase-common/src/main/java/org/apache/hadoop/hbase/HConstants.java @@ -261,6 +261,9 @@ public final class HConstants { /** Parameter name for HBase instance root directory */ public static final String HBASE_DIR = "hbase.rootdir"; + /** Parameter name for whether to register regionserver' ip or hostname in zookeeper*/ + public static final String HBASE_REGIONSERVER_USE_IP = "hbase.regionserver.use.ip"; + /** Parameter name for HBase client IPC pool type */ public static final String HBASE_CLIENT_IPC_POOL_TYPE = "hbase.client.ipc.pool.type"; diff --git hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java index 9390eba..ee40c5c 100644 --- hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java +++ hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java @@ -39,6 +39,7 @@ import org.apache.commons.logging.LogFactory; import org.apache.hadoop.classification.InterfaceAudience; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.ClockOutOfSyncException; +import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.HRegionInfo; import org.apache.hadoop.hbase.RegionLoad; import org.apache.hadoop.hbase.Server; @@ -145,6 +146,8 @@ public class ServerManager { private final boolean checkingBackupMaster; private BaseLoadBalancer balancer; + private boolean useRegionserverIP = false; + /** * Set of region servers which are dead but not processed immediately. If one * server died before master enables ServerShutdownHandler, the server will be @@ -203,6 +206,7 @@ public class ServerManager { maxSkew = c.getLong("hbase.master.maxclockskew", 30000); warningSkew = c.getLong("hbase.master.warningclockskew", 10000); this.connection = connect ? HConnectionManager.getConnection(c) : null; + useRegionserverIP = c.getBoolean(HConstants.HBASE_REGIONSERVER_USE_IP, false); // Put this in constructor so we don't cast it every time // @@ -252,7 +256,8 @@ public class ServerManager { // is, reject the server and trigger its expiration. The next time it comes // in, it should have been removed from serverAddressToServerInfo and queued // for processing by ProcessServerShutdown. - ServerName sn = ServerName.valueOf(ia.getHostName(), port, serverStartcode); + ServerName sn = ServerName.valueOf(useRegionserverIP ? + ia.getHostAddress() : ia.getHostName(), port, serverStartcode); checkClockSkew(sn, serverCurrentTime); checkIsDead(sn, "STARTUP"); if (!checkAndRecordNewServer(sn, ServerLoad.EMPTY_SERVERLOAD)) { diff --git hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java index 8e62620..f31a588 100644 --- hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java +++ hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java @@ -461,9 +461,11 @@ public class HRegionServer extends HasThread implements this.abortRequested = false; this.stopped = false; + boolean useRegionserverIP = conf.getBoolean(HConstants.HBASE_REGIONSERVER_USE_IP, false); rpcServices = createRpcServices(); this.startcode = System.currentTimeMillis(); - String hostName = rpcServices.isa.getHostName(); + String hostName = useRegionserverIP ? + rpcServices.isa.getAddress().getHostAddress() : rpcServices.isa.getHostName(); serverName = ServerName.valueOf(hostName, rpcServices.isa.getPort(), startcode); // login the zookeeper client principal (if using security)