PIGSTY

Vagrant

使用 vagrant 置备本地虚拟机

Pigsty 需要 Linux 环境,您可以使用 Vagrant 轻松创建本地 linux 虚拟机。

您还需要一个虚拟机提供商,(比如笔记本电脑的 VirtualBox 和服务器的 libvirt)


入门

您可以在 macOS 上使用 homebrew 安装 vagrant、virtualbox、ansible:

在 macos 上安装
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install vagrant virtualbox ansible

您已准备就绪!使用 make 快捷方式创建虚拟机:

~/pigsty
make meta       # 1 节点开发箱,用于快速启动、开发、测试和实验
make full       # 4 节点沙盒,用于 HA 测试和功能演示
make simu       # 36 节点模拟箱,用于生产环境模拟
...
make meta9      # 使用 bento/rockylinux-9 镜像创建单例元节点
make full22     # 使用 generic/ubuntu2204 镜像创建 4 节点沙盒
make simu12     # 使用 generic/debian12 镜像创建 36 节点模拟环境

配置

您必须在启动前在 Vagrantfile 中定义虚拟机。 默认的 Vagrantfile 定义了一个 el9(bento/rockylinux-9)1 节点虚拟机,使用本地 virtualbox VM 提供商。

我们在 vagrant/spec 文件夹中有一系列预定义的 VM 规格

模板节点规格注释别名
meta.rb1 节点2c4g x 1单节点元数据开发箱
dual.rb2 节点1c2g x 2双节点
trio.rb3 节点1c2G x 3三节点
full.rb4 节点2c4g + 1c2g x 3全功能 4 节点沙盒
simu.rb36 节点杂项生产环境模拟模拟箱
oss.rb3 节点1c2g x 33 节点 OSS 构建环境
pro.rb5 节点1c2g x 55 节点 PRO 构建环境

每个规格文件包含一个描述 VM 节点的 Specs 变量。例如,full.rb 包含:

# full: pigsty 全功能 4 节点沙盒,用于 HA 测试、教程和实践

Specs = [
  { "name" => "meta"   , "ip" => "10.10.10.10" ,  "cpu" => "2" ,  "mem" => "4096" ,  "image" => "bento/rockylinux-9"  },
  { "name" => "node-1" , "ip" => "10.10.10.11" ,  "cpu" => "1" ,  "mem" => "2048" ,  "image" => "bento/rockylinux-9"  },
  { "name" => "node-2" , "ip" => "10.10.10.12" ,  "cpu" => "1" ,  "mem" => "2048" ,  "image" => "bento/rockylinux-9"  },
  { "name" => "node-3" , "ip" => "10.10.10.13" ,  "cpu" => "1" ,  "mem" => "2048" ,  "image" => "bento/rockylinux-9"  },
]

您可以使用规格与 config 脚本,它将根据规格和环境变量(资源、镜像、vm 提供商等...)渲染 Vagrantfile

cd ~/pigsty
vagrant/config [spec] [image] [scale] [provider]

vagrant/config meta                # 使用 1 节点规格,默认 el8 镜像
vagrant/config dual el9            # 使用 2 节点规格,使用 el9 镜像
vagrant/config trio d12 2          # 使用 3 节点规格,使用 debian12 镜像,双倍 cpu/mem 资源
vagrant/config full u22 4          # 使用 4 节点规格,使用 ubuntu22 镜像,使用 4x cpu/mem 资源         
vagrant/config simu u24 1 libvirt  # 使用 36 节点规格,使用 ubuntu24 镜像,使用 libvirt 作为提供商而不是 virtualbox 

您可以使用环境变量 VM_SCALE 扩展资源单位,默认值为 1

例如,VM_SCALE=2 vagrant/config meta 将使 meta 规格的 cpu / mem 资源翻倍

Specs = [
  { "name" => "meta" , "ip" => "10.10.10.10", "cpu" => "8" , "mem" => "16384" , "image" => "bento/rockylinux-9" },
]

快捷方式

配置后,您可以使用 vagrant up 命令创建虚拟机。

Pigsty 模板将使用您的 ~/.ssh/id_rsa[.pub] 作为 vagrant 置备的默认 ssh 密钥。 在开始之前确保您有有效的 ssh 密钥对,您可以通过以下方式生成一个:ssh-keygen -t rsa -b 2048

有一些包装 vagrant 命令的快捷方式,您可以使用它们来管理虚拟机。

~/pigsty/vagrant
make         # = make start
make new     # 销毁现有 vm 并创建新的
make ssh     # 将 VM ssh 配置写入 ~/.ssh/     (必需)
make dns     # 将 VM DNS 记录写入 /etc/hosts (可选)
make start   # 启动 VM 并写入 ssh 配置    (up + ssh) 
make up      # 使用 vagrant up 启动 VM
make halt    # 关闭 VM (down,dw)
make clean   # 销毁 VM (clean/del/destroy)
make status  # 显示 VM 状态 (st)
make pause   # 暂停 VM (suspend,pause)
make resume  # 恢复 VM (resume)
make nuke    # 使用 virsh 销毁所有 vm 和卷(如果使用 libvirt) 

版本

Pigsty 目前使用以下 vagrant 盒子进行测试:

x86_64
$ vagrant box list

el8 :  bento/rockylinux-8     (libvirt, 202502.21.0, (amd64))
el9 :  bento/rockylinux-9     (libvirt, 202502.21.0, (amd64))

d11 :  generic/debian11       (libvirt, 4.3.12, (amd64))
d12 :  generic/debian12       (libvirt, 4.3.12, (amd64))

u20 :  generic/ubuntu2004     (libvirt, 4.3.12, (amd64))
u22 :  generic/ubuntu2204     (libvirt, 4.3.12, (amd64))
u24 :  bento/ubuntu-24.04     (libvirt, 20250316.0.0, (amd64))

它们并非都有 arm64 架构支持,所以在使用 Apple Silicon MacOS 时要注意。

aarch64
bento/rockylinux-9 (virtualbox, 202502.21.0, (arm64))
bento/ubuntu-24.04 (virtualbox, 202502.21.0, (arm64))

您可以在 https://app.vagrantup.com/bento/boxes 上找到支持的 Box 镜像


注意事项

Virtualbox 网络配置

当使用较旧版本的 virtualbox 作为 vagrant 提供商时,需要额外设置才能使用默认的 10.x.x.x CIDR 作为仅主机网络:将其添加到 /etc/vbox/networks.conf

echo "10.0.0.0/8" | sudo tee -a /etc/vbox/networks.conf