在虚拟机上安装 AlloyDB Omni

本页介绍了如何在支持容器运行时的任何 Linux 虚拟机上执行 AlloyDB Omni 的单实例安装。如果您需要 AlloyDB Omni 的多实例配置,请参阅高可用性和数据弹性

准备工作

在虚拟机上安装 AlloyDB Omni 之前,请执行以下操作:

  1. 请参阅规划在虚拟机上安装 AlloyDB Omni
  2. 阅读在有根或无根模式下运行 AlloyDB Omni,并根据您选择的环境完成有根或无根模式的所有必要步骤。

以有根或无根方式运行 AlloyDB Omni

您可以使用 Docker 或 Podman 运行 AlloyDB Omni。这两个容器引擎都可以以有根或无根方式运行。有根意味着以 root 用户身份运行 Docker 或 Podman,而无根意味着以非 root 用户(即非特权用户)身份运行它们。

您选择的模式取决于您对环境的要求和偏好。如果简洁性很重要,rootful 可能适合您。如果您需要非特权用户的安全性,那么无根模式可能是正确的选择。

如果您决定运行具有 root 权限的环境,则需要决定如何管理容器与主机之间的用户映射。在实践中,AlloyDB Omni 会以 postgres 用户身份运行进程,该用户的 UID 和 GID 为 999。也就是说,您可以通过以下两种方式管理用户映射:

  • 什么也不做。postgres 将继续映射到主机上的任何用户。
  • 创建一个用户和用户群组,并为其指定 UID 和 GID 为 999,以便 postgres 映射到该用户和用户群组。

对于无根环境,postgres 会映射到主机用户和用户组有权访问的子 UID 和子 GID(如 /etc/subuid/etc/subgid 文件中所定义)。这意味着您无需管理用户映射。

(无根)配置子 UID 和子 GID 范围

如果您的 Linux 映像尚未为非特权用户配置子 UID 和子 GID 范围,则必须进行配置,才能以非根方式运行 AlloyDB Omni。

  1. 如果您使用的是 Debian 系统,请安装 newuidmapnewgidmap 二进制文件。

    apt-get install -y uidmap
    
  2. 为无根用户添加 subuid 条目。

    echo "ROOTLESS_USER:SUB_UID_RANGE_START:SUB_UID_RANGE_COUNT" >> /etc/subuid
    

    执行以下变量替换操作:

    • ROOTLESS_USER:您希望以哪个用户身份运行 AlloyDB Omni。
    • SUB_UID_RANGE_START:您要为用户注册的子 UID 范围的下限。
    • SUB_UID_RANGE_COUNT:您要为用户注册的子 UID 数量。此值必须至少为 999。
  3. 为无根用户添加 subgid 条目。

    echo "ROOTLESS_USER:SUB_GID_RANGE_START:SUB_GID_RANGE_COUNT" >> /etc/subgid
    

    执行以下变量替换操作:

    • ROOTLESS_USER:您希望以哪个用户身份运行 AlloyDB Omni。
    • SUB_GID_RANGE_START:您要为用户注册的子 GID 范围的下限。
    • SUB_GID_RANGE_COUNT:您要为用户注册的子 GID 数量。此值必须至少为 999。
  4. 如果您使用的是 Docker,请以 ROOTLESS_USER 身份运行以下命令。

    /usr/bin/dockerd-rootless-setuptool.sh install 
    
  5. 如果您使用的是 Podman,请允许用户在未登录的情况下运行服务。

    loginctl enable-linger ROOTLESS_USER
    

    执行以下变量替换操作:

    • ROOTLESS_USER:您希望以哪个用户身份运行 AlloyDB Omni。
  6. 打开新 shell,以使子 UID 和子 GID 更改生效。

创建 AlloyDB Omni 存储数据的目录

如果您使用的存储系统不仅仅用于运行 AlloyDB Omni,您可以在设备的现有文件系统上创建 AlloyDB Omni 目录。或者,您也可以在专用设备上创建新的文件系统。

现有文件系统

Docker

mkdir -p DATA_DIR

Docker

mkdir -p DATA_DIR

Podman

mkdir -p DATA_DIR

Podman

mkdir -p DATA_DIR

执行以下变量替换操作:

  • DATA_DIR:数据存储的主机目录路径。

专用设备

  1. 在主机上创建一个用于装载磁盘的目录。

    mkdir -p MOUNT_POINT
    

    执行以下变量替换操作:

    • MOUNT_POINT:应包含 AlloyDB Omni 实例的顶级目录路径。
  2. 在磁盘设备上创建一个包含单个分区的 gpt 分区表。

    parted -s DEVICE_PATH mklabel gpt
    parted -s DEVICE_PATH mkpart primary 0% 100%

    执行以下变量替换操作:

    • DEVICE_PATH:操作系统为磁盘设备分配的路径。
  3. 在磁盘设备上创建文件系统。我们建议为 AlloyDB Omni 使用 ext4 文件系统。

    mkfs.ext4 -q -m 1 -L FS_LABEL -F PARTITION_PATH
    

    执行以下变量替换操作:

    • FS_LABEL:文件系统的标签。ext4 文件系统标签的长度上限为 16 个字符。
    • PARTITION_PATH:用于存储容器数据的磁盘分区的路径。
  4. 挂载设备并在 /etc/fstab 文件中创建条目,以便在重新启动后挂载磁盘。

    echo -e "LABEL=FS_LABEL\tMOUNT_POINT\text4\tdefaults\t0 0" | tee -a /etc/fstab
    systemctl daemon-reload
    mount MOUNT_POINT

    执行以下变量替换操作:

    • FS_LABEL:文件系统的标签。ext4 文件系统标签的长度上限为 16 个字符。
    • MOUNT_POINT:应包含 AlloyDB Omni 实例的顶级目录路径。
  5. 在容器专用文件系统中创建数据目录。

    Rootful

    mkdir -p DATA_DIR
    

    无根

    mkdir -p DATA_DIR
    chown ROOTLESS_USER:ROOTLESS_GROUP DATA_DIR

    执行以下变量替换操作:

    • DATA_DIR:数据存储的主机目录路径。
    • ROOTLESS_USER:如果您使用的是无根环境,则此用户是您希望拥有该目录的用户。
    • ROOTLESS_GROUP:如果您使用的是无根环境,则此组是您希望拥有该目录的组。

创建容器

Docker

docker run -d --name CONTAINER_NAME \
-e POSTGRES_PASSWORD=NEW_PASSWORD \
-v DATA_DIR:/var/lib/postgresql/data \
-p HOST_PORT:5432 \
--restart=always \
google/alloydbomni:latest

Docker

docker run -d --name CONTAINER_NAME \
-e POSTGRES_PASSWORD=NEW_PASSWORD \
-v DATA_DIR:/var/lib/postgresql/data \
-p HOST_PORT:5432 \
--restart=always \
google/alloydbomni:latest

Podman

podman run -d --name CONTAINER_NAME \
-e POSTGRES_PASSWORD=NEW_PASSWORD \
-v DATA_DIR:/var/lib/postgresql/data \
-p HOST_PORT:5432 \
--restart=always \
docker.io/google/alloydbomni:latest

Podman

podman run -d --name CONTAINER_NAME \
-e POSTGRES_PASSWORD=NEW_PASSWORD \
-v DATA_DIR:/var/lib/postgresql/data \
-p HOST_PORT:5432 \
--restart=always \
docker.io/google/alloydbomni:latest

执行以下变量替换操作:

  • CONTAINER_NAME:您在创建 AlloyDB Omni 存储数据的目录中为目录使用的名称。
  • NEW_PASSWORD:为新容器的 postgres 用户在创建后分配的密码。
  • DATA_DIR:数据存储的主机目录路径。
  • HOST_PORT:主机上的 TCP 端口,容器应将自己的端口 5432 发布到该端口。如需在主机上也使用 PostgreSQL 默认端口,请指定 5432

连接到您的实例

根据您的环境,您可以本地远程连接到 AlloyDB Omni 实例。

在本地连接

Docker

docker exec -it CONTAINER_NAME psql -U postgres

Docker

docker exec -it CONTAINER_NAME psql -U postgres

Podman

podman exec -it CONTAINER_NAME psql -U postgres

Podman

podman exec -it CONTAINER_NAME psql -U postgres

执行以下变量替换操作:

远程连接

psql -U postgres -p HOST_PORT -h IP_ADDRESS_OR_FQDN

执行以下变量替换操作:

  • HOST_PORT:您在创建容器中使用的 TCP 端口。
  • IP_ADDRESS_OR_FQDN:运行 AlloyDB Omni 的主机的 IP 地址或完全限定域名。

运行此命令后,系统会要求您输入 postgres 账号的密码。输入您在创建容器中使用的密码。

后续步骤