Рубрики
Uncategorized

Простое тестирование сложных сценариев с использованием Ansible и Molecule

Есть ли что -то простое при развертывании и настройке уровня базы данных? Аспекты целостности данных … с меткой DevOps, Ansible, Molecule, тестирование.

Есть ли что -то простое при развертывании и настройке уровня базы данных?

Аспекты целостности данных и надежных/безопасных операций составляют сложность, что увеличивается только при требуемой традиционной SQL, высокой доступности, устойчивости к разломам, масштабируемости и высоким уровням параллелизма. Это чувствительный слой, без сомнения. Следовательно, если там есть что -то простое, это было бы все испортить.

Не бойтесь, иди тестируй, облажай и учишься. Я имею в виду, просто не в производстве. Как? Используя инфра -автоматизацию и тестирование с использованием Ansible , Молекула и контейнеры. Они позволят вам быстро создать одноразовую локальную среду, в которой вы можете развернуть свою автоматизированную конфигурацию и провести все необходимые испытания, а также проверку.

Если это интересно для вас, продолжайте читать для фактического примера, который вы можете попробовать в своей машине. Это кластер Postgres, который будет настроен Ansible. Вы можете развернуть его в локальных контейнерах, используя молекулу, структуру для разработки и тестирования Ansible ролей. Вам просто нужно познакомиться с Ansible запасы , Роли и пьесы Анкет

Это чтение будет структурировано следующим образом: а) убедительная роль для кластера; б) предпосылки для его запуска; в) облажание вещей; г) тестирование и проверка;

Ansible Роль

Ok. Вернуться к примеру, pg_cluster является очень важной ролью для установки, настройки и начальной загрузки кластера Postgres. Вы можете установить его, запустить и проверить в локальной среде, используя молекулу, проверяя, что некоторые предпосылки установлены в первую очередь.

Позвольте мне просто очень быстро упомянуть, что такое Postgres и Pgpool2, на случай, если им понадобится какое -то введение 😜. Postgres является объектно-реляционной системой баз данных, считающейся одной из лучших. Pgpool2 это промежуточное программное обеспечение перед Postgres для объединения соединений, балансировки нагрузки и сторожевого пса. Он может справиться с бэкэнд -отказом, отказом и восстановлением. Оба являются открытым исходным кодом.

Эта роль устанавливает кластер с 3 узлами, со мной, вот текстовое описание. Каждый узел запускает Pgpool2 и Postgres. Pgpool2 и Postgres имеют по двум ролям. Для Postgres эти роли: первичные и резервные. Для PGPOOL2 эти роли: активные и резервные. Роли PGPOOL и Postgres независимы. Тем не менее, первый узел начинается с как с активным (PGPOOL2), так и первичным (Postgres). У него есть плавающий IP. Остальные узлы играют решающую роль (PGPOOL и Postgres).

Следующая диаграмма является графическим и, вероятно, лучшим описанием последнего абзаца:

                  FLOATING IP
                 +-----------+     WATCHDOG
        +--------|  PGPOOL2  |--------+
        |        ------------- nic0   |
        |        |           |        |
        |        | POSTGRES  |        |
        |        | master    |        |
        |        +-----------+        |
        |          nic1|              |
  +-----------+        |        +-----------+
  |  PGPOOL2  |        |        |  PGPOOL2  |
  |-----------|        |        -------------
  |           |        |        |           |
  | POSTGRES  |        |        | POSTGRES  |
  | standby   |-----------------| stanby    |
  +-----------+   REPLICATION   +-----------+

Отказ от ответственности: PG_Cluster использовался только при тестировании до сих пор

Предварительные условия

Чтобы проверить эту роль, убедитесь, что следующие предпосылки выполняются. Докер должен быть установлен Анкет Вам также нужно пип Установить молекулу и некоторые другие необходимые пакеты Python. Например, чтобы установить предпосылки в Fedora, вы можете сделать:

## Docker
sudo dnf install -y docker
## Pip
sudo dnf install -y python3-pip
## Ansible and role requirements
pip install --user "ansible>=2.8" netaddr
## Molecule and its requirements
pip install --user "molecule>=3" docker ansible-lint yamllint flake8

Как только они установлены, скачать pg_cluster И вы готовы к работе:

git clone https://github.com/jobcespedes/pg_cluster
cd pg_cluster
working_dir=$(pwd)

$ Working_dir будет нашим рабочим каталогом

С $ Working_dir Как ваш текущий путь, молекула был бы одним из его каталогов. Внутри молекула Dir вы найдете по умолчанию Тестовый сценарий. Там вы можете найти конфигурацию молекулы, воспроизведения для каждого последовательность и инвентарь сценария.

├── defaults
├── handlers
├── meta
├── molecule
│   └── default
│       ├── converge.yml
│       ├── group_vars
│       │   └── all.yml
│       ├── hosts
│       ├── molecule.yml
│       ├── prepare.yml
│       ├── side_effect.yml
│       └── verify.yml
├── tasks
├── templates
└── test

Если вы хотите изменить инвентаризацию и его переменные, вы можете отредактировать файл «хост», добавить файлы «group_vars» или добавить Dir ‘host_vars’ и поместить в него несколько файлов. Например:

├── molecule
│   └── default
│       ├── host_vars
│       │   └── pg-master.yml
│       ├── group_vars
│       │   └── all.yml
│       ├── hosts

Закручивая вещи

С соответствиями, вы готовы настроить кластер с помощью контейнеров. Чтобы создать местную среду, запустите (будьте терпеливы, это может занять некоторое время 😄):

molecule converge

Вот и все. Молекула настроила кластер в вашей машине. Подкоманда сходиться Создает и готовит тестовый сценарий по умолчанию и оставляет его, работая. Итак, вы можете изменить его потом. Команда Молекула уничтожает Удаляет это, если вам больше не нужно в этом.

В то время как он работает, вы можете изменить роль Ansible, молекулярные пьесы, инвентаризацию молекул, составные контейнеры и войти в систему для любого из них, среди прочего:

# list cluster containers
molecule list

# log in to master node
molecule login -h pg-master

Я не буду пытаться сказать вам, что здесь делать. Вы можете сделать все, что хотите. Но вы можете быть заинтересованы в том, чтобы попытаться удалить один бэкэнд Postgres и сделать восстановление онлайн. Вам нужно будет войти в контейнер и запустить некоторые команды там. Сначала беги Молекула логин -h PG -Master а затем внутри контейнера:

# 1. Dettachment
## check nodes status and notice 'status' column of all nodes: 'up'
psql -h localhost -U postgres -c "show pool_nodes;"

## dettach first standby node with pcp command
pcp_detach_node -h localhost  -w -p 9898 -U postgres 1

# 2. Recovery
## check nodes status and notice 'status' column of node 1: 'down'
psql -h localhost -U postgres -c "show pool_nodes;"

## online recovery of node 1
pcp_recovery_node -h localhost  -w -p 9898 -U postgres 1

# 3. Check recovery
## check nodes status and notice 'status' column of all nodes: 'up'
psql -h localhost -U postgres -c "show pool_nodes;"

Протестировать и проверить

Молекула имеет несколько тестовых последовательностей. Создание сценария и его подготовка — два из них. Кроме того, молекула дает вам возможность запустить конкретный, набор из них или полный тест со всеми последовательностями.

Две последовательности внутри pg_cluster есть side_effect и проверить. Последовательность side_effect имеет некоторые задачи, связанные с тем, что мы уже стараемся: неудачное восстановление и восстановление онлайн. Последовательность проверки имеет некоторые утверждения о кластере: проверка всех бэкэндов истекает, проверка команд PCP, количество узлов, ролей и других. Проверьте каждую соответствующую пьесу, чтобы узнать подробности того, что тестируется и проверяется.

Чтобы проверить после сходящегося, запустите молекула проверка Анкет После того, как вы закончите тестирование, не забудьте запустить Молекула уничтожает Анкет

Вывод

Ansible и Molecule помогают вам проверить и проверить автоматическое развертывание. Это может быть на вашей машине, CI/CD или любой другой среде. У вас есть возможность сделать полную тестовую последовательность или конкретные наборы. Это обеспечивает постепенное развитие вашей автоматизированной конфигурации. Лучшая часть для меня, это дает мне безопасную среду для отладки, тестирования и обучения. Мне просто нужно запустить Молекула сходится И там у меня это есть.

Молекула имеет больше, чем то, что здесь было покрыто. Проверьте его документы Узнать больше. Если вы прочитали это далеко, я надеюсь, что вы смогли просто проверить сложный сценарий и безопасно облажаться. 👋

Оригинал: «https://dev.to/jobcespedes/simple-testing-of-complex-scenarios-27dj»