本页面介绍了如何在支持容器运行时的任何 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_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 实例的顶层目录路径。
在特定于容器的文件系统中创建数据目录。
有根方式
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
账号的密码。输入您在创建容器中使用的密码。