1. Введение
В этом практическом занятии демонстрируется развертывание кластера высокой доступности (HA) AlloyDB Omni на виртуальных машинах Google Compute Engine (GCE). По завершении этого занятия вы создадите эталонную архитектуру высокой доступности, состоящую из 3 узлов базы данных и 2 узлов HAProxy, а также управляющего узла для выполнения операций управления.
Предварительные требования
- Доступ к проекту Google Cloud и Cloud Shell из Cloud Console.
- Google Cloud SDK (
gcloud) установлен и настроен. Подробную информацию об установке gcloud см. в инструкции по установке gcloud. - Установлена версия Terraform 1.9.8 .
Что вы узнаете
- Как создать и подготовить виртуальные машины GCE для AlloyDB Omni.
- Как установить и запустить AlloyDB Omni RPM Orchestrator.
- Как установить и настроить RPM-пакеты AlloyDB Omni для эталонной архитектуры высокой доступности.
Что вам понадобится
- Получите URL-ссылки на RPM-пакеты AlloyDB Omni и оркестратор RPM. Для этого необходимо заполнить форму регистрации AlloyDB Omni . Ссылки будут отправлены на ваш электронный адрес, указанный на сервере репозитория. Инициализируйте следующие переменные среды, чтобы 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 на странице выбора проекта выберите или создайте проект Google Cloud .
- Убедитесь, что для вашего облачного проекта включена функция выставления счетов. Узнайте, как проверить, включена ли функция выставления счетов для проекта .
Запустить Cloud Shell
Хотя Google Cloud можно управлять удаленно с ноутбука, в этом практическом занятии вы будете использовать Google Cloud Shell — среду командной строки, работающую в облаке.
В консоли Google Cloud нажмите на значок Cloud Shell на панели инструментов в правом верхнем углу:

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

Эта виртуальная машина содержит все необходимые инструменты разработки. Она предоставляет постоянный домашний каталог объемом 5 ГБ и работает в облаке Google, что значительно повышает производительность сети и аутентификацию. Вся работа в этом практическом задании выполняется в браузере. Вам не нужно ничего устанавливать.
3. Создайте виртуальные машины Google Cloud Compute Engine.
Подготовьте скрипты Terraform.
- Определите переменные среды для идентификатора вашего проекта и желаемого имени кластера. Вы будете использовать их на протяжении всего практического занятия.
Примечание: идентификатор проекта Google Cloud должен содержать от 6 до 30 символов. Для получения дополнительной информации см. https://docs.cloud.google.com/resource-manager/docs/creating-managing-projects#before_you_beginexport 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 версии 1.9.8, как того требует конфигурация развертывания.terraform validate terraform apply --auto-approve - После завершения работы Terraform убедитесь в успешном создании виртуальных машин, выведя список созданных экземпляров с помощью
gcloud. Вы должны увидеть экземпляры, соответствующие вашим 3 узлам базы данных, 2 узлам 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 $(id -un) sudo usermod -aG $(id -un) $(id -un) - Команда `Terraform setup` создает несколько конфигурационных скриптов и размещает их в каталоге
/tmp/управляющей виртуальной машины, включая такие данные, как имя кластера, учетная запись службы, имя проекта и т. д. Затем с помощью скриптов настройки на управляющем узле создается беспарольный SSH-доступ со всех узлов кластера с управляющих узлов. Важно : Запишите имя пользователя сервисной учетной записи. Мы будем использовать его в качестве SSH_USER позже в этом практическом занятии./tmp/setup-ssh-for-cluster.sh - Для этой практической работы мы можем отключить SELinux на всех узлах. Для этой цели можно использовать скрипт Terraform, добавляющий файл '/tmp/run-all.sh'.
/tmp/run-all.sh sudo setenforce 0 - Если вы зарегистрировались в AlloyDB Omni и получили ссылки, пришло время добавить эти URL-адреса в переменные окружения.
Выберите виртуальный 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 управляющей виртуальной машины выполните команду source environment file.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 с коллекцией RPM Orchestrator Ansible и установите его.
Примечание: Убедитесь, что переменная ORCHESTRATOR_ANSIBLE_COLLECTION_PATH заканчивается символом "/".gcloud storage cp "gs://${ORCHESTRATOR_ANSIBLE_COLLECTION_PATH#https://storage.googleapis.com/}google-alloydbomni_orchestrator-*.tar.gz" . ansible-galaxy collection install google-alloydbomni_orchestrator-0.1.0-6.tar.gz ansible-galaxy collection list | grep alloydbomni_orchestrator - Оркестратор использует файл спецификации развертывания в формате инвентаризации 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 Cluster
На данном этапе мы установили все необходимые компоненты на всех узлах. Мы готовы к инициализации кластера AlloyDB Omni.
- Подключитесь к управляющей виртуальной машине по SSH, если вы еще не подключены к управляющему узлу.
После подключения к командной строке SSH управляющей виртуальной машины выполните команду source environment file.gcloud compute ssh "$CLUSTER-control" --zone=$ZONE --project=$PROJECTsource ~/.codelab.env - Сгенерируйте хеш для своего пароля и запишите его.
encoded_password=$(echo -n "your unique password" | base64) - Для создания кластера 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: 18.1.0 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 bootstrap для создания кластера AlloyDB Omni.
cat > bootstrap.yaml <<EOF - name: Create DBCluster hosts: localhost vars: ansible_become: true ansible_user: $SSH_USER ansible_ssh_private_key_file: $HOME/ssh-key-cluster-sa roles: - role: google.alloydbomni_orchestrator.bootstrap EOF - Запустите свой плейбук для создания кластера.
ansible-playbook bootstrap.yaml -i deployment_spec.yaml -e resource_spec=dbcluster.yaml
7. (Необязательно) Настройка пула соединений PgBouncer
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 vars: ansible_become: true ansible_user: $SSH_USER ansible_ssh_private_key_file: $HOME/ssh-key-cluster-sa 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 :
- name: Fetch AlloyDB Omni Resource Status
hosts: localhost
vars:
ansible_become: true
ansible_user: $SSH_USER
ansible_ssh_private_key_file: $HOME/ssh-key-cluster-sa
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 vars: ansible_become: true ansible_user: $SSH_USER ansible_ssh_private_key_file: $HOME/ssh-key-cluster-sa 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 в качестве типа ресурса и удалите сам кластер базы данных: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.
Примечание : если вы только что вошли в облачную оболочку, не забудьте установить следующие параметры: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 Orchestrator.
- Как установить и настроить RPM-пакеты AlloyDB Omni для эталонной архитектуры высокой доступности.
Более подробную информацию об AlloyDB Omni можно найти в документации .