在虚拟机上创建部署

本文档介绍了如何在虚拟机 (VM) 上部署 Spanner Omni。此部署未加密。如果您想快速设置测试或概念验证环境来评估 Spanner Omni,那么创建不安全的部署是快速入门的最佳方式,因为您无需配置 mTLS 或其他安全措施。不过,由于存在安全风险(例如未加密的网络流量和开放式访问),我们不建议在生产环境中使用此配置。您可以选择单服务器部署或跨多个可用区的区域部署。

准备工作

在设置不安全的部署之前,请确保满足以下要求:

  • SSH 访问权限:拥有对部署中每台机器的 SSH 访问权限,以便下载和运行 Spanner Omni 二进制文件。

  • 连接性:部署中的所有机器都可以相互连接。

  • 网络:您的网络配置允许在端口 15000 到 15025 上进行 TCP 通信。

  • 存储空间:每台机器都有足够的存储空间来托管部署所处理的数据。

  • 系统要求:确保您的设置符合所有系统要求。

  • vSphere 配置:如果您在 vSphere 虚拟化平台上运行 Spanner Omni,请停用时间戳计数器 (TSC) 的虚拟化。将 monitor_control.virtual_rdtsc = FALSE 添加到虚拟机的 .vmx 配置文件中。

第 1 步:确定部署拓扑

Spanner Omni 使用位置、可用区和服务器的层次结构来定义其部署拓扑。您可以根据可用性目标选择以下拓扑:

  • 单服务器:部署包含在单台机器上运行的单个服务器。

  • 单可用区:部署在分布于单个可用区的多个服务器上运行。

  • 单个位置,多个可用区(复制部署):部署在单个位置的多个可用区中分布的多个服务器上运行。

  • 多个位置、多个可用区:部署在分布于多个位置和多个可用区的多个服务器上运行。

如需了解详情,请参阅 Spanner Omni 关键术语和 Spanner Omni 部署配置。

对于单服务器以外的任何部署,请创建一个名为 deployment.yaml 的 YAML 配置文件,用于定义拓扑。在此文件中仅指定根服务器。稍后添加非根服务器。

示例:复制的多可用区部署

以下示例展示了跨三个可用区的区域部署的配置。

name: regional-deployment
location:
  - name: us-central1
zone:
  - name: us-central1-a
    location: us-central1
    single_server: false
    root_server:
      - host: rootserver1
  - name: us-central1-b
    location: us-central1
    single_server: false
    root_server:
      - host: rootserver2
  - name: us-central1-c
    location: us-central1
    single_server: false
    root_server:
      - host: rootserver3

示例:多位置部署

以下示例展示了跨三个位置的部署配置。

name: multi-location-deployment
location:
  - name: us-central1
  - name: europe-west2
  - name: asia-southeast1
zone:
  - name: us-central1-a
    location: us-central1
    single_server: false
    root_server:
      - host: rootserver1
  - name: europe-west2-a
    location: europe-west2
    single_server: false
    root_server:
      - host: rootserver2
  - name: asia-southeast1-a
    location: asia-southeast1
    single_server: false
    root_server:
      - host: rootserver3

第 2 步:下载并设置二进制文件

针对部署中的每台机器重复执行以下步骤:

  1. 为二进制文件创建一个目录,并导航到该目录。

  2. 下载二进制文件:

    gsutil cp gs://spanner-omni/VERSION/spanner-omni-VERSION-linux-x86_64.tar.gz .
    

    您还可以使用 scp 或其他文件传输工具将二进制文件复制到虚拟机。

  3. 提取二进制文件:

    tar -xvf spanner-omni-VERSION-linux-x86_64.tar.gz
    

第 3 步:启动服务器

在每个服务器上创建一个基本目录,用于存储数据、元数据和日志。如果服务器需要重启,请指定同一目录以确保连续性。

方案 A:单服务器部署

对于单服务器部署,请运行以下命令:

spanner start-single-server --base-dir=SPANNER_BASE_DIR

服务器启动后,继续执行第 6 步:与部署进行交互。

方案 B:横向扩容部署

对于横向扩缩部署,请在每台机器上启动服务器。--server-address 和 --zone 标志与部署配置中的值相匹配。网络会解析 server_address。

spanner start --root --server-address=RESOLVABLE_HOSTNAME --zone=ZONE_NAME --base-dir=SPANNER_BASE_DIR

例如:

spanner start --root --server-address=rootserver1 --zone=us-central-1a --base-dir=./spanbasedir

第 4 步:创建部署

如需创建部署,请按以下步骤操作:

  1. 将您在第 1 步:确定部署拓扑中创建的 deployment.yaml 文件复制到其中一个根服务器。

  2. 在该根服务器上,运行以下命令以创建部署:

    spanner deployment create --config-file=deployment.yaml
    

    每台机器的控制台都会显示消息,表明部署已就绪。

  3. 通过列出可用区来验证部署:

    spanner deployment zones list
    

    输出会列出您在 deployment.yaml 中指定的位置、可用区和服务器。

第 5 步:(可选)配置负载均衡器

设置 TCP 负载均衡器,并提供以下详细信息:

设置 值
协议 TCP
后端 IP 服务器的 IP 地址
端口 15000(或您在 --server-address 标志中使用的端口)
健康检查网址 http://SERVER_IP:15012/healthz
均衡策略 轮循机制

对于多地点部署,您可以为每个地点设置一个负载均衡器,并设置一个主负载均衡器来在所有地点之间分配流量。

第 6 步:与部署互动

部署就绪后,您可以使用任何虚拟机或本地机器上的 CLI 与其进行交互。如果您从单独的机器(例如开发者笔记本电脑)运行 CLI,请下载并提取 CLI 软件包。如需了解详情,请参阅快速入门:使用 Spanner Omni CLI。

如需与部署互动,请按以下步骤操作:

  1. 创建一个数据库:

    spanner --deployment-endpoint=LOAD_BALANCER_IP_OR_SERVER_IP databases create DATABASE_NAME
    
  2. 打开 SQL shell:

    spanner sql --database=DATABASE_NAME
    
  3. 创建表并插入数据:

    CREATE TABLE names (
      nameId INT64 NOT NULL,
      name STRING(100)
    ) PRIMARY KEY (nameId);
    
    INSERT INTO names (nameId, name) VALUES (1, "Jack");
    
  4. 验证数据库和数据:

    列出数据库: bash spanner databases list

    输出类似于以下内容:

    名称 状态 VERSION_RETENTION_PERIOD EARLIEST_VERSION_TIME ENABLE_DROP_PROTECTION
    DATABASE_NAME 准备就绪 1 小时 2025-02-07T12:25:30Z false

    如需查询表,请执行以下操作: bash spanner sql --database=DATABASE_NAME

  5. 运行以下 SQL 命令:

    SHOW TABLES;
    SELECT * FROM names;
    

第 7 步:(可选)扩缩部署

如需扩缩可用区内的容量,您可以添加非根服务器。在每个新服务器上运行以下命令:

spanner start --server-address=NON_ROOT_HOSTNAME --join-servers=SERVER1:PORT1,SERVER2:PORT2,SERVER3:PORT3 --zone=ZONE_NAME --base-dir=SPANNER_BASE_DIR

第 8 步:(可选)观察部署情况

如需监控部署的健康状况和性能,您可以设置指标收集、可视化和提醒。您还可以收集分布式跟踪记录来分析请求延迟时间。

设置 Prometheus

Spanner Omni 服务器以 Prometheus 格式在端口 15012 上导出指标。将以下内容添加到 prometheus.yml 中的 scrape_configs:

scrape_configs:
  - job_name: 'spanner'
    static_configs:
      - targets: ['HOST1:15012', 'HOST2:15012', 'HOSTN:15012']

设置 Grafana

如需在 Grafana 中查看监控数据,请执行以下操作:

  1. 通过在 provisioning/datasources 中创建文件来配置 Prometheus 数据源:

    apiVersion: 1
    datasources:
      - name: Prometheus
        uid: prometheus
        type: prometheus
        access: proxy
        url: http://PROMETHEUS_HOST:PROMETHEUS_PORT
        jsonData:
          httpMethod: POST
          manageAlerts: false
          prometheusType: Prometheus
          prometheusVersion: PROMETHEUS_VERSION
          cacheLevel: 'High'
          disableRecordingRules: false
          incrementalQueryOverlapWindow: 10m
    
  2. 在 Grafana 界面中创建信息中心,或使用 provisioning/dashboards 对其进行配置。

设置提醒

使用 Grafana 界面或配置文件配置提醒。例如,如果事务延迟时间的第 95 百分位 (p95) 超过 100 毫秒,您可以触发提醒。如需查看可用提醒的列表,请参阅使用 Prometheus 提醒监控 Spanner Omni。

收集和分析轨迹

以 OTLP 格式收集分布式跟踪信息,并使用 Jaeger 等工具直观呈现这些信息。

  1. 设置兼容 OTLP 的跟踪记录收集器。对于 Jaeger:

    export COLLECTOR_OTLP_ENABLED=true
    jaeger-all-in-one
    

    确保 OTLP 端口允许 Spanner Omni 与收集器之间的网络流量。

  2. 设置 SPANNER_TRACE_EXPORTER_ENDPOINT 环境变量并启动 Spanner Omni 服务器:

    export SPANNER_TRACE_EXPORTER_ENDPOINT=COLLECTOR_HOST:COLLECTOR_PORT
    spanner start --root --server-address=RESOLVABLE_HOSTNAME --zone=ZONE_NAME --base-dir=SPANNER_BASE_DIR
    

后续步骤