为 API BaaS 安装多个数据中心

Edge for Private Cloud v. 4.17.05

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

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

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

如果 BaaS 安装与边缘共享 Cassandra 集群,您必须更新原始数据中心中的管理服务器,以将其配置为识别新数据中心中的 Cassandra 节点。

更新现有数据中心

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

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

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

创建配置文件

如需安装数据中心 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

添加 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 节点:

    # 首先列出 dc-1 节点,然后是 dc-2,
    # 包括 Cassandra 数据中心和机架后缀
    CASS_HOSTS="$1,IP1IP1IP1:1,1,
  5. 在 dc-1 的第一个 Cassandra 节点上,使用新的 dc-1 配置文件运行 setup.sh,该文件包含 dc-2 中的 Cassandra 节点:
    > /opt/apigee/apigee-setup/bin/setup.sh -p c -f configFile
  6. 对 dc-1 中的其余 Cassandra 节点重复第 6 步和第 7 步。
  7. 如果要连接到 Cassandra 集群以与 Edge 共享 dc-1,请将 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 copy = { 'class': 'NetworkTopologyStrategy', 'dc-1': '3','dc-2': '3' };
      3. cqlsh> ALTER KEYSPACE "Apigee_Baas_Locks" WITH copy = { 'class': 'NetworkTopologyStrategy', 'dc-1': '3','dc-2': '3' };
      4. cqlsh> ALTER KEYSPACE" "system_traces" WITH copy = { 'class': 'NetworkTopologyStrategy', 'dc-1': '3','dc-2': '3' };
      5. cqlsh> ALTER KEYSPACE "system_auth" WITH copy = { 'class': 'NetworkTopologyStrategy', 'dc-1': '3','dc-2': '3' };
      6. 使用以下命令查看键空间:
        cqlsh> select * from system.schema_keyspaces;
      7. 退出 cqlsh:
        cqlsh> exit
  9. 在 dc-2 中的所有 Cassandra 节点上,运行重新构建命令,并指定 dc-1 的区域名称:
    > /opt/apigee/apigee-cassandra/bin/nodetool -h cassandraIP 重新构建 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 :
    4. 在机器 7 上安装 BaaS 门户:
      > /opt/apigee/apigee-setup/bin/setup.sh -p p -f configFile
  12. 更新数据中心 1 中的 BaaS 栈节点:
    1. 在数据中心 1 的第一个 BaaS 栈节点上,在编辑器中修改 /opt/apigee/customer/application/usergrid.properties。如果该文件不存在,请创建一个。
    2. 将以下属性添加到 usergrid.properties
      # 与 dc-2 配置文件中的 BAAS_CLUSTER_SEEDS 的值相同,
      # 不带英文双引号。
      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 堆栈节点。

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

      > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid
  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 copy = { 'class': 'NetworkTopologyStrategy', 'dc-1': '3' };
      2. cqlsh> ALTER KEYSPACE "Apigee_Baas_dc_2" WITH copy = { '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 上创建的集合。