ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

在 Azure 虚拟网络中设置 Apache HBase 群集复制

2020-02-20 20:05:16  阅读:233  来源: 互联网

标签:虚拟 群集 Azure 复制 DNS Apache HBase


https://docs.azure.cn/zh-cn/hdinsight/hbase/apache-hbase-replication

了解如何在 Azure 中的一个虚拟网络内部或者在两个虚拟网络之间设置 Apache HBase 复制。

群集复制使用源推送方法。 HBase 群集可以是一个源或目标,也可以同时充当这两个角色。 复制是异步的。 复制的目标是保持最终一致性。 在启用复制的情况下,当源接收到对列系列的编辑时,该编辑将传播到所有目标群集。 当数据从一个群集复制到另一个群集,会跟踪源群集和所有已使用数据的群集,防止复制循环。

本教程介绍如何设置源-目标复制。 对于其他群集拓扑,请参阅 Apache HBase 参考指南

下面是单个虚拟网络的 HBase 复制用例:

  • 负载均衡。 例如,可以在目标群集上运行扫描或 MapReduce 作业,在源群集上引入数据。
  • 添加高可用性。
  • 在不同的 HBase 群集之间迁移数据。
  • 将 Azure HDInsight 群集从一个版本升级到另一个版本。

下面是两个虚拟网络的 HBase 复制用例:

  • 设置灾难恢复。
  • 对应用程序进行负载均衡和分区。
  • 添加高可用性。

可以使用 GitHub 中的脚本操作脚本复制群集。

先决条件

在开始学习本教程之前,必须有一个 Azure 订阅。

设置环境

有三个配置选项:

  • 两个 Apache HBase 群集位于一个 Azure 虚拟网络中。
  • 两个 Apache HBase 群集位于同一区域中的两个不同虚拟网络中。
  • 两个 Apache HBase 群集位于两个不同区域中的两个不同虚拟网络中(异地复制)。

本文介绍异地复制方案。

为了帮助设置环境,我们创建了一些 Azure 资源管理器模板。 如果想要使用其他方法设置环境,请参阅:

在两个不同的区域中设置两个虚拟网络

若要使用模板在两个不同区域创建两个虚拟网络并在 VNet 之间创建 VPN 连接,请选择下面的“部署到 Azure”按钮 。 模板定义存储在公共 blob 存储中。

Deploy to Azure

模板中的某些硬编码值:

VNet 1

属性Value
位置 美国西部
VNet 名称 <ClusterNamePrevix>-vnet1
地址空间前缀 10.1.0.0/16
子网名称 子网 1
子网前缀 10.1.0.0/24
子网(网关)名称 GatewaySubnet(不能更改)
子网(网关)前缀 10.1.255.0/27
网关名称 vnet1gw
网关类型 Vpn
网关 VPN 类型 RouteBased
网关 SKU 基本
网关 IP vnet1gwip

VNet 2

属性Value
位置 美国东部
VNet 名称 <ClusterNamePrevix>-vnet2
地址空间前缀 10.2.0.0/16
子网名称 子网 1
子网前缀 10.2.0.0/24
子网(网关)名称 GatewaySubnet(不能更改)
子网(网关)前缀 10.2.255.0/27
网关名称 vnet2gw
网关类型 Vpn
网关 VPN 类型 RouteBased
网关 SKU 基本
网关 IP vnet1gwip

设置 DNS

在上一部分,模板在两个虚拟网络的每一个中创建 Ubuntu 虚拟机。 在此部分,请先在两个 DNS 虚拟机上安装 Bind,然后在两个虚拟机上配置 DNS 转发。

若要安装 Bind,需找到两个 DNS 虚拟机的公共 IP 地址。

  1. 打开 Azure 门户
  2. 打开 DNS 虚拟机,方法是选择“资源组”> [资源组名称] > [vnet1DNS] 。 资源组名称是在上一过程中创建的。 默认的 DNS 虚拟机名称为 vnet1DNS 和 vnet2NDS
  3. 选择“属性”,打开虚拟网络的属性页。
  4. 记下“公共 IP 地址”,并验证“专用 IP 地址” 。 vnet1DNS 的专用 IP 地址应该是 10.1.0.4,vnet2DNS 的专用 IP 地址应该是 10.2.0.4。
  5. 将两个虚拟网络的 DNS 服务器更改为使用默认(Azure 提供的)DNS 服务器以允许对下载包进行入站和出站访问,从而可以按以下步骤安装 Bind。

若要安装 Bind,请执行以下过程:

  1. 使用 SSH 连接到 DNS 虚拟机的公共 IP 地址 。 以下示例连接到位于 40.68.254.142 的虚拟机:

    bash
    ssh sshuser@40.68.254.142
    

    将 sshuser 替换为创建 DNS 虚拟机时指定的 SSH 用户帐户。

     备注

    可通过多种方法获取 ssh 实用工具。 在 Linux、Unix 和 macOS 上,操作系统会附带此实用工具。 如果使用的是 Windows,请考虑以下选项之一:

  2. 若要安装 Bind,请通过 SSH 会话使用以下命令:

    bash
    sudo apt-get update -y
    sudo apt-get install bind9 -y
    
  3. 配置 Bind 以将名称解析请求转发到本地 DNS 服务器。 为此,请使用以下文本作为 /etc/bind/named.conf.options 文件的内容:

    acl goodclients {
        10.1.0.0/16; # Replace with the IP address range of the virtual network 1
        10.2.0.0/16; # Replace with the IP address range of the virtual network 2
        localhost;
        localhost;
    };
    
    options {
        directory "/var/cache/bind";
        recursion yes;
        allow-query { goodclients; };
    
        forwarders {
            168.63.129.16; #This is the Azure DNS server
        };
    
        dnssec-validation auto;
    
        auth-nxdomain no;    # conform to RFC1035
        listen-on-v6 { any; };
    };
    

     重要

    将 goodclients 节中的值替换为两个虚拟网络的 IP 地址范围。 此节定义此 DNS 服务器从其接受请求的地址。

    若要编辑该文件,请使用以下命令:

    bash
    sudo nano /etc/bind/named.conf.options
    

    若要保存文件,请使用 Ctrl+X、Y,然后按 Enter。

  4. 在 SSH 会话中使用以下命令:

    bash
    hostname -f
    

    此命令返回类似于以下文本的值:

     vnet1DNS.icb0d0thtw0ebifqt0g1jycdxd.ex.internal.chinacloudapp.cn
    

    icb0d0thtw0ebifqt0g1jycdxd.ex.internal.chinacloudapp.cn 文本是此虚拟网络的 DNS 后缀。 保存该值,因为以后会用到。

    还必须从其他 DNS 服务器中找出 DNS 后缀。 因为下一步骤需要用到。

  5. 若要配置 Bind,以便为虚拟网络中的资源解析 DNS 名称,请使用以下文本作为 /etc/bind/named.conf.local 文件的内容:

    // Replace the following with the DNS suffix for your virtual network
    zone "v5ant3az2hbe1edzthhvwwkcse.bx.internal.chinacloudapp.cn" {
            type forward;
            forwarders {10.2.0.4;}; # The Azure recursive resolver
    };
    

     重要

    必须将 v5ant3az2hbe1edzthhvwwkcse.bx.internal.chinacloudapp.cn 替换为另一个虚拟网络的 DNS 后缀。 转发器 IP 是另一虚拟网络中 DNS 服务器的专用 IP 地址。

    若要编辑该文件,请使用以下命令:

    bash
    sudo nano /etc/bind/named.conf.local
    

    若要保存文件,请使用 Ctrl+X、Y,然后按 Enter。

  6. 若要启动 Bind,请使用以下命令:

    bash
    sudo service bind9 restart
    
  7. 若要验证绑定是否可以解析另一虚拟网络中的资源名称,请使用以下命令:

    bash
    sudo apt install dnsutils
    nslookup vnet2dns.v5ant3az2hbe1edzthhvwwkcse.bx.internal.chinacloudapp.cn
    

     重要

    将 vnet2dns.v5ant3az2hbe1edzthhvwwkcse.bx.internal.chinacloudapp.cn 替换为另一网络中 DNS 虚拟机的完全限定的域名 (FQDN)。

    将 10.2.0.4 替换为另一虚拟网络中自定义 DNS 服务器的内部 IP 地址 。

    显示的响应类似于以下文本:

    Server:         10.2.0.4
    Address:        10.2.0.4#53
    
    Non-authoritative answer:
    Name:   vnet2dns.v5ant3az2hbe1edzthhvwwkcse.bx.internal.chinacloudapp.cn
    Address: 10.2.0.4
    

    到目前为止,如果不指定 DNS 服务器 IP 地址,则无法查找另一网络中的 IP 地址。

将虚拟网络配置为使用自定义 DNS 服务器

若要将虚拟网络配置为使用自定义 DNS 服务器而非 Azure 递归解析程序,请执行以下步骤:

  1. 在 Azure 门户中选择虚拟网络,然后选择“DNS 服务器” 。

  2. 选择“自定义” ,并输入自定义 DNS 服务器的内部 IP 地址。 最后,选择“保存” 。

  3. 打开 vnet1 中的 DNS 服务器虚拟机,然后单击“重启”。 必须重启虚拟网络中的所有虚拟机才能使 DNS 配置生效。

  4. 重复这些步骤即可为 vnet2 配置自定义 DNS 服务器。

若要测试 DNS 配置,可以使用 SSH 连接到这两个 DNS 虚拟机,然后使用其主机名称 ping 另一虚拟网络的 DNS 服务器。 如果不起作用,请使用以下命令来检查 DNS 状态:

bash
sudo service bind9 status

创建 Apache HBase 群集

使用以下配置在这两个虚拟网络的每一个中创建 Apache HBase 群集:

  • 资源组名称:使用的资源组名称与创建虚拟网络时所用的相同。
  • 群集类型:HBase
  • 版本:HBase 1.1.2 (HDI 3.6)
  • 位置:使用与虚拟网络相同的位置。 默认情况下,vnet1 为“中国东部”,vnet2 为“中国北部”。
  • 存储:为群集创建新的存储帐户。
  • 虚拟网络(在门户的“高级设置”中):选择在上一过程中创建的 vnet1。
  • 子网:模板中所用的默认名称为 subnet1。

若要确保正确配置环境,必须能够在两个群集之间 ping 头节点的 FQDN。

加载测试数据

复制群集时,必须指定要复制的表。 在本节中,要将一些数据载入源群集。 下一部分会在两个群集之间启用复制。

若要创建一个“联系人”表并在其中插入一些数据,请按照 Apache HBase 教程 :开始在 HDInsight 中使用 Apache HBase 中的说明进行操作。

 备注

如果要从自定义命名空间复制表,则需要确保也在目标群集上定义相应的自定义命名空间。

启用复制

以下步骤说明如何从 Azure 门户调用脚本操作脚本。 有关使用 Azure PowerShell 和 Azure 经典 CLI 运行脚本操作的信息,请参阅使用脚本操作自定义 HDInsight 群集

从 Azure 门户启用 HBase 复制

  1. 登录到 Azure 门户

  2. 打开源 HBase 群集。

  3. 在群集菜单中,选择“脚本操作”。

  4. 在页面顶部,选择“提交新项”。

  5. 选择或输入以下信息:

    1. 名称:输入“启用复制” 。

    2. Bash 脚本 URL:输入 https://raw.githubusercontent.com/Azure/hbase-utils/master/replication/hdi_enable_replication.sh 。

    3. 头:确保已选定。 清除其他节点类型。

    4. 参数:以下示例参数将对所有现有表启用复制,并将源群集中的所有数据复制到目标群集:

      -m hn1 -s <source hbase cluster name> -d <destination hbase cluster name> -sp <source cluster Ambari password> -dp <destination cluster Ambari password> -copydata
      

       备注

      对源和目标群集 DNS 名称使用主机名而不是 FQDN。

      本演练假设 hn1 为活动头节点。 请检查群集以确定活动头节点。

  6. 选择“创建” 。 该脚本可能会运行一段时间,尤其是在使用 -copydata 参数的情况下。

必需参数:

名称说明
-s、--src-cluster 指定源 HBase 群集的 DNS 名称。 例如:-s hbsrccluster、--src-cluster=hbsrccluster
-d、--dst-cluster 指定目标(副本)HBase 群集的 DNS 名称。 例如:-s dsthbcluster、--src-cluster=dsthbcluster
-sp、--src-ambari-password 指定源 HBase 群集的 Ambari 管理员密码。
-dp、--dst-ambari-password 指定目标 HBase 群集的 Ambari 管理员密码。

可选参数:

名称说明
-su、--src-ambari-user 指定源 HBase 群集的 Ambari 管理员用户名。 默认值为 admin。
-du、--dst-ambari-user 指定目标 HBase 群集的 Ambari 管理员用户名。 默认值为 admin。
-t、--table-list 指定要复制的表。 例如:--table-list="table1;table2;table3"。 如果不指定表,将复制所有现有的 HBase 表。
-m、--machine 指定要在其中运行脚本操作的头节点。 此值应当根据活动的头节点进行选择。 在 HDInsight 门户或 Azure PowerShell 中以脚本操作的形式运行 $0 脚本时,可使用此选项。
-cp、-copydata 在启用复制的情况下,允许迁移表中的现有数据。
-rpm、-replicate-phoenix-meta 针对 Phoenix 系统表启用复制。

请慎用此选项。 我们建议在使用此脚本之前,在副本群集上重新创建 Phoenix 表。
-h、--help 显示用法信息。

脚本的 print_usage() 节中提供了详细的参数说明。

成功部署脚本操作后,可以使用 SSH 连接到目标 HBase 群集,并验证是否已复制数据。

复制方案

以下列表显示了一些普通用例及其参数设置:

  • 针对两个群集之间的所有表启用复制。 此方案不需要复制或迁移表中的现有数据,也不使用 Phoenix 表。 使用以下参数:

      -m hn1 -s <source hbase cluster name> -d <destination hbase cluster name> -sp <source cluster Ambari password> -dp <destination cluster Ambari password>  
    
  • 针对特定的表启用复制。 若要针对 table1、table2 和 table3 启用复制,请使用以下参数:

      -m hn1 -s <source hbase cluster name> -d <destination hbase cluster name> -sp <source cluster Ambari password> -dp <destination cluster Ambari password> -t "table1;table2;table3"
    
  • 针对特定的表启用复制并复制现有数据。 若要针对 table1、table2 和 table3 启用复制,请使用以下参数:

      -m hn1 -s <source hbase cluster name> -d <destination hbase cluster name> -sp <source cluster Ambari password> -dp <destination cluster Ambari password> -t "table1;table2;table3" -copydata
    
  • 针对所有表启用复制,并将 Phoenix 元数据从源复制到目标。 Phoenix 元数据复制并不完善, 请谨慎使用。 使用以下参数:

      -m hn1 -s <source hbase cluster name> -d <destination hbase cluster name> -sp <source cluster Ambari password> -dp <destination cluster Ambari password> -t "table1;table2;table3" -replicate-phoenix-meta
    

复制并迁移数据

启用复制后,可以使用两个单独的脚本操作脚本来复制或迁移数据:

可以遵循启用复制中所述的相同过程来调用脚本操作。 使用以下参数:

-m hn1 -t <table1:start_timestamp:end_timestamp;table2:start_timestamp:end_timestamp;...> -p <replication_peer> [-everythingTillNow]

脚本的 print_usage() 节中提供了详细的参数说明。

方案

  • 复制特定表(test1、test2 和 test3)中到目前(当前时间戳)为止编辑的所有行:

      -m hn1 -t "test1::;test2::;test3::" -p "zk5-hbrpl2;zk1-hbrpl2;zk5-hbrpl2:2181:/hbase-unsecure" -everythingTillNow
    

    或者:

      -m hn1 -t "test1::;test2::;test3::" --replication-peer="zk5-hbrpl2;zk1-hbrpl2;zk5-hbrpl2:2181:/hbase-unsecure" -everythingTillNow
    
  • 复制指定时间范围内的特定表:

      -m hn1 -t "table1:0:452256397;table2:14141444:452256397" -p "zk5-hbrpl2;zk1-hbrpl2;zk5-hbrpl2:2181:/hbase-unsecure"
    

禁用复制

若要禁用复制,可以使用 GitHub 中的另一个脚本操作脚本。 可以遵循启用复制中所述的相同过程来调用脚本操作。 使用以下参数:

-m hn1 -s <source hbase cluster name> -sp <source cluster Ambari password> <-all|-t "table1;table2;...">  

脚本的 print_usage() 节中提供了详细的参数说明。

方案

  • 对所有表禁用复制:

      -m hn1 -s <source hbase cluster name> -sp Mypassword\!789 -all
    

      --src-cluster=<source hbase cluster name> --dst-cluster=<destination hbase cluster name> --src-ambari-user=<source cluster Ambari user name> --src-ambari-password=<source cluster Ambari password>
    
  • 对指定的表(table1、table2 和 table3)禁用复制 :

      -m hn1 -s <source hbase cluster name> -sp <source cluster Ambari password> -t "table1;table2;table3"
    

 备注

如果要删除目标群集,请确保将其从源群集的对等列表中删除。 可以通过在源群集上的 hbase shell 中运行命令 remove_peer '1' 来完成此操作。 如果不这样做,源群集可能无法正常运行。

后续步骤

本文介绍了如何设置一个虚拟网络内部或者两个虚拟网络之间的 Apache HBase 复制。 若要了解有关 HDInsight 和 Apache HBase 的详细信息,请参阅以下文章:

标签:虚拟,群集,Azure,复制,DNS,Apache,HBase
来源: https://www.cnblogs.com/dhcn/p/12337166.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有