跳转到主要内容

快速上手

安装 Barn 0.9.0,用 up 启动 Ubuntu 实验环境,用 ssh 进入,再通过同一份配置增量扩容。

安装

本教程以 Barn 0.9.0 发布候选为准。当前请先从源码构建; 以下发行包和 Homebrew 命令在 0.9.0 发布、Formula 更新之后使用,不能把文档中的链接 当作已经发布的证明。进度见当前状态。

Barn 不兼容旧开发版本:只识别 barn.yml、BARN_* 与 ~/.barn 等新名称, 不读取或迁移旧状态,不提供旧命令别名。内部旧环境应先停机并保留需要的数据, 然后按新安装重新创建;不要把旧状态目录直接改名后继续使用。

0.9.0 发布后,用户级安装器支持 macOS/Linux 的 arm64/amd64,校验归档摘要, 安装自身无需 sudo:

curl -fLO https://github.com/pgsty/barn/releases/download/v0.9.0/install.sh
chmod +x install.sh
BARN_VERSION=0.9.0 ./install.sh
export PATH="$HOME/.local/bin:$PATH"
barn version

默认安装目录为 ~/.local/bin;请把相同 PATH 设置写入 Shell 配置。 发行构建应显示 0.9.0。预发布版本不会出现在 GitHub 的 /releases/latest, 请显式设置 BARN_VERSION=0.9.0。

下载问题见下载与 PATH。

其他安装方式

发行包与 Homebrew Formula 就绪后,选择一种方式。以下 Linux 示例使用 amd64;ARM64 使用对应的 linux_arm64 文件。

Homebrew
brew install pgsty/infra/barn
barn version
Debian / Ubuntu
barn_release=https://github.com/pgsty/barn/releases/download/v0.9.0
curl -fLO "$barn_release/barn_0.9.0_linux_amd64.deb"
sudo apt install ./barn_0.9.0_linux_amd64.deb
barn version
RHEL / Fedora
barn_release=https://github.com/pgsty/barn/releases/download/v0.9.0
curl -fLO "$barn_release/barn_0.9.0_linux_amd64.rpm"
sudo dnf install ./barn_0.9.0_linux_amd64.rpm
barn version

下面的宿主要求针对 Linux 客机。macOS 客机使用独立的 barn mac。

宿主要求

宿主 原生加速 最低 QEMU 版本
macOS arm64 / amd64 HVF 8.2.1
Linux amd64 / arm64 KVM 6.2

宿主还需要 qemu-img、OpenSSH 与所选客机对应的固件。交互式 up 可以通过 macOS 的 Homebrew,或受支持 Linux 发行版的 apt/dnf 补齐依赖,并安装固定 IP 网络。宿主软件包与 网络变更可能需要 sudo;Barn 本身应以普通用户运行。Linux 需要可用的 KVM,以及 NetworkManager 或 systemd-networkd。带日期的真机验证覆盖 macOS arm64 与 Ubuntu amd64, 其他构建平台的验证范围较窄,详见当前状态。

启动第一个实验环境

首次部署时,在终端中进入一个空目录:

mkdir -p ~/barn-lab && cd ~/barn-lab
barn up
barn ssh

用 exit 从客机返回宿主终端后,再执行后续 Barn 命令。

没有配置文件、也没有已应用部署时,交互式 up 会生成只有一个 meta 节点的 barn.yml,准备缺少的宿主依赖与网络,下载并校验镜像,启动 QEMU,然后等待管理 SSH 就绪。宿主变更会显示出来,sudo 可能要求输入密码。如果希望先查看完整宿主计划,运行 barn setup --dry-run。

说明

换目录不会新建一套实验环境。状态位于 $BARN_HOME,默认是 ~/.barn。 如果已有部署且当前目录没有配置文件,up 会继续该部署;可先用 barn status 查看。

默认模板解析为:

配置项 默认值
节点 / 固定 IP meta / 10.10.10.10
客机镜像 Ubuntu 24.04,u24:stable,与宿主相同的架构
登录用户 dba,使用 SSH 密钥认证
CPU / 内存 每节点 2 vCPU / 4 GiB
根盘 / 数据盘 64 GiB 根盘 + 挂载到 /data 的 128 GiB 非持久数据盘

磁盘大小是虚拟容量,qcow2 文件随写入增长。四节点环境共配置 8 vCPU、16 GiB 客机内存, 还需为宿主保留资源;启动前可用 barn plan 查看总量。

首次使用、尚未编辑且采用默认网段的内置模板遇到子网冲突时,setup 可以改用可用的私有 /24;若模板文件 已经存在,会备份为 barn.yml.before-network-change。请以生成后的 barn.yml 和 barn status 为准。显式 -f 文件、编辑过的模板与已有部署会保留选定网段。

健康的首次启动会以类似结果结束:

  ✓  1 node ready
connect:   barn ssh meta

barn ssh 默认连接控制节点,在此模板中就是 meta。也可以显式指定节点,或直接执行命令:

barn ssh meta
barn exec meta -- hostname
barn st

st 是 status 的别名; 其中的 running 表示 VM 进程在运行,不代表刚刚重新检查了客机就绪状态。

继续未完成的初始化

重复 barn up 可以接续中断的操作、重试未完成的客机初始化、更新旧的客机脚本。 健康的运行中 VM 会保留进程与根盘。管理 SSH 可用时,即使共享目录只读、私网不可用等功能 受限,客机仍可完成启动。请查看这些提示;自动化应检查 barn up --json 的 nodes[].warnings 与 nodes[].repairs,因为这些限制仍返回退出码 0。

警告

数据盘是可丢弃的测试存储。up 可能清空重建无法识别或确认损坏的文件系统, 包括持久盘,并报告旧数据已丢弃。persistent 只控制 destroy/recreate 时保留磁盘, 不保证恢复时保留损坏的内容。详见数据盘说明。

--no-wait 会跳过客机就绪、恢复与元数据刷新,后续执行 barn up 补齐。 镜像下载支持重试与断点续传;使用 barn up --mirror 优先访问中国官方仓库。 镜像选择与回退规则见镜像仓库。

启动前选择配置

这是前面自动启动流程的另一种入口。在新的实验目录中,先生成并检查配置,再启动:

barn init
barn validate
barn plan
barn up

对于本文使用的 Catalog 镜像,init、validate、plan 都不要求先安装 QEMU 或配置宿主网络。规划已注册的 local-* 镜像时,则需要 qemu-img 校验缓存字节。默认 meta 配置为:

all:
  vars:
    admin_ip: 10.10.10.10
  children:
    nodes:
      hosts:
        10.10.10.10: { nodename: meta }

内置四种模板:

模板 节点数 默认地址
meta 1 10.10.10.10
dual 2 10.10.10.10–10.10.10.11
trio 3 10.10.10.10–10.10.10.12
full 4 10.10.10.10–10.10.10.13

例如 barn init full 生成四节点配置,barn init full -c 10.20.30.0/24 指定另一网段。 现有文件不会被覆盖,除非显式传入 --force。在第一次 up 前调整 vm_cpu、vm_mem、 vm_image 等字段,全部字段见配置参考。

显式准备宿主

setup 只准备依赖与网络,不启动 VM:

barn setup --dry-run
barn setup

与 up 内部的准备流程不同,单独执行 setup 会在应用有变更的计划前请求确认。 它会复用当前目录发现的配置,没有文件时生成 meta。可选的 /etc/hosts helper 仅在 barn hosts install --yes 需要时安装;普通启动与 barn ssh 不依赖这项集成。

下载尊重 HTTP_PROXY、HTTPS_PROXY、ALL_PROXY、NO_PROXY 及其小写形式。 无人值守的首次部署可在空目录执行:

barn setup --yes
barn up --json

setup --yes 本身就能生成配置,只有需要预先编辑时才必须单独 init。自动化环境仍需为 必要的 sudo 操作准备凭据;--yes 不会提供管理员凭据。 自动化教程说明如何保存命令结果、检查客机限制后再继续。

使用现有 Pigsty 配置

barn validate -f pigsty.yml
barn plan -f pigsty.yml
barn up -f pigsty.yml

Barn 读取已记录的 VM、命名与登录字段,其余 Pigsty 参数保持原样。以上步骤启动虚拟机; PostgreSQL 与其他 Pigsty 服务仍需通过 Pigsty 单独安装。内置模板只描述 VM 拓扑, 不包含完整的 Pigsty 服务配置。 衔接方式见自动化与客机脚本, 文件传输与服务连接见存储与访问。

扩容与日常操作

扩展默认单节点环境时,保留已有设置,在 barn.yml 中增加三台主机:

all:
  vars:
    admin_ip: 10.10.10.10
  children:
    nodes:
      hosts:
        10.10.10.10: { nodename: meta }
        10.10.10.11: { nodename: node-1 }
        10.10.10.12: { nodename: node-2 }
        10.10.10.13: { nodename: node-3 }

此例假定使用默认网段;如果 setup 选择了其他网段,所有地址及 admin_ip 都应沿用该网段。 不要为了扩容而用 init --force 覆盖已经定制的配置。

barn plan
barn up
barn st

仅增加这三行时,计划应列出三个待创建节点。up 会创建它们,保留正在运行的 meta 进程,并刷新客机 hosts 与控制节点 SSH 配置。健康的结果为 4 nodes ready。 0.9.0 内置 Catalog 将 u24:stable 解析为 [email protected];手动更新 Catalog 后 可能解析为其他版本,准确版本显示在 plan 和 status 中。

修改 CPU、内存或其他被读取的 VM 字段,需要显式执行 barn recreate <node>; 删除 YAML 条目不会删除 VM。停止并恢复环境,不重建磁盘:

barn stop
barn start

使用完毕后销毁部署:

barn destroy

在终端输入 destroy 确认。根盘与非持久数据盘会被删除,镜像缓存、密钥、声明为持久的 数据盘与宿主网络保留。彻底清理见卸载与清理环境;重启、日志、显式变更与 缩容见日常管理。

0.9.0 的新安装边界

Barn 0.9.0 是新名称下的首次发行。旧内部环境需要先停机,保留必要数据,然后重新创建 Barn 实验环境;不提供原位升级、旧命令别名或状态迁移。发行前从源码构建,发行后的安装 命令见本页开头。barn update 只更新镜像 Catalog,不更新 Barn 程序。