Рубрики
Uncategorized

Развертывание Twemproxy к GCP

Теперь, когда облачные ресурсы были подготовлены, и изображение докера для Twemproxy Server имеет … Tagged CoogleCloud, Twemproxy, Redis, Devops.

Используя Twemproxy с GCP Memorystore (3 части серии)

Теперь, когда были созданы облачные ресурсы, и был создан изображение Docker для Twemproxy Server, пришло время развернуть прокси к GCP и внести несколько изменений в клиентские услуги, которые будут передаваться с прокси.

Нажатие Twemproxy Docker Image на реестр Google контейнера

Сначала нам нужно подтолкнуть изображение Docker в реестр контейнера Google (GCR). Возможно, вам придется включить API GCR для проекта, содержащего Twemproxy Server, если вы не использовали службу реестра контейнера для любых других приложений в проекте. Вы можете включить API для GCR, используя облако SDK.

gcloud services enable containerregistry.googleapis.com

Чтобы нажать изображение в реестр контейнера в GCP, Docker должен быть аутентифицирован на вашем компьютере. Подробную информацию о настройке аутентификации можно найти здесь С рекомендуемым методом быть Помощник учетных данных GCloud Отказ

Вам необходимо будет иметь учетную запись службы, созданную с ролью «admin admin», а также ключевой файл клавиш с учетными данными службы учетной записи в формате JSON, чтобы использовать помощник учетных данных. С этими двумя вещами Docker можно аутентифицировать со следующими командами.

# make sure you are logged in before running the Docker authentication commands
gcloud auth login 

gcloud auth activate-service-account your-service-account-name@your-project-name.iam.gserviceaccount.com --key-file=path/to/key-file.json

gcloud auth configure-docker

С документом Docker вы можете нажать на изображение в GCR, а для вас будет создан новый реестр контейнера.

Для того, чтобы изображение было успешно нажато, он должен быть помечен либо, когда оно создано, либо до того, как вы нажимаете изображение в GCR с именем реестра gcr.io/your-project-name/ сопровождается названием изображения и версия. Если версия не указана Последние версия будет использоваться.

# if you are creating the image for the first time, you can tag it with the flag '-t'
docker build . -t gcr.io/your-project-name/twemproxy:v1

# or if the image already exists, use the 'docker tag' command
docker tag twemproxy gcr.io/your-project-name/twemproxy:v1

docker push gcr.io/your-project-name/twemproxy:v1

Создание шаблона изображения из образа докера

Следующий шаблон изображения должен быть создан. Это изображение виртуальной машины, которое будет использоваться группой управляемого экземпляра (MIG) при создании новых экземпляров Twemproxy Server.

Чтобы создать шаблон изображения, вам нужно будет иметь дайджест образа Docker, вы просто нажали в GCR. Дайджест — это уникальный идентификатор, сгенерированный GCP для различения разных версий одного и того же изображения докера. Вы можете найти Digest вручную, используя консоль на основе браузера, или вы можете скриптировать процесс извлечения дайджеста, который полезен для автоматизации процесса развертывания.

( Все примеры сценария будут написаны в PowerShell, но могут быть адаптированы как сценарии Shell Shell )

$Digest = (gcloud container images list-tags "gcr.io/your-project-name/twemproxy" `
    --limit=1 `
    --format="get(digest)")[0]

$Image = "gcr.io/your-project-name/twemproxy@{0}" -f $Digest

Этот скрипт извлекает список Twemproxy Docker Image Tags с пределом «1» так, что только первый извлекается. Это должно быть самым последним изображением, толкаемым в реестр. - ФОРМАТ Флаг уменьшает вывод только к Дайджест имущество. Вы можете запустить эту команду с форматом изменено на - ФОРМАТ = JSON Если вы хотите увидеть все доступные свойства. После того, как дайджест извлекается, он добавляется к полностью квалифицированному названию изображения в вашем реестре.

Теперь вы можете использовать имя документа Docker, чтобы создать шаблон изображения с контейнером Docker.

gcloud compute instance-templates create-with-container twemproxy-v1 `
    --container-image=$Image `
    --machine-type=f1-micro `
    --tags=fw-allow-lb-and-hc,fw-allow-twemproxy-6380 `
    --no-address `
    --scopes=cloud-platform `
    --network=your-network-name `
    --subnet=your-subnet-name `
    --region=us-east1

Обратите внимание, что имена тегов следуют за --tags Флаг должен соответствовать целевым тегам, определенным правилами брандмауэра, созданного в Предыдущий блог Post Отказ

Выполнение обновления прокатки на группе управляемых экземпляров

Наконец, нам нужно будет выполнить перезапуск Rolling из MIG, чтобы вновь созданный шаблон с помощью Twemproxy Server используется вместо шаблона заполнителя, используемым в коде Terraform.

gcloud compute instance-groups managed rolling-action start-update twemproxy-mig `
    --version="template=twemproxy-v1" `
    --zone=us-east1-b

Как только обновление Rolling завершит ваш TremProxy Server, будет жить и готово к тестированию. Чтобы ваши микросервисы для взаимодействия с помощью Twemproxy Server вместо непосредственно с экземпляром Memorystore, вам может потребоваться внесение некоторых изменений в конфигурацию любых библиотек клиентских библиотек Redis, используемых вашим кодом.

Например, в C # Пакет Nuget Stackexchange. Redis Имеет объект конфигурации, который должен регистрировать Twemproxy Server для правильной работы. Единственная разница между использованием этого пакета напрямую против MemoryStore и косвенно через Twemproxy является Прокси Собственность ConfigurationOptions объект. API для настройки и извлечения данных из кеша остается прежним.

private IConnectionMultiplexer CreateConnectionMultiplexer(string ip, int port)
{
    var config = new ConfigurationOptions
    {
        AsyncTimeout = 1000,
        EndPoints = {{ip, port}},
        Proxy = Proxy.Twemproxy
    };

    return ConnectionMultiplexer.Connect(config);
}

Вам также нужно будет установить номер IP и порта, чтобы соответствовать балансировке нагрузки для Twemproxy MIG.

Тест и настроить, чтобы соответствовать вашим требованиям

Теперь вы можете перераспределить свои клиентские услуги с любыми изменениями в коде и начать тестирование вашего вновь созданного кластера MemoryStore! Каждый корпус использования отличается, поэтому вы можете столкнуться с несколькими проблемами, которые я не столкнулся, или вам может понадобиться вернуться назад и дополнительно настроить Twemproxy Server для удовлетворения ваших требований.

Перед заключением этой серии на использование Twemproxy с MemoryStore в GCP есть последний скрипт, который вы можете найти полезным при автоматизации вашего процесса развертывания. Всякий раз, когда вы добавляете, удалите или воссоздаете экземпляр Memreamstore, список IP-адресов в файле YAML, используемый для настройки сервера TremProxy, необходимо будет обновить. Вместо того, чтобы делать это вручную, вы можете использовать сценарий.

Первый шаг — удалить существующий список IP-адресов из файла yaml.

Get-Content -Path .\nutcracker.yml | Where-Object {$_ -notmatch ":6379:1"} | Set-Content .\tmp.yml
Get-Content -Path .\tmp.yml | Set-Content .\nutcracker.yml
Remove-Item .\tmp.yml

Затем используйте SDK GCloud, чтобы получить список IP-адресов ваших развернутых экземпляров памяти памяти и добавить их в конец файла yaml. Для этого на работу важно, чтобы Серверы Свойство конфигурации YAML будет последним перечисленным.

gcloud redis instances list --region us-east1 --format "value(host)" `
| ForEach-Object {"        - {0}:6379:1" -f $_} `
| Out-File -FilePath .\nutcracker.yml -Append -Encoding utf8

С помощью сценариев в этом посте в блоге вы должны иметь большинство, если не все инструменты, необходимые для полностью автоматизации процесса перераспределения вашего Twemproxy Server, когда вам нужно изменить конфигурацию или увеличить количество экземпляров памяти памяти.

Используя Twemproxy с GCP Memorystore (3 части серии)

Оригинал: «https://dev.to/jakewitcher/deploying-twemproxy-to-gcp-2m1o»