VM에 AlloyDB Omni 설치

이 페이지에서는 컨테이너 런타임을 지원하는 Linux VM에서 AlloyDB Omni의 단일 인스턴스 설치를 실행하는 방법을 설명합니다. AlloyDB Omni의 다중 인스턴스 구성이 필요한 경우 고가용성 및 데이터 복원력을 참고하세요.

시작하기 전에

VM에 AlloyDB Omni를 설치하기 전에 다음을 실행합니다.

  1. VM에 AlloyDB Omni 설치 계획 수립을 참고하세요.
  2. AlloyDB Omni 루트가 있거나 없는 실행을 읽고 선택한 환경에 따라 루트가 있거나 없는 경우 필요한 단계를 완료합니다.

AlloyDB Omni 루트 유무와 관계없이 실행

Docker 또는 Podman을 사용하여 AlloyDB Omni를 실행할 수 있습니다. 이러한 컨테이너 엔진은 모두 루트가 있거나 루트가 없는 상태로 실행할 수 있습니다. 루트풀은 Docker 또는 Podman을 루트 사용자로 실행하는 것을 의미하며, 루트리스는 루트가 아닌 사용자 또는 권한이 없는 사용자로 실행하는 것을 의미합니다.

선택하는 모드는 환경에 대한 요구사항과 환경 설정에 따라 다릅니다. 단순성이 중요한 경우 rootful이 적합할 수 있습니다. 권한 없는 사용자의 보안이 필요한 경우 루트리스가 적합할 수 있습니다.

루트 환경을 실행하려면 컨테이너와 호스트 머신 간의 사용자 매핑을 관리하는 방법을 결정해야 합니다. 실제로 AlloyDB Omni는 UID 및 GID가 999postgres 사용자로 프로세스를 실행합니다. 즉, 사용자 매핑을 관리하는 방법에는 두 가지가 있습니다.

  • 아무 조치도 취하지 않습니다. postgres는 계속해서 호스트 머신의 사용자에 매핑되지 않습니다.
  • postgres가 해당 사용자 및 사용자 그룹에 매핑되도록 UID 및 GID가 999인 사용자 및 사용자 그룹을 만듭니다.

루트가 없는 환경의 경우 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. 사용자가 로그인하지 않은 상태에서 AlloyDB Omni 인스턴스를 실행하려면 다음 명령어를 실행합니다.

    loginctl enable-linger ROOTLESS_USER
    

    다음 변수를 바꿉니다.

    • ROOTLESS_USER: AlloyDB Omni를 실행할 사용자입니다.
  5. Docker를 사용하는 경우 ROOTLESS_USER로 다음 명령어를 실행합니다.

    /usr/bin/dockerd-rootless-setuptool.sh install 
    
  6. 하위 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: 컨테이너가 자체 포트 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

다음 변수를 바꿉니다.

원격으로 연결

psql -U postgres -p HOST_PORT -h IP_ADDRESS_OR_FQDN

다음 변수를 바꿉니다.

  • HOST_PORT: 컨테이너 만들기에서 사용한 TCP 포트입니다.
  • IP_ADDRESS_OR_FQDN: AlloyDB Omni가 실행 중인 호스트의 IP 주소 또는 정규화된 도메인 이름입니다.

이 명령어를 실행하면 postgres 계정의 비밀번호를 묻는 메시지가 표시됩니다. 컨테이너 만들기에서 사용한 비밀번호를 입력합니다.

다음 단계