Этот документ предназначен для архитекторов и людей, которые работают в области эксплуатации и административные команды. В документе описан пример шаблона, который вы можете использовать для ваших собственных развертываний в Google Cloud. В этом шаблоне балансировщик нагрузки направляет трафик на Вычислительный движок случаи в группы управляемых экземпляров которые служат контенту. В случае сбоя вы обновляете внешняя балансировка нагрузки HTTP(S) конфигурации и переключения на статический сайт в Облачное хранилище. Для выполнения этого руководства вам потребуется зарегистрированное доменное имя, которым вы управляете. и хотите использовать с этим документом. В производственных развертываниях ваш веб-сайт, вероятно, содержит гораздо больше файлов и дополнительный код приложения на виртуальных машинах группы управляемых экземпляров (ВМ), чем показано в этом документе. Затем в облачном хранилище размещается более ограниченная статическая версия, обеспечивающая минимальную функциональность. При теплом переходе на другой ресурс сценарий, пользователи видят этот веб-сайт с ограниченным доступом до тех пор, пока группы управляемых экземпляров восстанавливаться и может обслуживать трафик для полноценного использования веб-сайта. В этом руководстве вы развертываете ресурсы для создания среды, как показано на следующее изображение: Когда вам нужно выполнить отработку отказа, вы обновляете конфигурацию балансировщика нагрузки, чтобы трафик в Cloud Storage, как показано на следующем рисунке: Этот шаблон теплого аварийного переключения уравновешивает стоимость запуска другого управляемого группа экземпляров в другом регионе, которую вы используете, только когда основные регионы провал. Стоимость статического сайта с использованием Cloud Storage ниже, чем работающего другая группа управляемых экземпляров, но есть небольшая задержка при обновлении загрузки настройка балансировщика между вариантами хостинга. Ограниченный веб-сайт опыт работы в облачном хранилище лучше, чем недоступный веб-сайт и плохой Опыт клиентов. Для альтернативного подхода, использующего облачный DNS вместо внешнего Балансировка нагрузки HTTP(S) для управления аварийным переключением, см. Разверните теплый восстанавливаемый веб-сервер, используя Cloud DNS с Compute Engine и Cloud Storage. Этот шаблон полезен, если у вас есть или вы хотите использовать облачный DNS. Для запуска надежных приложений в Google Cloud мы рекомендуем вам разработать инфраструктура вашего приложения для обработки простоев. В зависимости от вашего приложения и бизнес-потребностей, вам может понадобиться холодная отработка отказа, теплая отработка отказа или горячая шаблон отработки отказа. Для получения дополнительной информации о том, как определить наилучший подход к собственные приложения, см. Руководство по планированию аварийного восстановления. В этом документе используются базовые веб-сервер Apache, но тот же подход к развертыванию инфраструктуры применим и к другим среды приложений, которые необходимо создать. ## Цели - - Создавайте региональные группы управляемых экземпляров с настраиваемым образом виртуальной машины. - Создайте корзину облачного хранилища. - Создание и настройка внешней балансировки нагрузки HTTP(S). - Протестируйте отработку отказа теплого веб-сервера с помощью обновленного балансировщика нагрузки. конфигурация. - Протестируйте восстановление и восстановление после отказа с обновленной конфигурацией балансировщика нагрузки. ## Расходы В этом руководстве используются следующие оплачиваемые компоненты Google Cloud: - - Вычислительный движок - Сеть - Облачное хранилище Чтобы рассчитать стоимость на основе прогнозируемого использования, воспользуйтесь калькулятором цен. ## Прежде чем вы начнете - - Войдите в свою учетную запись Google Cloud. Если вы новичок в Гугл Облако, создать учетную запись, чтобы оценить, как наши продукты работают в реальные сценарии. Новые клиенты также получают 300 долларов в виде бесплатных кредитов на запускать, тестировать и развертывать рабочие нагрузки. - В консоли Google Cloud на странице выбора проекта выберите или создайте проект Google Cloud. - Убедитесь, что биллинг включен для вашего облачного проекта. Узнайте, как проверьте, включен ли биллинг в проекте. - Включите API Compute Engine. - Установите и инициализируйте интерфейс командной строки Google Cloud. - В консоли Google Cloud на странице выбора проекта выберите или создайте проект Google Cloud. - Убедитесь, что биллинг включен для вашего облачного проекта. Узнайте, как проверьте, включен ли биллинг в проекте. - Включите API Compute Engine. - Установите и инициализируйте интерфейс командной строки Google Cloud. Вы можете запустить Google Cloud CLI в консоль без установки Облачный интерфейс командной строки Google. Чтобы запустить gcloud CLI в консоль, используйте Cloud Shell ## Подготовьте среду В этом разделе вы определяете некоторые переменные для ваших имен ресурсов и места. Эти переменные используются командами Google Cloud CLI по мере того, как вы развернуть ресурсы. В этом документе, если не указано иное, вы вводите все команды в Облачная оболочка или в вашей локальной среде разработки. - Заменять с вашим собственным идентификатором проекта. При желании, предоставить свой собственный суффикс имени для ресурсов, чтобы помочь найти и идентифицировать их, таких как PROJECT_ID приложение Укажите два региона, например и сша-запад1 и зону в одном из этих регионов, например сша-запад2 . Эта зона определяет, где находится исходная базовая ВМ. создается, который используется для создания образа для управляемой группы экземпляров сша-запад1-а Наконец, установите домен, который используется для вашего статического веб-сайта, например пример.com PROJECT_ID= PROJECT_ID NAME_SUFFIX= приложение РЕГИОН1= сша-запад1 РЕГИОН2= сша-запад2 ЗОНА= us-west1-a ДОМЕН= example.com ## Создайте VPC и подсеть Чтобы обеспечить сетевой доступ к виртуальным машинам, вы создаете виртуальное частное облако (VPC). и подсети. Поскольку вам нужны группы управляемых экземпляров в двух регионах, вы создаете одну подсети в каждом регионе. Для получения дополнительной информации о преимуществах пользовательского режим подсети для управления диапазонами IP-адресов, используемых в вашей среде, см. Используйте сети VPC пользовательского режима. - Создайте VPC с пользовательским режимом подсети: Вычислительные сети gcloud создают network-$NAME_SUFFIX --subnet-mode=custom Теперь создайте две подсети в новом VPC, по одной для каждого область, край. Определите свои собственные диапазоны адресов, такие как и 10.1.0.0/20 , который вписаться в диапазон вашей сети: 10.2.0.0/20 подсети вычислительных сетей gcloud создают n subnet-$NAME_SUFFIX-$REGION1 n --network=network-$NAME_SUFFIX n --range= 10.1.0.0/20n --region=$REGION1 подсети gcloud Compute Networks создают n subnet-$NAME_SUFFIX-$REGION2 n --network=network-$NAME_SUFFIX n --range= 10.2.0.0/20n --region=$REGION2 ## Создать правила брандмауэра Чтобы обеспечить правильную передачу сетевого трафика в VPC, используйте правила брандмауэра. - Создайте правила брандмауэра, чтобы разрешить веб-трафик и проверки работоспособности нагрузки группы балансировщика и управляемого экземпляра: правила брандмауэра вычислений gcloud create allow-http-$NAME_SUFFIX n --network=network-$NAME_SUFFIX n --direction=ВХОД n --priority=1000 n --action=РАЗРЕШИТЬ n --rules=tcp:80 n -- исходные диапазоны = 0.0.0.0/0 n --target-tags = http-сервер Правила брандмауэра вычислений gcloud create allow-health-check-$NAME_SUFFIX n --network=network-$NAME_SUFFIX n --action=разрешить n --direction=вход n --source-ranges=130.211.0.0/22,35.191. 0.0/16 n --target-tags=allow-health-check n --rules=tcp:80 Правило HTTP разрешает трафик на любую виртуальную машину, где применяется http-servertag, и из любого источника с помощью 0.0.0.0/0диапазон. Для правило проверки здоровья, диапазоны по умолчанию для Google Cloud установлены таким образом, чтобы платформа могла правильно проверить работоспособность ресурсов. Чтобы разрешить трафик SSH для первоначальной настройки образа базовой ВМ, область правило брандмауэра для вашей среды с помощью --source-диапазон параметров. Возможно, вам придется поработать с вашей сетевой командой, чтобы определить, какие диапазоны источников ваша организация использует Заменять с вашими собственными диапазонами IP-адресов: IP_АДРЕС_SCOPE правила брандмауэра вычислений gcloud create allow-ssh-$NAME_SUFFIX n --network=network-$NAME_SUFFIX n --direction=ВХОД n --priority=1000 n --action=РАЗРЕШИТЬ n --rules=tcp:22 n -- исходные диапазоны = IP_АДРЕС_SCOPE После создания правил брандмауэра убедитесь, что все три правила добавлен: список правил брандмауэра вычислений gcloud n --project=$PROJECT_ID n --filter="NETWORK=network-$NAME_SUFFIX"В следующем примере выходных данных показано, что три правила были выполнены правильно. созданный: НАЗВАНИЕ НАПРАВЛЕНИЕ СЕТИ ПРИОРИТЕТ РАЗРЕШИТЬ сетевое приложение для проверки работоспособности ВХОД 1000 tcp:80 разрешить-http-приложение сетевое приложение ВХОД 1000 tcp: 80 ВХОД 1000 tcp: 22 сетевого приложения allow-ssh-app. ## Создать и настроить базовый образ ВМ Чтобы создать идентичные виртуальные машины, которые вы развертываете без дополнительной настройки, вы использовать собственный образ виртуальной машины. Этот образ фиксирует конфигурацию ОС и Apache, а также используется для создания каждой виртуальной машины в группе управляемых экземпляров на следующих шагах. На виртуальной машине вы создаете базовый файл index.html на постоянном диске и установить его на /var/www/example.com. Файл конфигурации Apache по адресу /etc/apache2/sites-available/example.com.conf обслуживает веб-контент из смонтированное постоянное местоположение на диске На следующей диаграмме показана базовая HTML-страница, обслуживаемая Apache, которая хранится на постоянном диске: Вы создаете эту среду в следующих шагах. - Создайте базовую виртуальную машину с подключенным постоянным диском: экземпляры вычислений gcloud создают vm-base-$NAME_SUFFIX n --zone=$ZONE n --machine-type=n1-standard-1 n --subnet=subnet-$NAME_SUFFIX-$REGION1 n --tags=http-server n --image=debian-10-buster-v20210420 n --image-project=debian-cloud n --boot-disk-size=10GB n --boot-disk-type=pd-balanced n --boot-disk- имя-устройства=vm-base-$NAME_SUFFIX n --create-disk=type=pd-ssd,name=disk-base-$NAME_SUFFIX,size=10GB,device-name=disk-base-$NAME_SUFFIX Вы используете параметры, определенные в начале этого документа, чтобы назвать ВМ и подключитесь к правильной подсети. Имена также назначаются из параметров для загрузочный диск и диск данных. Чтобы установить и настроить простой веб-сайт, подключитесь к базовой виртуальной машине с помощью SSH: gcloud вычислить ssh vm-base-$NAME_SUFFIX --zone=$ZONE В сеансе SSH с виртуальной машиной создайте сценарий для настройки виртуальной машины в редактор на ваш выбор. В следующем примере используется Нано как редактор: нано настроить-vm. Вставьте следующий скрипт конфигурации в файл: мусорное ведро / баш ИМЯ_СУФФИКС= приложение # Создаем директорию для основных файлов сайта sudo mkdir -p /var/www/example.com sudo chmod a+w /var/www/example.com sudo chown -R www-данные: /var/www/example.com # Найдите имя диска, затем отформатируйте и смонтируйте его DISK_NAME="google-disk-base-$NAME_SUFFIX"DISK_PATHfind /dev/disk/by-id -name DISK_NAME}"| xargs -Ireadlink -f n sudo mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0, отбросить $DISK_PATH sudo mount -o discard, по умолчанию $DISK_PATH/var/www/example.com # Установить Апач sudo apt-получить обновление&& sudo apt-get -y установить apache2 # Записать базовый HTML-файл на смонтированный постоянный диск sudo tee -a /var/www/example.com/index.html >/dev/null EOF' Пример высокой готовности/аварийного восстановления

Добро пожаловать на веб-сайт Compute Engine с теплым аварийным переключением на Cloud Storagep>

*:80> ServerName www.example.com ServerAdmin webmaster@localhost DocumentRoot /var/www/example.com ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined EOF # Включить файл конфигурации Apache и перезагрузить службу sudo a2dissite 000-по умолчанию sudo a2ensite example.com.conf sudo systemctl перезагрузить apache2 Обновите переменная, чтобы соответствовать значению, установленному в начало этого документа, например Приложение NAME_SUFFIX. Запишите файл и выйдите из редактора. Например, в Nano вы используете Ctrl-O, чтобы записать файл, затем выйти с помощью Ctrl-Х. Сделайте скрипт конфигурации исполняемым, затем запустите его: chmod +x настроить-vm../configure-vm. Выйдите из сеанса SSH на виртуальную машину: выход Получите IP-адрес виртуальной машины и используйте curl, чтобы увидеть основную веб-страницу: curl $(вычислительные экземпляры gcloud описывают vm-base-$NAME_SUFFIX n --zone $ZONE n --format="value(networkInterfaces.accessConfigs.[0].natIPn Базовый веб-сайт возвращается, как показано в следующем примере вывода: Пример высокой готовности/аварийного восстановления

Добро пожаловать на веб-сайт Compute Engine с теплым аварийным переключением на Cloud Storagep>

Вычислительные образы gcloud создают образ-диск-$NAME_SUFFIX n --source-disk=disk-base-$NAME_SUFFIX n --source-disk-zone=$ZONE # Создать шаблоны экземпляров Gcloud Compute instance-templates create template-$NAME_SUFFIX-$REGION1 n --machine-type=n1-standard-1 n --subnet=projects/$PROJECT_ID/regions/$REGION1/subnetworks/subnet-$NAME_SUFFIX-$REGION1 n --region=$REGION1 n --tags=http-сервер n --metadatastartup-script /bin/bashn'echo\ UUIDblkid\ -s\ UUID\ -o\ значение\ /dev/sdb /var/www/example. com\ ext4\ discard,defaults,nfail\ 0\ 2 ee\ -a\ /etc/fstabn'mount\ -a n --image=image-$NAME_SUFFIX n --create-disk=image=image-disk-$NAME_SUFFIX ,автоудаление=да Gcloud Compute instance-templates create template-$NAME_SUFFIX-$REGION2 n --machine-type=n1-standard-1 n --subnet=projects/$PROJECT_ID/regions/$REGION2/subnetworks/subnet-$NAME_SUFFIX-$REGION2 n --region=$REGION2 n --tags=http-сервер n --metadatastartup-script /bin/bashn'echo\ UUIDblkid\ -s\ UUID\ -o\ значение\ /dev/sdb /var/www/example. com\ ext4\ discard,defaults,nfail\ 0\ 2 ee\ -a\ /etc/fstabn'mount\ -a n --image=image-$NAME_SUFFIX n --create-disk=image=image-disk-$NAME_SUFFIX ,автоудаление=да # Создать проверку работоспособности для экземпляров ВМ проверки работоспособности вычислений gcloud создают http http-basic-check-$NAME_SUFFIX n --port 80 # Создаем группы управляемых экземпляров управляемые группы экземпляров вычислений gcloud создать группу экземпляров-$NAME_SUFFIX-$REGION1 n --template=template-$NAME_SUFFIX-$REGION1 n --size=2 n --region=$REGION1 n --health-check=http- базовая проверка-$NAME_SUFFIX управляемые группы экземпляров вычислений gcloud create instance-group-$NAME_SUFFIX-$REGION2 n --template=template-$NAME_SUFFIX-$REGION2 n --size=2 n --region=$REGION2 n --health-check=http- базовая проверка-$NAME_SUFFIX ## Создание и настройка балансировщика нагрузки Чтобы пользователи могли получить доступ к вашему веб-сайту, вам необходимо разрешить трафик на виртуальные машины. которые работают в группах управляемых экземпляров. Вы также хотите автоматически перенаправлять трафик на новые виртуальные машины в случае сбоя зоны в группе управляемых экземпляров. В следующем разделе вы создадите внешний балансировщик нагрузки с серверной службой для HTTP-трафика на порту 80, используйте проверку работоспособности, созданную на предыдущих шагах, и сопоставьте внешний IP-адрес. адрес через серверную службу. Для получения дополнительной информации см. Как настроить простой внешний балансировщик нагрузки HTTP. - Создайте и настройте балансировщик нагрузки для своего приложения: # Настройте правила порта для HTTP-порта 80 группы экземпляров gcloud set-named-ports n instance-group-$NAME_SUFFIX-$REGION1 n --named-ports http:80 n --region $REGION1 группы экземпляров вычислений gcloud set-named-ports n instance-group-$NAME_SUFFIX-$REGION2 n --named-ports http:80 n --region $REGION2 # Создайте серверную службу и добавьте к ней группы управляемых экземпляров. серверные службы вычислений gcloud создают n веб-серверную службу-$NAME_SUFFIX n --protocol=HTTP n --port-name=http n --health-checks=http-basic-check-$NAME_SUFFIX n --global серверные службы вычислений gcloud add-backend n веб-серверная служба-$NAME_SUFFIX n --instance-group=instance-group-$NAME_SUFFIX-$REGION1 n --instance-group-region=$REGION1 n --global серверные службы вычислений gcloud add-backend n веб-серверная служба-$NAME_SUFFIX n --instance-group=instance-group-$NAME_SUFFIX-$REGION2 n --instance-group-region=$REGION2 n --global # Создайте карту URL для серверной службы gcloud вычислить URL-карты создать веб-карту-http-$NAME_SUFFIX n --default-service web-backend-service-$NAME_SUFFIX # Настроить переадресацию HTTP-трафика gcloud вычислить target-http-proxy create n http-lb-proxy-$NAME_SUFFIX n --url-map web-map-http-$NAME_SUFFIX Правила переадресации вычислений gcloud создают n http-content-rule-$NAME_SUFFIX n --global n --target-http-proxy=http-lb-proxy-$NAME_SUFFIX n --ports=80 Получите IP-адрес правила переадресации веб-трафика: Правила переадресации вычислений gcloud IP_ADDRESS описывают http-content-rule-$NAME_SUFFIX n --global n --format="value(IPAddressn Использовать curl или откройте веб-браузер для просмотра веб-сайта с использованием IP-адреса. адрес балансировщика нагрузки из предыдущего шага: завиток $IP_АДРЕС Балансировщику нагрузки требуется несколько минут, чтобы завершить развертывание и корректно направлять трафик на ваш бэкенд. Ошибка HTTP 404 возвращается, если балансировщик нагрузки все еще развертывается. При необходимости подождите несколько минут и попробуйте снова получить доступ к веб-сайту. Базовый веб-сайт возвращается, как показано в следующем примере вывода: Пример высокой готовности/аварийного восстановления

Добро пожаловать на веб-сайт Compute Engine с теплым аварийным переключением на Cloud Storagep>

группы управляемых экземпляров восстанавливаются и могут обслуживать трафик для всего веб-сайта опыт. - Подтвердите домен которые вы хотите использовать с корзиной Cloud Storage. Создайте сегмент облачного хранилища, соответствующий имени вашего домена. и хотите использовать: gsutil mb gsstatic-web.$DOMAIN Используется переменная DOMAIN, определенная в начале этого документа, например . В этом примере статические файлы хранятся по адресу пример.com static-web.example.com. Создайте локальный файл, который вы скопируете в корзину Cloud Storage в следующий шаг: cat< index.html HA / DR example

Welcome to a test static web server with warm failover from Cloud Storagep>

HA / DR example

Welcome to a test static web server with warm failover from Cloud Storagep>

curlagain, or open your web browser, to access the IP address of the load balancer: curl $IP_ADDRESS It might take a few minutes for the load balancer to update the configuration and to correctly direct traffic back to your managed instance groups. If needed, wait a few minutes and try to access the website again. The main website from the managed instance groups is returned, as shown in the following example output: HA / DR example p>Welcome to a Compute Engine website with warm failover to Cloud Storagep> ## Clean up To avoid incurring charges to your Google Cloud account for the resources used in this tutorial, either delete the project that contains the resources, or keep the project and delete the individual resources. To delete the individual resources created in this document, complete the following steps: - Delete the Cloud Storage bucket: gsutil rm -r gsstatic-web.$DOMAIN Delete the load balancer configuration: gcloud compute forwarding-rules delete n http-content-rule-$NAME_SUFFIX --global --quiet gcloud compute target-http-proxies delete n http-lb-proxy-$NAME_SUFFIX --quiet gcloud compute url-maps delete web-map-http-$NAME_SUFFIX --quiet gcloud compute url-maps delete web-map-http-bucket-$NAME_SUFFIX --quiet gcloud compute backend-services delete n web-backend-service-$NAME_SUFFIX --global --quiet gcloud compute backend-buckets delete web-bucket-$NAME_SUFFIX --quiet Delete the managed instance groups and health check: gcloud compute instance-groups managed delete n instance-group-$NAME_SUFFIX-$REGION1 n --region=$REGION1 --quiet gcloud compute instance-groups managed delete n instance-group-$NAME_SUFFIX-$REGION2 n --region=$REGION2 --quiet gcloud compute health-checks delete http-basic-check-$NAME_SUFFIX --quiet Delete the instance templates, images, base VM, and persistent disks: gcloud compute instance-templates delete n template-$NAME_SUFFIX-$REGION1 --quiet gcloud compute instance-templates delete n template-$NAME_SUFFIX-$REGION2 --quiet gcloud compute images delete image-$NAME_SUFFIX --quiet gcloud compute images delete image-disk-$NAME_SUFFIX --quiet gcloud compute instances delete vm-base-$NAME_SUFFIX n --zone=$ZONE --quiet Delete the firewall rules. gcloud compute firewall-rules delete n allow-health-check-$NAME_SUFFIX --quiet gcloud compute firewall-rules delete n allow-ssh-$NAME_SUFFIX --quiet gcloud compute firewall-rules delete n allow-http-$NAME_SUFFIX --quiet Delete the subnet and VPC. gcloud compute networks subnets delete n subnet-$NAME_SUFFIX-$REGION1 --region=$REGION1 --quiet gcloud compute networks subnets delete n subnet-$NAME_SUFFIX-$REGION2 --region=$REGION2 --quiet gcloud compute networks delete network-$NAME_SUFFIX --quiet ## What's next - - For an alternative approach that uses Cloud DNS instead of external HTTP(S) Load Balancing to control the failover, see Deploy a warm recoverable web server using Cloud DNS with Compute Engine and Cloud Storage. This pattern is useful if you have, or want to use, Cloud DNS. - To learn how how to determine the best approach for your own applications and which recovery method to use, see the Disaster recovery planning guide. - To see other patterns for applications, such as cold and hot failover, see Disaster recovery scenarios for applications. - For more ways to handle scale and availability, see the Patterns for scalable and resilient apps. - Explore reference architectures, diagrams, tutorials, and best practices about Google Cloud. Take a look at our Cloud Architecture Center.