Для сборки и использования shrun нужно иметь установленный docker, git, make и go (1.22.1).
В переменную PATH нужно добавить путь к директории $GOPATH/bin (директория должна быть доступна на запись для текущего пользователя).
Клонируем репозиторий и собираем shrun.
git clone [email protected]:wmentor/shrun.git
cd shrun
make
Для обновления будет необходимо подтянуть изменения из репозитория и сделать make. Важно учитывать тот момент, что после обновления возможно нужно будет также выполнить команды init/build.
shrun init [--etcd-count int] [--log-level debug|warn|info|error] [--repfactor 1] \
[--topology cross|manual] [--ssl] [--strict-hba] [--disable-go-proxy] [--pg-version 14|17]
В конфигурационной директории создает Dockerfile-ы, sdmspec.json, rc.local и другие файла. В качестве директории по умолчанию используется ~/.shrun (если ее нет, то она будет создана при первом запуске). Для того чтобы поменять директорию по умолчанию нужно задать переменную окружения SHRDM_CONFIG_DIR.
--etcd-count задачет число инстансов etcd (дефолт 1)
--log-level задает уровень логирования (дефолт debug)
--repfactor задает репфактор (дефолт 1)
--topology задает режим топологии (дефолт cross)
--ssl задаем режим использования SSL шифрования.
--strict-hba использовать явно заданные записи hba.conf
--disable-go-proxy отключить использование GoProxy.
--pg-version версия PostgreSQL, на базе которой базируется Shardman (14 или 17; по умолчанию: 14)
После инита нужно делать build со всеми параметрами.
Для получения информации о всех параметрах команды вызовите ее с ключем -h.
shrun pull
В результате будут синхронизованы имеджи для go, ubuntu, postgres.
shrun build --build-basic --build-pg --build-gotpc
Для докеров используется каталог ~/build (может быть ссылкой). Если нужно его сменить, то стоит задать переменную окружения SHRDM_DATA_DIR. В build должны быть три каталога: shardman, shardman-utils, go-tpc.
Если не задать ключи --build-basic и --build-pg, то будет только пересобран образ с новой обвязкой на базе последней сборки постгреса.
--build-basic нужен для пересборки всех базовых образов, которые используются для сборки постгреса, но сам постгрес при этом не собирается.
--build-pg указывает на то, что нужно пересобрать постгрес.
--build-gotpc указывает на то, что нужно собрать образ для использования go-tpc.
Обвязка пересобирается при любой конфигурации ключей.
shrun start --nodes|-n count [--update|-u] [--force|-f] [--mount-data] [--shell] \
[--with-grafana] [--with-schema] [-e|--with-extension name1 [-e|--with-extension ...]] \
[--with-s3] [--free-nodes count]
Запускает кластер из заданного числа нод (по умолчанию выполняется shardmanctl init + shardmanctl nodes add).
Если ноды не нужно добавлять в кластер, то нужно добавить флаг --skip-node-add.
Собрать следующий кластер можно будет теперь только после остановки (даже если сборка прошла неуспешно). Если добавить опцию --force|-f, то в этой ситуации старый кластер будет остановлен и запущен новый. Если нужно перед запуском пересобрать утилиты, то нужно добавить опцию --update|-u .
Флаг --shell говорит о том, что после добавления нод сразу нужно подключится к первой ноде.
Флаг --with-grafana подключает grafana/prometheus для кластера (графана будет доступна на localhost:3000 с логином и паролем shardmand).
Флаг --with-extension|-e позволяет указать экстеншены, которые нужно создать при развертывание кластера Shardman.
Флаг --with-s3 запустить S3 сервер (порт 9000, для WebUI порт - 9001, логин - shardman, пароль - shardman).
Флаг --free-nodes указывает, что нужно создать еще дополнительное число узлов (кроме тех, что указаны в --nodes|-n), но не добавлять их в кластер.
Для запуска кластера с тестовым набором данных нужно запустить команду с ключем --with-schema.
В случае успешного запуска в build-каталоге будет создана директория /mntdata, которая будет подмонтирована ко всем запущенным контейнерам.
Если добавить флаг --mount-data, в каталоге /pgdata будет создан каталог <container_name>, который будет подмонтирована к каталогу данных Shardman. После остановки через команду stop, этот каталог будет удален.
shrun nodes add -n count [--mount-data]
Поднимает еще заданное число нод Shardman. При этом в кластер они автоматом не добавляются. Команда может быть использована только после shrun start.
Если добавить флаг --mount-data, в каталоге /pgdata будет создан каталог <container_name>, который будет подмонтирована к каталогу данных Shardman. После остановки через команду stop, этот каталог будет удален.
shrun nodes rm -n count
Удаляет заданное число нод Shardman или всех, если нод меньше чем заданное число. Если все ноды Shardman удалены команда stop не выполняется т.к. еще остаются живые etcd-ноды.
shrun shell [-n node] [-u user] [-c "your command"]
Коннектится к заданной ноде из-под указанного пользователя (по дефолту используется пользователь postgres и нода shrn1).
shrun psql -n node [-p port]
Коннектится к базе данных на указанной ноде (по дефолту используется нода shrn1). Порт (если не задан через -p), логин и пароль берутся из sdmspec.json в директории конфигов.
shrun stop
Команда останавливает все запущенные контейнеры, после чего удаляет их все, а также docker-сети.
shrun pause
Команда останавливает все контейнеры, но не удаляет их, чтобы потом можно было возобновить их работу.
shrun resume
Команда запускает приостановленные при помощи команды pause контейнеры.
shrun clean [--force|-f]
Перед очисткой происходит остановка всех нод, а также удаление использованной сети. Если задан флаг --force|-f, то образы удаляются принудительно.
shrun doc
Команда сгенерирует документацию по шардману и напечатает каталог, в который она была сохранена.
shrun gobuilder [--rebuild|-r]
Команда запускает контейнер gobuilder, в котором установлены все необходимые утилиты/сертификаты, настроен GOPROXY для сборки shardman-utils и подмонтированы все нужные директории. Если задан флаг --rebuild|-r, то перед запуском будет пересобран образ контейнера.
В список утилит входят:
- mockgen
- goimports
- govulncheck
- golangci-lint
shrun core
Команда запускает контейнер core, в котором установлены все необходимые утилиты для сборки ядра Shardman и подмонтированы все нужные директории. После поднятия контейнера в нем делается make clean и configure, а после открывается bash терминал из папки с исходниками ядра.
shrun gotpc
Команда запускает контейнер с установленной утилитой go-tpc для проведения нагрузочного тестирования кластера. После поднятия контейнера сразу коннектится к нему и можно использовать утилиту go-tpc. Если задан флаг --rebuild|-r, то перед запуском будет пересобран образ контейнера. Важный момент, перед этой командой должен быть запущен кластер командой start.
Находясь в контейнере, задаем команду чтобы подготовить данные (если у нас есть три ноды shrn1,shrn2,shrn3):
go-tpc tpcc prepare -d postgres -U postgres -p 12345 -D postgres -H shrn1,shrn2,shrn3 -P 5432,5432,5432 \
--conn-params sslmode=disable --partition-type 5 --warehouses 16 --parts 16 -T 16 --no-check
После подготовки запускаем тест:
go-tpc tpcc run -d postgres -U postgres -p 12345 -D postgres -H shrn1,shrn2,shrn3 -P 5432,5432,5432 \
--conn-params sslmode=disable --partition-type 5 --warehouses 16 --parts 16 -T 32 --time 10m --ignore-error
В случае, когда кластер запускается с ключем --grafana, автоматически становятся доступны следующие порты на локальном хосте:
- 3000 - grafana (логин/пароль - shardman/shardman)
- 8080 - cadvisor
- 9001 - S3 WebUI (логин/пароль - shardman/shardman)
- 9090 – prometheus