准备多节点部署

在多节点集群中安装 Standard Edition 之前,请准备好您的环境。

以下各节中的准备命令是针对 root 用户的。 如果您是非根用户,可以使用 sudo 运行这些命令。

准备附加磁盘

您必须准备好在存储要求部分为每个数据目录添加的磁盘。

完成这些任务的命令取决于您的环境、您选择的文件系统以及您添加的磁盘类型。

以下各节中的命令只是示例,旨在说明准备使用磁盘的要求。 您必须使用适合您环境的命令。

识别主机上的磁盘

要查看系统中的可用设备,请在 node0 和 node1:

lsblk

下面是 node0 的输出示例。

NAME                      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0                       7:0    0  63.5M  1 loop /snap/core20/2015
loop1                       7:1    0    87M  1 loop /snap/lxd/27037
loop3                       7:3    0 111.9M  1 loop /snap/lxd/24322
loop4                       7:4    0  63.9M  1 loop /snap/core20/2182
loop5                       7:5    0  40.9M  1 loop /snap/snapd/20290
loop6                       7:6    0  40.4M  1 loop /snap/snapd/20671
vda                       252:0    0   250G  0 disk
├─vda1                    252:1    0     1M  0 part
└─vda2                    252:2    0   248G  0 part
   └─ubuntu--vg-ubuntu--lv 253:0    0   248G  0 lvm  /
vdb                       252:16   0  1000G  0 disk

下面是 node1 的输出示例。

NAME                      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0                       7:0    0  63.5M  1 loop /snap/core20/2015
loop1                       7:1    0    87M  1 loop /snap/lxd/27037
loop3                       7:3    0 111.9M  1 loop /snap/lxd/24322
loop4                       7:4    0  63.9M  1 loop /snap/core20/2182
loop5                       7:5    0  40.9M  1 loop /snap/snapd/20290
loop6                       7:6    0  40.4M  1 loop /snap/snapd/20671
vda                       252:0    0   250G  0 disk
├─vda1                    252:1    0     1M  0 part
└─vda2                    252:2    0   248G  0 part
   └─ubuntu--vg-ubuntu--lv 253:0    0   248G  0 lvm  /
vdb                       252:16   0  1000G  0 disk
vdc                       252:32   0   500G  0 disk
vdd                       252:48   0   500G  0 disk

创建文件系统

对于在 node0 和 node1 上添加的每个磁盘,都必须创建文件系统。

您可以为磁盘使用任何合适的文件系统。 Ext4 和 XFS 是两种流行的 Linux 文件系统。 在 Ext4 和 XFS 之间做出选择取决于您的偏好和系统的具体需求。 Ext4 对于大多数系统来说是个不错的选择,但如果你需要一个更可靠的文件系统,XFS 可能是更好的选择。

  • 以下是使用 ext4 文件系统的示例。

    • 在 node0 ( instana-0 ) 上,可以使用以下命令创建单一文件系统:

      for disk in vdb ; do
          echo "make filesystem for $disk"
          mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/$disk
      done
      
    • 在 node1 ( instana-1 ) 上,可以使用以下命令创建三个文件系统:

      for disk in vdb vdc vdd ; do
          echo "make filesystem for $disk"
          mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/$disk
      done
      
  • 以下是使用 xfs 文件系统的示例。

    • 在 node0 ( instana-0 ) 上,可以使用以下命令创建单一文件系统:

      for disk in vdb; do
          echo "make filesystem for $disk"
          mkfs.xfs -f -i size=1024 -L $disk /dev/$disk
      done
      
    • 在 node1 ( instana-1 ) 上,可以使用以下命令创建三个文件系统:

      for disk in vdb vdc vdd; do
          echo "make filesystem for $disk"
          mkfs.xfs -f -i size=1024 -L $disk /dev/$disk
      done
      

创建目录

确保在主机上创建了四个目录。 请参见硬件要求

以下示例命令使用默认目录路径。 您可以在自己选择的任何位置创建目录。 不过,请确保在挂载目录时使用正确的路径。

  • 在 node0 (instana-0) 上,创建 objects 目录:

    mkdir -p /mnt/instana/stanctl/objects
    
  • 在 node1 (instana-1) 上,创建以下三个目录:

    mkdir -p /mnt/instana/stanctl/data
    mkdir -p /mnt/instana/stanctl/metrics
    mkdir -p /mnt/instana/stanctl/analytics
    

添加挂载路径

您必须为创建的目录添加挂载路径。 您可以在 " 识别主机上的磁盘 "中查看设备列表。

首先,将 node0 (instana-0) 和 node1 (instana-1) 上文件系统表 (fstab) 文件中的设备名称替换为 UUID(通用唯一标识符)。

有时,设备名称可能会在重启后更改,尤其是在连接多个磁盘时。 在这种情况下,磁盘和原始挂载路径之间可能会出现不匹配。 为避免这些问题,请在 fstab 文件中用 UUID(通用唯一标识符)替换设备名称。

用 UUID 更新 fstab 文件

要更新 fstab,请完成以下步骤:

  1. 根据存储容量,确定要用于每个目录的设备。 注意设备名称。
  2. 获取所有设备的 UUID。
    blkid
    
    请参阅以下命令和输出示例:
    $ blkid /dev/sdb
    /dev/sdb: UUID="86ceb289-ba28-448d-b41f-71e647fc4536" BLOCK_SIZE="4096" TYPE="ext4"
    
  3. 用设备 UUID 更新文件系统表 (fstab) 文件。
    1. 用你喜欢的文本编辑器打开 /etc/fstab 文件。
    2. 将 UUID 添加到 /etc/fstab。 如以下示例所示,为每个设备添加 UUID:
      UUID=<device_uuid>    /mnt/instana/stanctl/data       ext4    discard,defaults,nofail        0 0
      UUID=<device_uuid>    /mnt/instana/stanctl/metrics    ext4    discard,defaults,nofail        0 0
      UUID=<device_uuid>    /mnt/instana/stanctl/analytics  ext4    discard,defaults,nofail        0 0
      UUID=<device_uuid>    /mnt/instana/stanctl/objects    ext4    discard,defaults,nofail        0 0
      
    3. 保存文件。

然后,作为预防措施,在创建挂载路径前备份 fstab 文件。 在 node0 (instana-0) 和 node1 (instana-1) 上运行以下命令。

cp /etc/fstab /etc/fstab.backup

下面的示例命令使用了默认挂载路径和磁盘,我们在前面的章节中已将其用作示例。 根据您的环境,命令可能会有所不同。 此外,如果您在自定义路径下创建了目录 ,请确保使用这些路径。

如果创建了自定义挂载路径,请确保在安装自托管 Standard Edition 命令时将 --volume-<directory-name> 标志添加到 stanctl up --multi-node-enable 命令中。 例如,如果将 /data/analytics 添加为挂载路径,则使用 stanctl up --multi-node-enable --volume-analytics /data/analytics.

  • Ext4 命令示例。

    • node0 (instana-0) 的命令。
      echo "UUID=<device_vdb_uuid>  /mnt/instana/stanctl/objects    ext4    discard,defaults,nofail        0 0" >> /etc/fstab
      
    • node1 (instana-1) 的命令。
      echo "UUID=<device_vdb_uuid>  /mnt/instana/stanctl/analytics  ext4    discard,defaults,nofail        0 0" >> /etc/fstab
      echo "UUID=<device_vdc_uuid>  /mnt/instana/stanctl/metrics    ext4    discard,defaults,nofail        0 0" >> /etc/fstab
      echo "UUID=<device_vdd_uuid>  /mnt/instana/stanctl/data       ext4    discard,defaults,nofail        0 0" >> /etc/fstab
      
  • XFS 示例命令

    • node0 (instana-0) 的命令。
      echo "UUID=<device_vdb_uuid>  /mnt/instana/stanctl/objects    xfs   discard,defaults,nofail    0 0" >> /etc/fstab
      
    • node1 (instana-1) 的命令。
      echo "UUID=<device_vdb_uuid>  /mnt/instana/stanctl/analytics  xfs   discard,defaults,nofail    0 0" >> /etc/fstab
      echo "UUID=<device_vdc_uuid>  /mnt/instana/stanctl/metrics    xfs   discard,defaults,nofail    0 0" >> /etc/fstab
      echo "UUID=<device_vdd_uuid>  /mnt/instana/stanctl/data       xfs   discard,defaults,nofail    0 0" >> /etc/fstab
      

验证挂载路径

确认目录已加载到正确的磁盘上。 请参阅 " 准备附加磁盘 "获取设备名称。

lsblk <device name>

挂载文件系统

挂载所有文件系统。 在 node0 (instana-0) 和 node1 (instana-1) 上运行以下命令。

mount -a

内核参数

要成功安装 Instana 后端,必须在所有节点上正确设置以下内核参数。

vm.swappiness

vm.swappiness 设置为 0 ,以确保应用程序页面不会被移动到交换空间。

sh -c 'echo vm.swappiness=0 >> /etc/sysctl.d/99-stanctl.conf' && sysctl -p /etc/sysctl.d/99-stanctl.conf

fs.inotify.max_user_instances

fs.inotify.max_user_instances 设置为 8192 ,以确保系统最多允许 8192 个 inotify 实例。

sh -c 'echo fs.inotify.max_user_instances=8192 >> /etc/sysctl.d/99-stanctl.conf' && sysctl -p /etc/sysctl.d/99-stanctl.conf

透明巨页

永久禁用透明大页面(THP)进行内存管理。

  • 如果您的主机是 Ubuntu 或 Debian ,请运行这些命令:
    sed -i "s/\(GRUB_CMDLINE_LINUX=\".*\)\"/\1 transparent_hugepage=never\"/" "/etc/default/grub"
    update-grub
    
  • 如果您有 Red Hat® Enterprise Linux®、 CentOS Stream、Amazon Linux 或 Oracle Linux 主机,请运行此命令:
    grubby --args="transparent_hugepage=never" --update-kernel ALL
    
  • 如果您的主机是 SUSE Linux Enterprise Server (SLES),请运行这些命令:
    sed -i "s/\(GRUB_CMDLINE_LINUX=\".*\)\"/\1 transparent_hugepage=never\"/" "/etc/default/grub"
    grub2-mkconfig -o /boot/grub2/grub.cfg
    

这些更改需要重新启动系统才能生效。

重启后,验证 THP 是否已禁用。

cat /sys/kernel/mm/transparent_hugepage/enabled

以下输出显示 THP 已禁用。

always madvise [never]

软件包和环境变量

在某些主机上,您需要安装缺失的软件包或设置所需的环境变量和路径。

确保完成群集中所有节点上的任务。

亚马逊 Linux 2023 主机

在亚马逊 Linux 2023 中,缺少 container-selinuxk3s-selinux 软件包。 Standard Edition 安装程序需要这些配置才能不间断地安装 Instana。

  • 安装 container-selinux 软件包。

    dnf install -y container-selinux
    
  • 安装 k3s-selinux 软件包。

    dnf install -y https://rpm.rancher.io/k3s/stable/common/centos/8/noarch/k3s-selinux-1.6-1.el8.noarch.rpm
    

Red Hat Enterprise Linux 和 CentOS Stream 主机

在 Red Hat Enterprise Linux 和 CentOS Stream 主机上, /usr/local/bin 目录默认不包含在 PATH 环境变量中。 Standard Edition 安装程序需要 PATH 中的这个目录,以便在安装过程中运行一些命令。

要在 PATH 环境变量中添加 /usr/local/bin 目录,请完成以下步骤:

  1. .bashrc.bash_profile 文件中添加 export PATH 命令。

    echo 'export PATH=$PATH:/usr/local/bin' >> ~/.bashrc
    

    OR

    echo 'export PATH=$PATH:/usr/local/bin' >> ~/.bash_profile
    
  2. 应用更改。 使用上一条命令中更新的文件名。

    source ~/.bashrc
    

    OR

    source ~/.bash_profile
    
  3. 验证 /usr/local/bin 目录是否包含在 PATH 环境变量中。

    echo $PATH
    

如果路径更新成功,就会在输出中看到 /usr/local/bin

租户和单位名称

安装 Instana 时,您必须提供租户和单元名称。

安装 Instana 后,不能更改租户或单元名称。

以下限制适用于租户和单位名称:

  • 名称必须与以下正则表达式匹配:
    ^[a-z][a-z0-9]*$
    
  • 名称不得超过 15 个字符。
  • 名称必须以字母开头。
  • 名称只能包含字母数字字符。
  • 所有字符必须小写。

例如, test 是单位名称, marketing 是租户名称。

有关租户和单位的更多信息,请参见 units.instana.io.

联网要求

您的 Instana 域和集群中的主机必须可以从您的内部环境外部到达。 确保更新域名系统 (DNS) 设置 ,并在主机上设置防火墙规则

DNS 设置

确保为 Instana 环境设置了域名和 DNS 区域。 然后,在区域中为以下域添加 DNS A 记录:

表 1. DNS 设置
描述 示例名称
基础领域
<base_domain>
您可以用来访问 Instana 的完全合格域名 (FQDN)。 指向主机的 IP 地址。 instana.example.com
代理接收器子域
agent-acceptor.<base_domain>
Instana 代理流量的域名。 指向主机的 IP 地址。 agent-acceptor.instana.example.com
OTLP HTTP 受体子域
otlp-http.<base_domain>
OpenTelemetry 收集器 OTLP/HTTP 流量的域名。 指向主机的 IP 地址。 otlp-http.instana.example.com
OTLP gRPC 受体子域
otlp-grpc.<base_domain>
OpenTelemetry 收集器 OTLP/gRPC 流量的域名。 指向主机的 IP 地址。 otlp-grpc.instana.example.com
租户和单位子域
<unit-name>-<tenant-name>.<base_domain>
单位及其租户的域名。 指向主机的 IP 地址。 test-marketing.instana.example.com

有关添加 DNS A 记录的详细步骤,请参阅域名注册商的文档。

如果只想对所有入口流量使用 <base_domain> ,请参阅 " 使用单个域进行配置 "。

在多节点集群中,基域指向 node0 (instana-0) 的 IP 地址。有关 IP 地址要求的更多信息,请参阅 IP 地址

防火墙规则

某些 Linux 分发版可能与防火墙有潜在冲突或限制。 这些冲突可能会影响安装所需的网络通信和服务发现。 因此,如果您的防火墙是开放的,请在其中添加所需的端口和规则。

如果有外部防火墙,请参阅防火墙文档,了解如何打开端口。

要在 Standard Edition 上部署 Amazon Web Services ( AWS ),即使防火墙已禁用,也必须打开安全组中的所有端口。

完成以下步骤,打开所需的端口:

  • 在 Ubuntu 主机上,在所有节点上运行以下命令。 在命令中使用节点的 IP 地址。

    ufw allow 22/tcp
    ufw allow 80/tcp
    ufw allow 443/tcp
    ufw allow 8443/tcp
    ufw allow from <node0 (instana-0) IP> to any port 22 proto tcp
    ufw allow from <node0 (instana-0) IP> to any port 6443,10250,2379,2380,5001,9443,53 proto tcp
    ufw allow from <node0 (instana-0) IP> to any port 8472,53 proto udp
    ufw allow from <node1 (instana-1) IP> to any port 6443,10250,2379,2380,5001,9443,53 proto tcp
    ufw allow from <node1 (instana-1) IP> to any port 8472,53 proto udp
    ufw allow from <node2 (instana-2) IP> to any port 6443,10250,2379,2380,5001,9443,53 proto tcp
    ufw allow from <node2 (instana-2) IP> to any port 8472,53 proto udp
    ufw allow from 10.42.0.0/16 to any
    ufw allow from 10.43.0.0/16 to any
    ufw allow in on lo
    ufw allow out on lo
    ufw reload
    
  • 在 Debian, Red Hat Enterprise Linux, CentOS Stream、Amazon Linux, Oracle Linux 和 SUSE Linux Enterprise Server (SLES) 主机上,在所有节点上运行以下命令。 在命令中使用节点的 IP 地址。

    firewall-cmd --permanent --add-port=22/tcp
    firewall-cmd --permanent --add-port=80/tcp
    firewall-cmd --permanent --add-port=443/tcp
    firewall-cmd --permanent --add-port=8443/tcp
    firewall-cmd --new-zone=internal-access --permanent
    firewall-cmd --permanent --zone=internal-access --add-source=<node0 (instana-0) IP>
    firewall-cmd --permanent --zone=internal-access --add-source=<node1 (instana-1) IP>
    firewall-cmd --permanent --zone=internal-access --add-source=<node2 (instana-2) IP>
    firewall-cmd --permanent --zone=internal-access --add-port=22/tcp
    firewall-cmd --permanent --zone=internal-access --add-port=6443/tcp
    firewall-cmd --permanent --zone=internal-access --add-port=10250/tcp
    firewall-cmd --permanent --zone=internal-access --add-port=2379/tcp
    firewall-cmd --permanent --zone=internal-access --add-port=2380/tcp
    firewall-cmd --permanent --zone=internal-access --add-port=5001/tcp
    firewall-cmd --permanent --zone=internal-access --add-port=8472/udp
    firewall-cmd --permanent --zone=internal-access --add-port=9443/tcp
    firewall-cmd --permanent --zone=internal-access --add-port=53/udp
    firewall-cmd --permanent --zone=internal-access --add-port=53/tcp
    firewall-cmd --permanent --zone=trusted --add-source=10.42.0.0/16
    firewall-cmd --permanent --zone=trusted --add-source=10.43.0.0/16
    firewall-cmd --permanent --zone=trusted --add-interface=lo
    firewall-cmd --reload
    

验证端口

验证 Required ports 中的端口是否已打开。

Ubuntu 东道主

使用以下命令验证被防火墙阻止的端口。 如果启用了防火墙,则该命令会列出被阻止的端口。

 ufw status verbose

要打开一个端口,请运行以下命令:

ufw allow <port_number>
Debian, Red Hat Enterprise Linux, CentOS Stream, Amazon Linux, Oracle Linux, 和 SLES

要验证端口是否被防火墙封堵,请使用以下命令:

firewall-cmd --query-port=<port_number>/tcp

如果命令输出为 no ,则指定的端口已关闭。

要打开端口,请使用以下命令:

firewall-cmd --zone=public --add-port=<port_number>/tcp --permanent
firewall-cmd --reload

配置 HTTP 代理

定义 HTTP_PROXYHTTPS_PROXYNO_PROXY 环境变量。

运行 stanctl up --multi-node-enable 命令安装 Standard Edition 时,安装会自动使用当前 shell 中的环境变量值。

使用以下命令定义环境变量:

HTTP_PROXY=http://your-proxy.example.com:<port_number>
HTTPS_PROXY=http://your-proxy.example.com:<port_number>
NO_PROXY=127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16

RHEL 和 CentOS Stream 主机上的 nm-cloud-setup 实用程序

在 Red Hat Enterprise Linux 和 CentOS Stream 主机上,如果启用了 nm-cloud-setup ,则必须在每个节点上禁用它,并重新启动节点。

请使用以下命令:

  1. 检查是否已启用 nm-cloud-setup

    systemctl is-enabled nm-cloud-setup.service
    

    如果服务已禁用,命令返回 disabled ,否则返回 enabled

  2. 如果 nm-cloud-setup 已禁用,请继续下一节。 如果 nm-cloud-setup 已启用,请禁用。

    systemctl disable nm-cloud-setup.service nm-cloud-setup.timer
    
  3. 重新启动节点。

    systemctl reboot
    

TLS 证书和密钥

Instana Standard Edition 需要传输层安全(TLS)证书和密钥。

必须为 DNS 设置部分指定的域签发证书。

如果不想指定任何证书,可以使用安装过程中生成的自签名证书。

SSH 配置

只有在多节点集群中才需要安全外壳 (SSH) 配置。

要安装 Instana,用户必须在不输入密码的情况下使用 SSH 从 instana-0 连接到 instana-1 和 instana-2。

  • 根用户必须拥有所有三个节点的无密码 SSH 访问权限。
  • 非 root 用户必须拥有访问所有三个节点的无密码 SSH 访问权限,并在每个节点上拥有 sudo 权限。

用户可以以 root 或具有 sudo 访问权限的用户身份运行 stanctl 命令。

完成以下步骤,生成 SSH 密钥并在三个节点之间共享。

  1. 如果群集中没有 SSH 密钥,请在 node0 (instana-0) 上生成 SSH 密钥对。

    ssh-keygen -t rsa
    
  2. 将公钥内容复制到 node1 (instance-1) 和 node2 (instance-2) 的 $HOME/.ssh/authorized_keys 文件中。

  3. 如果 node1 (instana-1) 和 node2 (instana-2) 中的 sshd 服务监听的是另一个端口,而不是默认的 SSH 端口 22,请更新 node0 (instana-0) 中的 $HOME/.ssh/config ,以使用该端口。

    cat <<EOF | sudo tee -a ~/.ssh/config
    Host *
        port <alternate_port_number>
    EOF
    
  4. 测试 node0 (instana-0) 节点与其他两个节点之间的 SSH 连接。

    ssh <username>@<node_ip>
    

如果 SSH 连接成功,就会出现下一条命令的提示。 如果出现权限拒绝错误,请确保已将公钥复制到节点上正确的用户账户。

后续内容

继续安装 Instana。 更多信息,请参阅安装 Instana 后台和数据存储