Специалисты компании 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-канал!
