为 API BaaS 安装多个数据中心

Edge for Private Cloud v4.18.01

您可以使用主动/主动配置在多个数据中心安装 API BaaS。本文档介绍了如何将 BaaS 数据中心添加到现有 BaaS 数据中心。

在 Cassandra 集群与 Edge 共享时添加数据中心

所有数据中心都必须具有相同数量的 Cassandra 节点。API BaaS 安装可以使用自己的 Cassandra 集群,也可以与 Edge 共享 Cassandra 集群。

如果 BaaS 安装与 Edge 共享 Cassandra 集群,则必须更新原始数据中心内的 Management Server,将其配置为识别新数据中心内的 Cassandra 节点。

更新现有数据中心

添加新的 BaaS 数据中心(数据中心 2)需要您执行安装和配置新数据中心的步骤,但还需要您更新原始 BaaS 数据中心(数据中心 1)。这些修改是必要的,原因如下:

  • 您要在新数据中心内添加新的 Cassandra 节点,这些节点必须可供现有数据中心访问。
  • 您必须配置数据中心 1 中的 BaaS 堆栈节点使用的复制信息,以包含数据中心 2 中的信息。在安装数据中心 2 之前,您无法执行该配置。

如需在数据中心 1 上执行这些更新,请更新用于安装数据中心 1 的原始配置文件,然后在数据中心 1 的 Cassandra 节点上重新运行 apigee-setup。如果数据中心 1 的 Cassandra 集群与 Edge 安装共享,则您还必须更新管理服务器。

创建配置文件

如需安装数据中心 1,请使用 API BaaS 安装中显示的配置。在安装数据中心 1 时,配置文件不需要包含有关数据中心 2 的任何信息。您可以在安装数据中心 2 后向配置文件添加信息。

下面显示了数据中心 2 的配置文件。此配置文件假定您要在 10 个节点上安装 dc-2,如安装拓扑中所述。如果您要在 7 个节点上安装,请相应地修改此文件。

请注意,数据中心 2 (dc-2) 的配置文件包含有关数据中心 1 (dc-1) 的信息:

# Specify IP address or DNS name of node for dc-2.
IP1=192.168.1.1   # ElasticSearch
IP2=192.168.1.2   # ElasticSearch
IP3=192.168.1.3   # ElasticSearch
IP4=192.168.1.4   # API BaaS Stack
IP5=192.168.1.5   # API BaaS Stack
IP6=192.168.1.6   # API BaaS Stack
IP7=192.168.1.7   # API BaaS Portal
IP8=192.168.1.8   # Cassandra dc-2 (shared with Edge or standalone)
IP9=192.168.1.9   # Cassandra dc-2 (shared with Edge or standalone)
IP10=192.168.1.10  # Cassandra dc-2 (shared with Edge or standalone)

# Specify node information for dc-1
IP11=192.168.1.11   # Cassandra dc-1 (shared with Edge or standalone)
IP12=192.168.1.12   # Cassandra dc-1 (shared with Edge or standalone)
IP13=192.168.1.13   # Cassandra dc-1 (shared with Edge or standalone)
IP14=192.168.1.14   # API BaaS Stack
IP15=192.168.1.15   # API BaaS Stack

# Must resolve to IP address or DNS name of host - not to 127.0.0.1 or localhost.
HOSTIP=$(hostname -i)

# Define the API BaaS administrator account.  
AS_ADMIN="superuser"    # User name - default is "superuser".
AS_ADMIN_EMAIL=stackAdmin@email.com
AS_PASSWD=stackAdminPWord

# Specify Cassandra data center and rack suffix.
# List dc-2 nodes first, then dc-1.
# Must use IP addresses for CASS_HOSTS, not DNS names.
# CASS_HOSTS="$IP8:2,1 $IP9:2,1 $IP10:2,1 $IP11:1,1 $IP12:1,1 $IP13:1,1"

# Specify the Cassandra region.
REGION=dc-2

# Cassandra uname/pword.
# Even if Cassandra authentication is disabled,
# you must still pass values for these properties.
CASS_USERNAME=cassandra    # Default value
CASS_PASSWORD=cassandra    # Default value

# Specify BaaS Cassandra connection information.
# Specify the data center name as dc-2.
BAAS_CASS_LOCALDC=dc-2    

# Specify both data centers.
BAAS_CASS_DC_LIST=dc-1,dc-2

# Replication is in the form "dataCenterName:#CassandraNodes". 
# Specify both data centers.
BAAS_CASS_REPLICATION=dc-1:3,dc-2:3

# Defines the initial contact points for members of the BaaS cluster. 
# Specify the IP address of no more than two Stack nodes per data center.
# Specify both data centers. 
BAAS_CLUSTER_SEEDS="dc-1:$IP14,dc-1:$IP15,dc-2:$IP4,dc-2:$IP5"

# ElasticSearch IPs or DNS names, separated by spaces, for dc-2.
ES_HOSTS="$IP1 $IP2 $IP3"

# API BaaS Stack information.
# Default cluster name is "apigee_baas"
BAAS_USERGRID_CLUSTERNAME="apigee_baas" 

# URL and port of the load balancer for the API BaaS Stack nodes, 
# or IP/DNS and port 8080 of a single Stack node with no load balancer.
BAAS_USERGRID_URL=http://myloadbalancer:8443

# API BaaS Portal information.
# URL and port number of load balancer, if there is one in front of the Portal,
# or the URL and port of the Portal node.  
BAAS_PORTAL_URL="http://$IP7:9000"

# Portal port. Default value is 9000.
BAAS_PORTAL_LISTEN_PORT=9000 

# SMTP information. BaaS requires an SMTP server.
SMTPHOST=smtp.gmail.com
SMTPPORT=465
SMTPUSER=your@email.com
SMTPPASSWORD=yourEmailPassword
SMTPSSL=y
SMTPMAILFROM="My Company <myco@company.com>"

添加 BaaS 数据中心

  1. 按照 API BaaS 安装中的说明安装第一个数据中心。该文档包含用于安装数据中心 1 的配置文件。
  2. 按照上述说明为 dc-2 创建配置文件。
  3. 安装 Cassandra,可以作为现有 Edge 安装的一部分,也可以作为 BaaS 的独立集群:
    1. 使用互联网或非互联网过程,在 dc-2 的第一个 Cassandra 节点(机器 8)上安装 Edge apigee-setup 实用程序。如需了解详情,请参阅安装 Edge apigee-setup 实用程序。
    2. 在命令提示符处,运行设置脚本以在第一个节点上安装 Cassandra:
      > /opt/apigee/apigee-setup/bin/setup.sh -p c -f configFile

      “-p c”选项指定安装 Cassandra。

      配置文件必须可供“apigee”用户访问或读取。
    3. 对 dc-2 中的其余 Cassandra 节点(机器 9 和 10)重复第 3 步和第 4 步。
  4. 在 dc-1 的 Cassandra 节点上,根据 Cassandra 的安装方式,修改配置文件以添加数据中心 2 的 Cassandra 节点:

    # List dc-1 nodes first, then dc-2,
    # including Cassandra data center and rack suffix
    CASS_HOSTS="$IP11:1,1 $IP12:1,1 $IP13:1,1 $IP8:2,1 $IP9:2,1 $IP10:2,1"
  5. 在 dc-1 的第一个 Cassandra 节点上,使用包含 dc-2 中的 Cassandra 节点的新 dc-1 配置文件运行 setup.sh:
    > /opt/apigee/apigee-setup/bin/setup.sh -p c -f configFile
  6. 对 dc-1 中的其余 Cassandra 节点重复执行第 6 步和第 7 步。
  7. 如果您要连接到与 Edge 共享的 dc-1 的 Cassandra 集群,请将 dc-2 Cassandra 节点添加到 dc-1 的管理服务器节点的配置文件中,然后运行 setup.sh:
    > /opt/apigee/apigee-setup/bin/setup.sh -p ms -f configFile
  8. 使用两个数据中心的正确复制因子更新 Cassandra 键空间。您只需在任一数据中心内的任一 Cassandra 服务器上运行此步骤一次:

    注意:以下命令均将复制因子设置为“3”,表示集群中有三个 Cassandra 节点。根据安装需要修改此值。
    1. 启动 Cassandra cqlsh 实用程序:
      > /opt/apigee/apigee-cassandra/bin/cqlsh cassandraIP
    2. 在“cqlsh>”提示符处执行以下 CQL 命令,为 Cassandra 键空间设置复制级别:
      1. cqlsh> ALTER KEYSPACE "Apigee_Baas_dc_1" WITH replication = { 'class': 'NetworkTopologyStrategy', 'dc-1': '3','dc-2': '3' };
      2. cqlsh> ALTER KEYSPACE "Apigee_Baas" WITH replication = { 'class': 'NetworkTopologyStrategy', 'dc-1': '3','dc-2': '3' };
      3. cqlsh> ALTER KEYSPACE "Apigee_Baas_Locks" WITH replication = { 'class': 'NetworkTopologyStrategy', 'dc-1': '3','dc-2': '3' };
      4. cqlsh> ALTER KEYSPACE "system_traces" WITH replication = { 'class': 'NetworkTopologyStrategy', 'dc-1': '3','dc-2': '3' };
      5. cqlsh> ALTER KEYSPACE "system_auth" WITH replication = { 'class': 'NetworkTopologyStrategy', 'dc-1': '3','dc-2': '3' };
      6. 使用以下命令查看键空间:
        cqlsh> select * from system.schema_keyspaces;
      7. 退出 cqlsh:
        cqlsh> exit
  9. 在 dc-2 中的所有 Cassandra 节点上,运行 rebuild 命令,并指定 dc-1 的区域名称:
    > /opt/apigee/apigee-cassandra/bin/nodetool -h cassandraIP rebuild dc-1
  10. 在每个 Cassandra 节点上运行“nodetool status”,并验证所有 Cassandra 节点的“Owns”值是否为“100%”:
    > /opt/apigee/apigee-cassandra/bin/nodetool status
  11. 在 dc-2 中安装 BaaS:
    1. 修改配置文件,仅列出 dc-2 中的 Cassandra 节点:
      # 列出 dc-2 Cassandra 节点,
      # 省略 Cassandra 数据中心和机架后缀
      CASS_HOSTS="$IP8 $IP9 $IP10"
    2. 在 dc-2 的节点 4、5 和 6 上安装 ElasticSearch:
      > /opt/apigee/apigee-setup/bin/setup.sh -p e -f configFile
    3. 在 dc-2 的节点 4、5 和 6 上安装 BaaS 堆栈:
      > /opt/apigee/apigee-setup/bin/setup.sh -p b -f configFile
    4. 在机器 7 上安装 BaaS 门户:
      > /opt/apigee/apigee-setup/bin/setup.sh -p p -f configFile
  12. 更新数据中心 1 中的 BaaS 堆栈节点:
    1. 在数据中心 1 的第一个 BaaS Stack 节点上,在编辑器中修改 /opt/apigee/customer/application/usergrid.properties。如果该文件不存在,请创建它。
    2. 将以下属性添加到 usergrid.properties:
      # Same value as BAAS_CLUSTER_SEEDS in the dc-2 配置文件,
      # without double quotes.
      usergrid-deployment_usergrid.cluster.seeds=dc-1:dc1StackIP1,dc-1:dc1StackIP2,dc-2:dc2StackIP1,dc-2:dc2StackIP2

      # 与 dc-2 配置文件中的 BAAS_CASS_DC_LIST 值相同。
      usergrid-deployment_usergrid.cluster.region.list=dc-1,dc-2
    3. 在其余 BaaS 堆栈节点上重复执行步骤 a 和 b。
    4. 重启所有 BaaS Stack 节点。

      注意:重启 BaaS 堆栈节点时,请按照它们在 BAAS_CLUSTER_SEEDS 中列出的顺序重启。 BAAS_CLUSTER_SEEDS 最多列出两个 Stack 节点。按顺序重启这两个节点后,您可以按任意顺序重启其余节点。

      > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid restart
  13. 更新 BaaS 键空间值。这些键空间必须在安装时设置为复制,但在运行时不必如此。移除复制功能还可以节省 Cassandra 内存。

    ?您只需在任一数据中心的任一 Cassandra 服务器上运行此步骤一次:
    1. 启动 Cassandra cqlsh 实用程序:
      > /opt/apigee/apigee-cassandra/bin/cqlsh cassandraIP
    2. 执行以下 CQL 命令,为 Cassandra 键空间设置复制级别:
      1. cqlsh> ALTER KEYSPACE "Apigee_Baas_dc_1" WITH replication = { 'class': 'NetworkTopologyStrategy', 'dc-1': '3' };
      2. cqlsh> ALTER KEYSPACE "Apigee_Baas_dc_2" WITH replication = { 'class': 'NetworkTopologyStrategy', 'dc-2': '3' };
      3. 使用以下命令查看键空间:
        cqlsh> select * from system.schema_keyspaces;
      4. 退出 cqlsh:
        cqlsh> exit

第二个数据中心的安装现已完成。

完成两个数据中心的安装和配置后,您可以使用以下过程验证安装:

  1. 在所有 BaaS 堆栈节点上,检查状态:
    > curl 0:8080/status
  2. 检查令牌 API 调用是否正常运行:
    > curl -X POST "http://localhost:8080/management/token" -d '{"grant_type":"password", "username":"adminEmail","password":"pWord"}'
  3. 尝试登录 dc-2 的 BaaS 门户。验证所有数据是否都已复制到 dc-2,例如在 dc-1 上创建的集合。