Uploaded image for project: 'HBase'
  1. HBase
  2. HBASE-12954

Ability impaired using HBase on multihomed hosts

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Minor
    • Resolution: Fixed
    • 0.98.4
    • 1.1.0, 2.0.0
    • None
    • None
    • Reviewed
    • Hide
      The following config is added by this JIRA:

      hbase.regionserver.hostname

      This config is for experts: don't set its value unless you really know what you are doing.
      When set to a non-empty value, this represents the (external facing) hostname for the underlying server.
      See https://issues.apache.org/jira/browse/HBASE-12954 for details.

      Caution: please make sure rolling upgrade succeeds before turning on this feature.
      Show
      The following config is added by this JIRA: hbase.regionserver.hostname This config is for experts: don't set its value unless you really know what you are doing. When set to a non-empty value, this represents the (external facing) hostname for the underlying server. See https://issues.apache.org/jira/browse/HBASE-12954 for details. Caution: please make sure rolling upgrade succeeds before turning on this feature.

    Description

      For HBase clusters running on unusual networks (such as NAT'd cloud environments or physical machines with multiple IP's per network interface) it would be ideal to have a way to both specify:

      1. which IP interface to which HBase master or region-server will bind
      2. what hostname HBase will advertise in Zookeeper both for a master or region-server process

      While efforts such as HBASE-8640 go a long way to normalize these two sources of information, it is not possible in the current design of the properties available to an administrator for these to be unambiguously specified.

      One has been able to request hbase.master.ipc.address or hbase.regionserver.ipc.address but one can not specify the desired HBase hbase.master.hostname. (It was removed in HBASE-1357, further I am unaware of a region-server equivalent.)

      I use a configuration management system to generate all of my configuration files on a per-machine basis. As such, an option to generate a file specifying exactly which hostname to use would be helpful.

      Today, specifying the bind address for HBase works and one can use an HBase-only DNS for faking what to put in Zookeeper but this is far from ideal. Network interfaces have no intrinsic IP address, nor hostname. Specifing a DNS server is awkward as the DNS server may differ from the system's resolver and is a single IP address. Similarly, on hosts which use a transient VIP (e.g. through keepalived) for other services, it means there's a seemingly non-deterministic hostname choice made by HBase depending on the state of the VIP at daemon start-up time.

      I will attach two networking examples I use which become very difficult to manage under the current properties.

      Attachments

        1. 12954-addendum.txt
          1 kB
          Ted Yu
        2. 12954-branch-1-v14.txt
          36 kB
          Ted Yu
        3. 12954-v1.txt
          24 kB
          Ted Yu
        4. 12954-v10.txt
          37 kB
          Ted Yu
        5. 12954-v11.txt
          36 kB
          Ted Yu
        6. 12954-v12.txt
          36 kB
          Ted Yu
        7. 12954-v12.txt
          36 kB
          Ted Yu
        8. 12954-v12.txt
          36 kB
          Ted Yu
        9. 12954-v13.txt
          36 kB
          Ted Yu
        10. 12954-v14.txt
          36 kB
          Ted Yu
        11. 12954-v7.txt
          34 kB
          Ted Yu
        12. 12954-v8.txt
          36 kB
          Ted Yu
        13. Hadoop Three Interfaces.png
          59 kB
          Clay B.

        Issue Links

          Activity

            People

              yuzhihong@gmail.com Ted Yu
              clayb Clay B.
              Votes:
              0 Vote for this issue
              Watchers:
              25 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: