Протестированы кластеры Picodata из 1000+ узлов

Специалисты компании Picodata проверили производительность Ansible-роли и замерили время развёртывания масштабного кластера СУБД в условиях, приближённых к промышленным. Для этого в облачной инфраструктуре Yandex Cloud на 9 серверах мы запустили несколько тестовых кластеров Picodata, самый крупный из которых насчитывал 1008 узлов. На каждом сервере одновременно работали 111 инстансов Picodata, плюс инстансы-арбитры, отвечавшие за поддержание кворума в распределённом кластере СУБд (всего 9 инстансов-арбитров в каждом случае). На развёртывание самого масштабного кластера при помощи роли Ansible ушло чуть более 30 минут.

Мы предоставляем подробности проведённых тестов ниже, включая конфигурацию серверов, настройки ОС и параметры роли Ansible.

Версии ПО

Версия Ansible-роли: 26.1.5

Версия пакета Picodata: 26.1.3.0 (на момент развёртывания пакет был уже установлен на серверы)

Инфаструктура

Станция Ansible

CPU: 4
RAM: 8Gb
SSD: 20Gb
Платформа: Intel Ice Lake

Переменные в инвентарном файле:

cluster_name: huge
admin_password: '*********'

listen_address: '{{ ansible_default_ipv4.address }}'

audit: false
auth_webui: false
debug: true
log_to: file

systemd_params:
  LimitNOFILE: 500000
  TimeoutStartSec: '30m'

db_config:
  governor_auto_offline_timeout: 600
  governor_common_rpc_timeout: 300
  governor_raft_op_timeout: 120
  iproto_net_msg_max: 8192

fd_uniq_per_instance: true # разрешить репликасеты из инстансов на одном сервере

tiers:
  arbiter:
    instances_per_server: 1   # сколько инстансов запустить на каждом сервере
    replication_factor: 1      # фактор репликации
    config:
      memtx:
        memory: 64M
    can_vote: true

  default:
    instances_per_server: 11   # сколько инстансов запустить на каждом сервере
    replication_factor: 1      # фактор репликации
    config:
      memtx:
        memory: 64M
    can_vote: false

Кластер Picodata

Количество серверов под данные: 9
CPU: 96
RAM: 96Gb
SSD: 50Gb
Платформа: Intel Ice Lake

Все серверы, в том числе станция Ansible, находились в одной подсети

Параметры настройки ОС на серверах кластера:

vm.overcommit_memory=1
vm.swappiness=0
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.ipv4.ip_local_port_range='1024 65535'
net.ipv4.tcp_slow_start_after_idle=0
net.ipv4.tcp_fastopen=3
net.ipv4.neigh.default.gc_thresh1=2048
net.ipv4.neigh.default.gc_thresh2=4096
net.ipv4.neigh.default.gc_thresh3=8192
net.core.netdev_budget=600
net.core.netdev_budget_usecs=8000

1008 инстансов (1 арбитр, 111 default на каждом сервере)

Создание: 30 минут 10 секунд ~= 31 минута
Удаление: 3 минуты 35 секунд ~= 4 минуты

Создание кластера

Top 5 долгих задач:
===============================================================================
picodata-ansible : (huge) Wait creating admin-sock files for all instances ----------------------------------------- 57.85s
picodata-ansible : (huge) Make links ------------------------------------------------------------------------------- 52.55s
picodata-ansible : (huge) Generate template file for systemd ------------------------------------------------------- 19.85s
picodata-ansible : Save report about endpoint of all instances ----------------------------------------------------- 18.80s
picodata-ansible : (huge) Create config file ver 26.X for instances in tier default -------------------------------- 13.38s

real    30m10.234s
user    33m42.901s
sys     18m25.048s

Удаление кластера

Top 5 долгих задач:
===============================================================================
picodata-ansible : (huge) Disable systemd services ------------------------------------------------------------------- 163.48s
picodata-ansible : (huge) Remove systemd services --------------------------------------------------------------------- 12.69s
picodata-ansible : (huge) Remove dirs if set purge variable when rootless is unset ------------------------------------- 7.72s
Gathering Facts -------------------------------------------------------------------------------------------------------- 7.19s
picodata-ansible : (huge) Remove dirs ---------------------------------------------------------------------------------- 3.42s

real    3m35.153s
user    0m25.086s
sys     0m13.118s

504 инстанса (1 арбитр, 55 default на каждом сервере)

Создание: 13 минут 25 секунд ~= 14 минут
Удаление: 1 минута 25 секунд ~= 2 минуты

Создание кластера

Top 5 долгих задач:
===============================================================================
picodata-ansible : (huge) Make links --------------------------------------------------------------------------------- 37.84s
picodata-ansible : (huge) Wait creating admin-sock files for all instances ------------------------------------------- 25.71s
picodata-ansible : Wait 10 sec and apply db_config ------------------------------------------------------------------- 11.51s
picodata-ansible : Save report about endpoint of all instances -------------------------------------------------------- 9.68s
picodata-ansible : (huge) Create dirs with cluster-name --------------------------------------------------------------- 5.72s

real    13m25.390s
user    17m16.727s
sys     9m18.462s

Удаление кластера

Top 5 долгих задач:
===============================================================================
picodata-ansible : (huge) Disable systemd services ------------------------------------------------------------------ 64.01s
Gathering Facts ------------------------------------------------------------------------------------------------------ 4.44s
picodata-ansible : (huge) Remove dirs if set purge variable when rootless is unset ----------------------------------- 3.40s
picodata-ansible : (huge) Remove dirs -------------------------------------------------------------------------------- 2.35s
picodata-ansible : (huge) Reload systemd services -------------------------------------------------------------------- 1.30s

real    1m25.348s
user    0m17.811s
sys     0m9.783s

108 инстансов (1 арбитр, 11 default на каждом сервере)

Создание: 3 минуты 37 секунд ~= 4 минуты
Удаление: 43 секунды ~= 1 минута

Создание кластера

Top 5 долгих задач:
===============================================================================
picodata-ansible : Wait 10 sec and apply db_config ----------------------------------------------------------------- 11.44s
picodata-ansible : (huge) Create dirs with cluster-name ------------------------------------------------------------- 5.79s
picodata-ansible : Wait for PG-port and continue with play ---------------------------------------------------------- 5.20s
picodata-ansible : (huge) Make links -------------------------------------------------------------------------------- 4.78s
picodata-ansible : (huge) Wait creating admin-sock files for all instances ------------------------------------------ 4.64s

real    3m37.198s
user    4m18.754s
sys     2m19.846s

Удаление кластера

Top 5 долгих задач:
===============================================================================
picodata-ansible : (huge) Disable systemd services ----------------------------------------------------------------- 21.93s
Gathering Facts ----------------------------------------------------------------------------------------------------- 4.18s
picodata-ansible : (huge) Remove dirs if set purge variable when rootless is unset ---------------------------------- 3.40s
picodata-ansible : (huge) Remove dirs ------------------------------------------------------------------------------- 2.30s
picodata-ansible : (huge) Reload systemd services ------------------------------------------------------------------- 1.30s

real    0m43.002s
user    0m17.434s
sys     0m9.722s

Приходите обсудить результаты в наш Telegram-канал!