1. Введение
В этой практической работе рассказывается о том, как развернуть кластер высокой доступности AlloyDB Omni на виртуальных машинах Google Compute Engine (GCE). В конце этой практической работы вы создадите эталонную архитектуру с высокой доступностью, состоящую из трех узлов базы данных и двух узлов HAProxy, а также управляющего узла для операций управления.
Требования
- Доступ к проекту Google Cloud и Cloud Shell из Cloud Console.
- Google Cloud SDK (
gcloud) установлена и настроена. Инструкции по установке gcloud приведены на странице gcloud-install. - Установлена версия Terraform v1.9.8.
Что вы узнаете
- Как создать и подготовить ВМ GCE для AlloyDB Omni.
- Как установить и запустить оркестратор AlloyDB Omni RPM.
- Как установить и настроить пакеты RPM AlloyDB Omni для архитектуры высокой доступности.
Что вам понадобится
- Получите URL для RPM-пакетов AlloyDB Omni и оркестратора RPM. Для этого заполните форму регистрации AlloyDB Omni. Ссылки отправляются на адрес электронной почты, связанный с сервером URL репозитория. Инициализируйте следующие переменные среды, чтобы URL, которые будут использоваться в лабораторной работе, были под рукой.
export ORCHESTRATOR_ANSIBLE_COLLECTION_PATH="..." export ALLOYDB_OMNI_REPOSITORY_URL="..." export ALLOYDB_OMNI_ORCHESTRATOR_REPOSITORY_URL="..." export ALLOYDB_OMNI_COMMON_REPOSITORY_URL="..." export ETCD_REPOSITORY_URL="..." - Рабочий терминал с доступом к стеку развертывания AlloyDB Omni. Для этого можно использовать Cloud Shell.
2. Настройка и требования
Настройка проекта
Как создать проект Google Cloud
- В Google Cloud Console на странице выбора проекта выберите или создайте проект Google Cloud.
- Убедитесь, что для вашего облачного проекта включены платежные функции. Подробнее о том, как проверить, включены ли платежные функции для проекта…
Запустить Cloud Shell
Хотя Google Cloud можно использовать удаленно с ноутбука, в этой практической работе вы будете использовать Google Cloud Shell – среду командной строки, работающую в облаке.
В консоли Google Cloud нажмите на значок Cloud Shell на панели инструментов в правом верхнем углу:

Вы также можете нажать G, а затем S. Эта последовательность действий активирует Cloud Shell, если вы находитесь в консоли Google Cloud или используете эту ссылку.
Подготовка и подключение к среде займут всего несколько минут. После этого вы увидите примерно следующее:

Эта виртуальная машина загружена всеми необходимыми инструментами разработчика. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Все действия в этой практической работе можно выполнить в браузере. Устанавливать ничего не нужно.
3. Как создать виртуальные машины Google Cloud Compute Engine
Как подготовить скрипты Terraform
- Определите переменные среды для идентификатора проекта и нужного имени кластера. Они понадобятся вам в ходе работы с лабораторией.
Примечание. Идентификатор проекта Google Cloud должен содержать от 6 до 30 символов. Дополнительную информацию можно найти на странице https://docs.cloud.google.com/resource-manager/docs/creating-managing-projects#before_you_begin.export PROJECT="your-project-id" export CLUSTER="your-cluster-name" - Убедитесь, что вы вошли в аккаунт пользователя Google Cloud.
gcloud auth login - Создайте рабочий каталог для развертывания и скопируйте необходимые файлы конфигурации Terraform из источника репозитория.
mkdir -p ~/alloydb-omni/$PROJECT/$CLUSTER cd ~/alloydb-omni/$PROJECT/$CLUSTER gcloud storage cp gs://alloydb-omni-install/rpm-orchestrator/gce/terraform/*.tf . - Создайте файл
terraform.tfvars, чтобы указать необходимые параметры в соответствии с архитектурой, приведенной ниже.cat > terraform.tfvars <<EOF # Required instance counts for reference architecture db_instance_count = 3 haproxy_instance_count = 2 control_instance_count = 1 # Optional: Customize if needed with the below variables # os_image = "rocky-linux-cloud/rocky-linux-9" # zone = "us-west4-c" # region_1 = "us-west4" # db_instance_type = "c4-highmem-4" # db_disk_type = "hyperdisk-balanced" # db_data_size = "50" # GB # data_dir = "/data" EOF
Выполнение скриптов Terraform и проверка
- Теперь вы можете инициализировать виртуальные машины.
terraform init - Прежде чем создавать ВМ, убедитесь, что у вас есть необходимые разрешения на создание ВМ и других ресурсов. Вам понадобятся следующие разрешения:
roles/compute.admin roles/iam.roleAdmin roles/compute.osAdminLogin roles/iam.serviceAccountCreator roles/iam.serviceAccountUser roles/artifactregistry.repoAdmin roles/storage.objectUser roles/resourcemanager.projectIamAdmin roles/serviceusage.serviceUsageAdmin - Проверьте конфигурацию и примените ее, чтобы подготовить ресурсы.
Примечание. Убедитесь, что вы используете Terraform v1.9.8, как и предполагается в конфигурации развертывания.terraform validate terraform apply --auto-approve - После завершения работы Terraform убедитесь, что виртуальные машины созданы успешно. Для этого перечислите созданные экземпляры с помощью команды
gcloud. Вы увидите экземпляры, соответствующие трем узлам БД, двум узлам HAProxy, а также контрольной ВМ и соответствующим зонам. Запишите зону для управляющего узла. Он понадобится вам позже в этой практической работе.gcloud compute instances list --filter="name~$CLUSTER" --project=$PROJECTexport ZONE=$(gcloud compute instances list \ --filter="name=$CLUSTER-control" \ --format="value(zone)" --project=$PROJECT)
4. Подготовьте ВМ к развертыванию
Вам нужно создать сеанс SSH для узла управления и выполнить действия, чтобы включить доступ по SSH ко всем виртуальным машинам (также называемым узлами).
- Убедитесь, что определены переменные среды для проекта и кластера.
export PROJECT="your-project-id" export CLUSTER="your-cluster-name" - Создайте SSH-ключ и добавьте его для входа в управляющую ВМ.
# Replace values with your specific GCP project, cluster and zone details ssh-keygen -t ed25519 -f $HOME/.ssh/google_compute_engine gcloud compute os-login ssh-keys add --key-file=$HOME/.ssh/google_compute_engine.pub --project=$PROJECT - Создайте правило брандмауэра, чтобы разрешить SSH-подключения и трафик VRRP.
gcloud compute config-ssh --project=$PROJECT gcloud compute firewall-rules create $CLUSTER-allow-ssh --network=$CLUSTER --project=$PROJECT --direction=INGRESS --action=allow --rules=tcp:22 --source-ranges="0.0.0.0/0" gcloud compute firewall-rules create $CLUSTER-allow-vrrp --network=$CLUSTER --project=$PROJECT --allow=112 --source-ranges="0.0.0.0/0" - Подключитесь к управляющей ВМ по SSH:
gcloud compute ssh "$CLUSTER-control" --zone=$ZONE --project=$PROJECT - Создайте в управляющем узле группу Linux с тем же названием, что и имя пользователя:
sudo groupadd -f $(id -un) sudo usermod -aG $(id -un) $(id -un) - При настройке Terraform создается несколько скриптов конфигурации, которые размещаются в каталоге
/tmp/управляющей виртуальной машины. В этих скриптах содержатся такие данные, как название кластера, сервисный аккаунт, название проекта и т. д. Создайте доступ по SSH без пароля от управляющих узлов ко всем узлам кластера, используя скрипты настройки на управляющем узле. Важно! Запишите пользователя service_account. Мы будем использовать его как SSH_USER в дальнейшем./tmp/setup-ssh-for-cluster.sh - В этой практической работе мы можем отключить SELinux на всех узлах. Скрипт Terraform добавляет файл /tmp/run-all.sh, который можно использовать для этой цели.
/tmp/run-all.sh sudo setenforce 0 - Если вы зарегистрировались в AlloyDB Omni и получили ссылки, добавьте их в переменные среды.
Выберите виртуальный IP-адрес для своей среды из входной переменной cidr_range в файлеcat >> ~/.codelab.env <<EOF export ORCHESTRATOR_ANSIBLE_COLLECTION_PATH="..." export ALLOYDB_OMNI_REPOSITORY_URL="..." export ALLOYDB_OMNI_ORCHESTRATOR_REPOSITORY_URL="..." export ALLOYDB_OMNI_COMMON_REPOSITORY_URL="..." export ETCD_REPOSITORY_URL="..." EOFterraform/variables.tf, чтобы он не конфликтовал с другими узлами, как показано в следующем примере:cat >> ~/.codelab.env <<EOF export VIRTUAL_IP="10.1.0.50" EOF
5. Установите необходимые компоненты ПО на все ВМ
Следующий шаг – установка необходимых компонентов ПО на виртуальные машины. Это можно сделать на управляющем узле. Все перечисленные ниже команды нужно выполнить на управляющем узле.
- Подключитесь к управляющей ВМ по протоколу SSH, если вы ещё не на управляющем узле.
Когда вы увидите приглашение SSH на управляющей виртуальной машине, укажите исходный файл среды.gcloud compute ssh "$CLUSTER-control" --zone=$ZONE --project=$PROJECTsource ~/.codelab.env - На управляющем узле установите Ansible и необходимые библиотеки Python.
sudo dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm -y sudo dnf install -y ansible sudo dnf install -y python3-grpcio python3-protobuf python3-googleapis-common-protos python3-grpcio-status - Затем скачайте TAR-файл коллекции Ansible Orchestrator RPM и установите его.
Командыgcloud storage cp "gs://${ORCHESTRATOR_ANSIBLE_COLLECTION_PATH#https://storage.googleapis.com/}google-alloydbomni_orchestrator-*.tar.gz" . COLLECTION_FILE=$(ls -1 google-alloydbomni_orchestrator-*.tar.gz \ | sort -V | tail -n 1) ansible-galaxy collection install "$COLLECTION_FILE" ansible-galaxy collection list | grep alloydbomni_orchestratorsort -Vиtail -n 1выбирают файл с последней версией. Примечание. Убедитесь, что переменная ORCHESTRATOR_ANSIBLE_COLLECTION_PATH заканчивается символом "/". - Оркестратор использует файл спецификации развертывания в формате инвентаря Ansible, чтобы понять топологию кластера. Создайте файл deployment_spec.yaml с информацией об узле на управляющем узле.
Примечание. Проверьте сгенерированный файл, чтобы убедиться, что в нем указаны действительные значения.cat > deployment_spec.yaml <<EOF alloydbomni: vars: cluster_manager: name: "$CLUSTER" etcd: setup: true config_forcewrite: true alloydbomni: major_version: "18" repo_url: $ALLOYDB_OMNI_REPOSITORY_URL alloydbomni_monitor: repo_url: $ALLOYDB_OMNI_COMMON_REPOSITORY_URL alloydbomni_cluster_manager: repo_url: $ALLOYDB_OMNI_ORCHESTRATOR_REPOSITORY_URL alloydbomni_node_manager: repo_url: $ALLOYDB_OMNI_ORCHESTRATOR_REPOSITORY_URL pgbouncer: repo_url: $ALLOYDB_OMNI_COMMON_REPOSITORY_URL pgbackrest: repo_url: $ALLOYDB_OMNI_COMMON_REPOSITORY_URL children: primary_instance_nodes: hosts: $CLUSTER-db1: $CLUSTER-db2: $CLUSTER-db3: load_balancer_nodes: hosts: $CLUSTER-haproxy1: $CLUSTER-haproxy2: EOF - Создайте файл плейбука install.yaml, который ссылается на роль install из коллекции orchestrator.
Примечание. Проверьте сгенерированный файл, чтобы убедиться, что в нем указаны действительные значения.cat > install.yaml <<EOF - name: Install AlloyDB Omni cluster components hosts: all vars: ansible_become: true ansible_user: $SSH_USER ansible_ssh_private_key_file: $HOME/ssh-key-cluster-sa roles: - role: google.alloydbomni_orchestrator.install EOF - Выполните плейбук, используя файл инвентаря, чтобы скачать и установить RPM на всех указанных узлах.
ansible-playbook -i deployment_spec.yaml install.yaml
6. Как запустить кластер AlloyDB Omni
На этом этапе мы установили все необходимые компоненты на все узлы. Мы готовы запустить кластер AlloyDB Omni.
- Подключитесь к управляющей ВМ по протоколу SSH, если вы ещё не на управляющем узле.
Когда вы увидите приглашение SSH на управляющей виртуальной машине, укажите исходный файл среды.gcloud compute ssh "$CLUSTER-control" --zone=$ZONE --project=$PROJECTsource ~/.codelab.env - Сгенерируйте хеш для пароля и получите установленную версию базы данных AlloyDB Omni:
encoded_password=$(echo -n "your unique password" | base64) DB_VERSION=$(/tmp/run-all.sh -t db 'rpm -q --qf "%{VERSION}\n" alloydbomni18' | tail -n 1) echo "$DB_VERSION" - Чтобы создать кластер, AlloyDB Omni должен знать, как его настроить. Создайте файл dbcluster.yaml со спецификациями кластера БД.
cat > dbcluster.yaml <<EOF Secret: metadata: name: db-pw-$CLUSTER spec: type: Opaque data: $CLUSTER: $encoded_password --- DBCluster: metadata: name: $CLUSTER spec: databaseVersion: $DB_VERSION mode: "" availability: numberOfStandbys: 2 enableAutoFailover: true enableAutoHeal: true autoFailoverTriggerThreshold: 2 autoHealTriggerThreshold: 2 healthcheckPeriodSeconds: 5 replayReplicationSlotsOnStandbys: false primarySpec: adminUser: passwordRef: name: db-pw-$CLUSTER resources: cpu: 4 memory: 32Gi disks: - name: DataDisk path: $PGDATA dbLoadBalancerOptions: gcp: loadBalancerIP: "$VIRTUAL_IP" loadBalancerType: "internal" loadBalancerInterface: "eth0" EOF - Создайте файл плейбука с названием bootstrap.yaml, который будет ссылаться на роль Ansible для создания кластера AlloyDB Omni.
cat > bootstrap.yaml <<EOF - name: Create DBCluster hosts: localhost roles: - role: google.alloydbomni_orchestrator.bootstrap EOF - Запустите playbook, чтобы создать кластер
ansible-playbook bootstrap.yaml -i deployment_spec.yaml -e resource_spec=dbcluster.yaml
7. Как настроить PgBouncer Connection Pooler (необязательно)
AlloyDB Omni поддерживает легкое объединение подключений с помощью PgBouncer. Вы можете настроить и запустить PgBouncer сразу после инициализации кластера.
- Создайте файл спецификации ресурса с именем pgbouncer.yaml, который связывает пул подключений с кластером базы данных:
cat > pgbouncer.yaml <<EOF PgBouncer: metadata: name: pgbouncer-pooler spec: dbclusterRef: $CLUSTER allowSuperUserAccess: true accessMode: "rw" port: 6432 EOF - Загрузите пул PgBouncer, используя тот же плейбук bootstrap.yaml, созданный ранее, и передав новый файл спецификации:
ansible-playbook bootstrap.yaml -i deployment_spec.yaml -e resource_spec=pgbouncer.yaml
8. Как проверить кластер AlloyDB Omni
Чтобы убедиться, что кластер работает правильно и доступен через балансировщик нагрузки, вы можете подключиться к нему с помощью стандартного клиента PostgreSQL из узла управления.
- Установите репозиторий клиента и пакет PostgreSQL 18 на управляющем узле:
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm sudo dnf install -y postgresql18 - Подключитесь к кластеру, используя зарезервированный ранее виртуальный IP-адрес. Вам будет предложено ввести пароль, закодированный в файле dbcluster.yaml:
/usr/pgsql-18/bin/psql -h $VIRTUAL_IP -U postgres -W - После подключения вы можете выполнять базовые SQL-запросы, чтобы проверить состояние кластера, например версию базы данных:
Вы увидите выходные данные, указывающие на то, что PostgreSQL 18 работает с AlloyDB Omni. Чтобы закрыть подсказку, введитеpostgres=# SELECT version();\q.
9. Как создать резервную копию данных с помощью pgBackRest (необязательно)
AlloyDB Omni интегрируется с pgBackRest для управления резервными копиями непосредственно в Cloud Storage. Вы можете настроить план резервного копирования и запустить резервное копирование по запросу в сегмент GCS, созданный с помощью Terraform.
- Создайте файл спецификации плана резервного копирования с именем backup_plan.yaml, указывающий на подготовленный сегмент GCS:
cat > backup_plan.yaml <<EOF BackupPlan: metadata: name: pgb-plan spec: dbclusterRef: $CLUSTER backupLocation: type: GCS gcsOptions: bucket: $CLUSTER-gcs-backups key: /backups EOF - Создайте сценарий Ansible с именем backup.yaml, который ссылается на роль управления резервным копированием:
cat > backup.yaml <<EOF - name: Manage AlloyDB Omni Backups hosts: localhost roles: - role: google.alloydbomni_orchestrator.backup EOF - Примените план резервного копирования, используя плейбук backup.yaml:
ansible-playbook backup.yaml -i deployment_spec.yaml -e resource_spec=backup_plan.yaml - После того как план будет успешно создан, создайте файл ресурса резервной копии по запросу с именем create_backup.yaml.
cat > create_backup.yaml <<EOF Backup: metadata: name: on-demand-backup spec: backupPlanRef: pgb-plan dbclusterRef: $CLUSTER EOF - Выполните пособие, чтобы запустить резервное копирование:
ansible-playbook backup.yaml -i deployment_spec.yaml -e resource_spec=create_backup.yaml - Чтобы проверить статус резервной копии, создайте плейбук status.yaml:
cat > status.yaml <<EOF
- name: Fetch AlloyDB Omni Resource Status
hosts: localhost
roles:
- role: google.alloydbomni_orchestrator.status
EOF
- Чтобы посмотреть список всех резервных копий, запустите плейбук:
ansible-playbook status.yaml -i deployment_spec.yaml -e resource_type=Backup
- Также, чтобы получить подробную информацию о определенной резервной копии, созданной ранее, передайте
-e resource_name=on-demand-backup:
ansible-playbook status.yaml -i deployment_spec.yaml \
-e resource_type=Backup \
-e resource_name=on-demand-backup
10. Как удалить ресурсы
После завершения развертывания вы можете удалить подготовленные ресурсы, чтобы избежать расходов.
- Создайте сценарий с именем teardown.yaml:
cat > teardown.yaml <<EOF - name: Tear down AlloyDB Omni cluster hosts: localhost roles: - role: google.alloydbomni_orchestrator.delete EOF - Выполните сценарий с помощью ansible-playbook. Если вы настроили резервное копирование, сначала удалите ресурсы Backup и BackupPlan:
Если вы настроили PgBouncer, удалите ресурс пула подключений:ansible-playbook teardown.yaml -i deployment_spec.yaml -e "resource_type=Backup" -e "resource_name=on-demand-backup" ansible-playbook teardown.yaml -i deployment_spec.yaml -e "resource_type=BackupPlan" -e "resource_name=pgb-plan" Затем укажите DBCluster в качестве resource_type и удалите кластер базы данных:ansible-playbook teardown.yaml -i deployment_spec.yaml -e "resource_type=PgBouncer" -e "resource_name=pgbouncer-pooler"ansible-playbook teardown.yaml -i deployment_spec.yaml -e "resource_type=DBCluster" -e "resource_name=$CLUSTER" - После удаления кластера выйдите из узла управления, вернитесь в терминал и перейдите в рабочий каталог Terraform.
Примечание. Если вы только что вошли в Cloud Shell, не забудьте задать следующие значения:export PROJECT="your-project-id" export CLUSTER="your-cluster-name" - Удалите правило брандмауэра VRRP и уничтожьте ресурсы, управляемые Terraform:
gcloud compute firewall-rules delete -q "$CLUSTER-allow-vrrp" --project="$PROJECT" gcloud compute firewall-rules delete -q "$CLUSTER-allow-ssh" --project="$PROJECT" terraform destroy - Подтвердите уничтожение. Поскольку оставшиеся сетевые ресурсы или маршруты иногда могут помешать полному удалению, выполните следующие безопасные команды очистки, чтобы убедиться, что все связанные правила брандмауэра, шлюзы NAT, маршрутизаторы, маршруты, подсети и сети полностью удалены. Замените
REGIONна регион развертывания, например us-central1:# Delete any remaining firewall rules associated with the cluster gcloud compute firewall-rules list --project=$PROJECT 2> /dev/null | grep ^$CLUSTER- | cut -f1 -d' ' | \ while read rule; do gcloud compute firewall-rules delete --project=$PROJECT --quiet $rule; done # Delete the Cloud NAT gateway and router if they still exist gcloud compute routers nats describe $CLUSTER-nat-gw --router=$CLUSTER-router --region=REGION --project=$PROJECT 2>/dev/null \ && gcloud compute routers nats delete $CLUSTER-nat-gw --router=$CLUSTER-router --region=REGION --project=$PROJECT --quiet gcloud compute routers describe $CLUSTER-router --region=REGION --project=$PROJECT 2>/dev/null \ && gcloud compute routers delete $CLUSTER-router --region=REGION --project=$PROJECT --quiet # Delete any remaining custom routes gcloud compute routes list --project=$PROJECT --filter="network:$CLUSTER" --format="value(name)" 2>/dev/null | \ while read route; do gcloud compute routes delete --project=$PROJECT --quiet $route 2>/dev/null || true; done # Delete the subnet and network if they still exist gcloud compute networks subnets describe $CLUSTER --region=REGION --project=$PROJECT 2>/dev/null \ && gcloud compute networks subnets delete $CLUSTER --region=REGION --project=$PROJECT --quiet gcloud compute networks describe $CLUSTER --project $PROJECT 2> /dev/null \ && gcloud compute networks delete $CLUSTER --project $PROJECT --quiet
11. Поздравляю!
Поздравляем с завершением практической работы!
Что мы обсудили
- Как создать и подготовить ВМ GCE для AlloyDB Omni.
- Как установить и запустить оркестратор AlloyDB Omni RPM.
- Как установить и настроить пакеты RPM AlloyDB Omni для архитектуры высокой доступности.
Подробнее об AlloyDB Omni можно узнать из документации.