本页介绍了如何在支持容器运行时的任何 Linux 虚拟机上执行 AlloyDB Omni 的单实例安装。如果您需要 AlloyDB Omni 的多实例配置,请参阅高可用性和数据弹性。
准备工作
在虚拟机上安装 AlloyDB Omni 之前,请执行以下操作:
- 请参阅规划在虚拟机上安装 AlloyDB Omni。
- 阅读在有根或无根模式下运行 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。
如果您使用的是 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。
如果您使用的是 Docker,请以 ROOTLESS_USER 身份运行以下命令。
/usr/bin/dockerd-rootless-setuptool.sh install
如果您使用的是 Podman,请允许用户在未登录的情况下运行服务。
loginctl enable-linger ROOTLESS_USER
执行以下变量替换操作:
ROOTLESS_USER
:您希望以哪个用户身份运行 AlloyDB Omni。
打开新 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
:数据存储的主机目录路径。
专用设备
在主机上创建一个用于装载磁盘的目录。
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 实例的顶级目录路径。
在容器专用文件系统中创建数据目录。
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
执行以下变量替换操作:
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
账号的密码。输入您在创建容器中使用的密码。