Меня зовут Петр Зайцев, я генеральный директор, основатель Перкона и я хочу сказать тебе:
- как мы перешли от решений с открытым исходным кодом к базе данных как услуге;
- какие существуют подходы к развертыванию баз данных в облаке;
- как Kubernetes может заменить DBaaS, устраняя зависимость от поставщиков и сохраняя простоту СУБД как услуги.
Как мы перешли от открытого исходного кода к базе данных как услуги в облаке
Я работаю в open source с конца 90-х.Двадцать лет назад использовать открытый исходный код, например базы данных, было не так просто.
Нужно было скачать исходный код, пропатчить его, скомпилировать и только потом использовать.
Затем открытый исходный код претерпел ряд упрощений:
- Исходники Tar.gz и INSTALL, которые нужно было скомпилировать;
- пакеты с зависимостями, такие как .
deb и .
rpm, где вам нужно установить только набор пакетов;
- репозитории пакетов, такие как APT и YUM, установка которых происходит автоматически;
- такие решения, как Docker и Snap, которые позволяют получать пакеты путем установки без внешних зависимостей.
В то же время, в отличие от ситуации 20 лет назад, когда каждый был экспертом по сборке, сейчас большинство разработчиков не могут создавать используемые ими инструменты из исходного кода.
На самом деле это неплохо, потому что:
- Мы можем использовать более сложное, но более удобное для пользователя программное обеспечение.
Например, браузер удобен в использовании, но включает в себя множество компонентов с открытым исходным кодом и его неудобно создавать с нуля.
- Все больше людей могут стать разработчиками программного обеспечения с открытым исходным кодом и другого программного обеспечения, больше программного обеспечения используется предприятиями, и потребность в нем возрастает.
Мы используем простые решения, а провайдеры используют компоненты с открытым исходным кодом, но по факту они прибиты к одному из больших облаков.
То есть самый простой и быстрый способ развертывания открытого исходного кода (и совместимого с ним программного обеспечения) — в облаках, с использованием собственного API. Когда дело доходит до баз данных в облаке, существует два подхода:
- Соберите инфраструктуру базы данных, как в обычном дата-центре.
То есть возьмите стандартные строительные блоки: вычисления, хранилище и так далее, установите на них Linux и базу данных и настройте их.
- Используйте базу данных как услугу, где провайдер предлагает готовую базу данных внутри облака.
Провайдер обязуется обеспечить высокую доступность и простоту масштабирования, исправление баз данных, резервное копирование и настройку производительности.
Два типа базы данных как услуги на основе открытого исходного кода и альтернатива в виде Kubernetes.
Существует два типа базы данных как услуги для открытых баз данных:- Стандартный продукт с открытым исходным кодом, упакованный в серверную часть администрирования для простоты развертывания и управления.
- Передовое коммерческое решение с различными надстройками, совместимое с открытым исходным кодом.
Например, несмотря на то, что разные типы облаков поддерживают по сути один и тот же стандарт MySQL, между ними есть существенные различия: в работе, производительности, резервном копировании и так далее.
Миграция из одного облака в другое может оказаться сложной задачей, особенно для сложных приложений.
И тут возникает вопрос — можно ли получить удобство Базы данных как услуги, а не простого решения с открытым исходным кодом? Плохая новость в том, что подобных решений на рынке, к сожалению, пока нет. Хорошая новость в том, что есть Kubernetes, который позволяет реализовывать подобные решения.
Kubernetes — это операционная система для облака или центра обработки данных, которая позволяет развертывать приложение и управлять им на нескольких серверах в кластере, а не на одном хосте.Сейчас Kubernetes — лидер в категории такого ПО.
Было много разных решений подобных проблем, но оно стало стандартом.
Многие компании, которые раньше фокусировались на альтернативных решениях, теперь сосредоточены на адаптации своих продуктов для поддержки Kubernetes. Кроме того, Kubernetes — универсальное решение, которое поддерживается в частных, публичных и гибридных облаках многих вендоров, например: AWS, Google Cloud, Microsoft Azure, Облачные решения Mail.ru .
Как Kubernetes работает с базами данных
Kubernetes изначально был разработан для приложений без сохранения состояния, которые обрабатывают данные, но ничего не хранят, например микросервисы или веб-приложения.Базы данных находятся на другом конце спектра, то есть это приложения с отслеживанием состояния.
А Kubernetes изначально не предназначался для таких приложений.
Однако недавно в Kubernetes появились функции, позволяющие использовать базы данных и другие приложения с отслеживанием состояния:
- Концепция StatefulSet — это целая серия примитивов для обработки событий об остановке работы подов и реализации Graceful Shutdown (предсказуемого завершения работы приложения).
- Постоянные тома — это хранилища данных, связанные с модулями, объектами управления Kubernetes.
- Операторская платформа — то есть возможность создавать компоненты для управления базами данных и другими приложениями с отслеживанием состояния, распределенными по множеству узлов.
Percona предлагает два решения с открытым исходным кодом для Kubernetes:
- Оператор Kubernetes для Percona Server для MongoDB.
- Kubernetes Оператор для XtraDB CLUSTER — это служба, совместимая с MySQL и обеспечивающая высокую доступность и согласованность.
Вы также можете использовать один узел, если высокая доступность не требуется, например для базы данных разработчиков.
Некоторые люди используют Kubernetes Operations напрямую — это в основном продвинутые пользователи, хорошо понимающие, как работает технология.
Другие запускают его на бэкенде — таких пользователей интересует что-то вроде Database as a Service, они не хотят вникать в нюансы Kubernetes. Для второй группы пользователей у нас есть еще одно решение с открытым исходным кодом — Percona DBaaS CLI Tool. Это экспериментальное решение для тех, кто хочет получить DBaaS с открытым исходным кодом на базе Kubernetes без глубокого понимания технологии.
Как запустить DBaaS Percona в Google Kubernetes Engine
Google Kubernetes Engine, на мой взгляд, является одной из наиболее функциональных реализаций технологии Kubernetes. Он доступен во многих регионах мира и имеет простой и удобный инструмент командной строки (SDK), который позволяет создавать сценарии, а не управлять платформой вручную.Чтобы наш DBaaS работал, нам нужны следующие компоненты:
- Кубектл.
- Google Cloud SDK.
- Интерфейс командной строки Percona DBaaS.
Установить кубектл
Устанавливаем пакет для вашей операционной системы, будем рассматривать на примере Ubuntu. Подробнее здесь .
sudo apt-get update && sudo apt-get install -y apt-transport-https gnupg2 curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list sudo apt-get update sudo apt-get install -y kubectl
Установка Google Cloud SDK
Устанавливаем программный пакет таким же образом.Подробнее здесь .
# Add the Cloud SDK distribution URI as a package source
echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg]
http://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
# Import the Google Cloud Platform public key
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key --keyring /usr/share/keyrings/cloud.google.gpg add -
# Update the package list and install the Cloud SDK
sudo apt-get update && sudo apt-get install google-cloud-sdk
Установка интерфейса командной строки Percona DBaaS
Установите из репозиториев Percona. Инструмент Percona DBaaS CLI Tool по-прежнему является экспериментальным продуктом, поэтому он находится в экспериментальном репозитории, который необходимо включить отдельно, даже если у вас уже установлены репозитории Percona. Подробнее здесь .Алгоритм установки:
- Настройте репозитории Percona с помощью инструмента percona-release. Сначала вам нужно скачать и установить официальный пакет percona-release от Percona:
wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb sudo dpkg -i percona-release_latest.generic_all.deb
- Включите компонент репозитория экспериментальных инструментов следующим образом:
sudo percona-release enable tools experimental
- Установите пакет percona-dbaas-cli:
sudo apt-get update sudo apt-get install percona-dbaas-cli
Настройка работы компонентов
Подробнее о настройках здесь .
Сначала вам нужно войти в свою учетную запись Google. Далее Google Cloud позволяет одному пользователю иметь множество независимых проектов, поэтому вам необходимо указать рабочий проект, используя код этого проекта: gcloud auth login
gcloud config set project hidden-brace-236921
Далее создаем кластер.
Для демонстрации я создал кластер Kubernetes всего из трёх узлов — это минимум, необходимый для высокой доступности: gcloud container clusters create --zone us-central1-a your-cluster-name --cluster-version 1.15 --num-nodes=3
Следующая команда kubectl предоставляет нужные привилегии нашему текущему пользователю: kubectl create clusterrolebinding cluster-admin-binding-$USER
--clusterrole=cluster-admin --user=$(gcloud config get-value core/account)
Затем мы создаем пространство имен и делаем его активным.
Пространство имен — это, грубо говоря, тоже что-то вроде проекта или среды, но уже внутри кластера Kubernetes. Он не зависит от проектов Google Cloud: kubectl create namespace my-namespace
kubectl config set-context --current --namespace=my-namespace
Запуск кластера
Выполнив эти несколько шагов, мы можем запустить кластер из трех узлов с помощью этой простой команды: # percona-dbaas mysql create-db example
Starting .
[done]
Database started successfully, connection details are below:
Provider: k8s
Engine: pxc
Resource Name: example
Resource Endpoint: example-proxysql.my-namespace.pxc.svc.local
Port: 3306
User: root
Pass: Nt9YZquajW7nfVXTTrP
Status: ready
Как подключиться к кластеру
По умолчанию он доступен только внутри Kubernetes. То есть он недоступен с того сервера, с которого вы выполнили команду «Создать».
Чтобы сделать его доступным, например, для тестов с клиентом, нужно пробросить порт через Port Mapping: kubectl port-forward svc/example-proxysql 3306:3306 $
Затем подключаем ваш MySQL-клиент: mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP
Расширенные команды управления кластером
База данных по публичным IP
Если вам нужно более постоянное решение для доступности кластера, вы можете получить внешний IP-адрес.В этом случае база данных будет доступна из любого места.
Это менее безопасно, но часто более удобно.
Для внешнего IP мы используем следующую команду: # percona-dbaas mysql create-db exposed
--options="proxysql.serviceType=LoadBalancer"
Starting .
[done]
Database started successfully, connection details are below:
Provider: k8s
Engine: pxc
Resource Name: exposed
Resource Endpoint: 104.154.133.197
Port: 3306
User: root
Pass: k0QVxTr8EVfgyCLYse
Status: ready
To access database please run the following command:
mysql -h 104.154.133.197 -P 3306 -uroot -pk0QVxTr8EVfgyCLYse
Явно задайте пароль
Вместо того, чтобы система генерировала пароль случайным образом, вы можете установить пароль явно: # percona-dbaas mysql create-db withpw --password=mypassword
Starting .
[done]
Database started successfully, connection details are below:
Provider: k8s
Engine: pxc
Resource Name: withpw
Resource Endpoint: withpw-proxysql.my-namespace.pxc.svc.local
Port: 3306
User: root
Pass: mypassword
Status: ready
Я показываю выходные данные сценариев в удобочитаемом формате, но формат JSON также поддерживается.
Отключение высокой доступности
С помощью следующей команды вы можете отключить высокую доступность для развертывания одного узла: # percona-dbaas mysql create-db singlenode
--options="proxysql.enabled=false, allowUnsafeConfigurations=true,pxc.size=1"
Starting .
[done]
Database started successfully, connection details are below:
Provider: k8s
Engine: pxc
Resource Name: singlenode
Resource Endpoint: singlenode-pxc.my-namespace.pxc.svc.local
Port: 3306
User: root
Pass: 22VqFD96mvRnmPMGg
Status: ready
Это решение для задач тестирования, позволяющее максимально быстро и легко запустить MySQL, протестировать его, а затем закрыть или использовать для разработки.
Инструмент Percona DBaaS CLI помогает вам создать решение, подобное DBaaS, в Kubernetes. В то же время мы продолжаем работать над его функциональностью и удобством использования.
Этот доклад был впервые представлен на Встреча @Databases от Mail.ru Cloud Solutions и Tarantool. Смотреть видео другие выступления и подписывайтесь на анонсы событий в Telegram Вокруг Kubernetes в Mail.ru Group .
Что еще почитать по теме:
- Базы данных на современной платформе IIoT.
- Как выбрать базу данных для проекта, чтобы не пришлось выбирать заново.
- Разворачиваем кластер Kubernetes на платформе Mail.ru Cloud Solutions.
-
К
19 Oct, 24 -
Сервис Для Поиска Похожих Людей
19 Oct, 24 -
Тесты Dropbox Примечания
19 Oct, 24 -
Вышла Бета-Версия Blackberry 10 Native Sdk
19 Oct, 24 -
Обновление Плагина Mctube
19 Oct, 24 -
Десять Умирающих Профессий В It
19 Oct, 24 -
Что Мы Знаем О Китах
19 Oct, 24 -
Неофициальное Руководство По Алгоритму Digg
19 Oct, 24