本页面介绍了如何在支持容器运行时的任何 Linux 虚拟机上执行 AlloyDB Omni 的单实例安装。如果您需要 AlloyDB Omni 的多实例配置,请参阅高可用性和数据弹性。
准备工作
在将 AlloyDB Omni 安装到虚拟机之前,请执行以下操作:
- 请参阅规划在虚拟机上安装 AlloyDB Omni。
- 请参阅以有根或无根方式运行 AlloyDB Omni,并根据您选择的环境完成有根或无根方式所需的所有步骤。
以有根或无根方式运行 AlloyDB Omni
您可以使用 Docker 或 Podman 运行 AlloyDB Omni。这两种容器引擎都可以以有根或无根方式运行。有根方式是指以根用户身份运行 Docker 或 Podman,而无根方式是指以非根用户或无特权用户身份运行 Docker 或 Podman。
您选择的模式取决于您对环境的要求和偏好。如果简易性十分重要,那么有根方式可能适合您。如果您需要无特权用户的安全性,那么无根方式可能是您的理想之选。
如果您决定运行有根环境,则需要决定如何管理容器与宿主机之间的用户映射。在实践中,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。
- 如果您使用的是 Debian 系统,请安装 - newuidmap和- newgidmap二进制文件。- apt-get install -y uidmap 
- 为无根用户添加 - 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。
 
- 为无根用户添加 - 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。
 
- 如果您希望在用户未登录时运行 AlloyDB Omni 实例,请运行以下命令。 - loginctl enable-linger ROOTLESS_USER - 执行以下变量替换操作: - ROOTLESS_USER:您要以其身份运行 AlloyDB Omni 的用户。
 
- 如果您使用的是 Docker,请以 ROOTLESS_USER 身份运行以下命令。 - /usr/bin/dockerd-rootless-setuptool.sh install 
- 打开一个新的 shell,以使子 UID 和子 GID 更改生效。 
创建 AlloyDB Omni 存储数据的目录
如果您使用的存储系统不仅仅是运行 AlloyDB Omni,您可以在设备的现有文件系统上创建 AlloyDB Omni 目录。否则,您可以在专用设备上创建新的文件系统。
现有文件系统
Docker
mkdir -p DATA_DIR
Docker
mkdir -p DATA_DIRPodman
mkdir -p DATA_DIR
Podman
mkdir -p DATA_DIR执行以下变量替换操作:
- DATA_DIR:存储数据的主机目录路径。
专用设备
- 在将装载磁盘的主机上创建一个目录。 - mkdir -p MOUNT_POINT - 执行以下变量替换操作: - MOUNT_POINT:应包含 AlloyDB Omni 实例的顶层目录路径。
 
- 在磁盘设备上创建包含单个分区的 gpt 分区表。 - parted -s DEVICE_PATH mklabel gpt- parted -s DEVICE_PATH mkpart primary 0% 100%- 执行以下变量替换操作: - DEVICE_PATH:操作系统为磁盘设备分配的路径。
 
- 在磁盘设备上创建文件系统。我们建议为 AlloyDB Omni 使用 - ext4文件系统。- mkfs.ext4 -q -m 1 -L FS_LABEL -F PARTITION_PATH - 执行以下变量替换操作: - FS_LABEL:文件系统的标签。- ext4文件系统标签的长度上限为 16 个字符。
- PARTITION_PATH:用于存储容器数据的磁盘分区的路径。
 
- 装载设备并在 - /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 实例的顶层目录路径。
 
- 在特定于容器的文件系统中创建数据目录。 - 有根方式- 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:容器应将自己的端口- 5432发布到的宿主机上的 TCP 端口。如需也在宿主机上使用 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
执行以下变量替换操作:
- CONTAINER_NAME:您在创建 AlloyDB Omni 存储数据的目录中为相应目录使用的名称。
远程连接
psql -U postgres -p HOST_PORT -h IP_ADDRESS_OR_FQDN
执行以下变量替换操作:
- HOST_PORT:您在创建容器中使用的 TCP 端口。
- IP_ADDRESS_OR_FQDN:运行 AlloyDB Omni 的主机的 IP 地址或完全限定域名。
运行此命令后,系统会要求您输入 postgres 账号的密码。输入您在创建容器中使用的密码。