33.2. Масштабирование кластера #
Архитектура Postgres Pro Shardman позволяет масштабировать кластер, не прерывая его работу. В этом разделе описывается, как добавить дополнительные узлы в кластер Postgres Pro Shardman, чтобы повысить производительность/масштабируемость запросов. Если кластер Postgres Pro Shardman не соответствует ожиданиям по производительности или ёмкости хранилища, можно добавить в кластер новые узлы.
33.2.1. Добавление и удаление узлов #
В режиме ручной топологии для добавления ведущего узла в кластер используется команда shardmanctl nodes add
, добавляющая список узлов в кластер в качестве ведущих узлов с отдельной группой репликации для каждого ведущего узла. Создайте кластер с тремя ведущими узлами и ручной топологией (PlacementPolicy
=manual
в sdmspec.json
):
$ shardmanctl --store-endpoints http://etcd1:2379,http://etcd2:2379,http://etcd3:2379 init -f sdmspec.json $ shardmanctl --store-endpoints http://etcd1:2379,http://etcd2:2379,http://etcd3:2379 nodes add -n n1,n2,n3
Чтобы посмотреть на топологию кластера, используйте команду shardmanctl cluster topology
:
$
shardmanctl --store-endpoints http://etcd1:2379,http://etcd2:2379,http://etcd3:2379 cluster topology
Ожидается такой результат:
┌────────────────────────────────────────────────────────────────────────┐ │ == REPLICATION GROUP clover-1-n1, RGID - 1 == │ ├──────────────────────────┬──────────────────┬──────────────────────────┤ │ HOST │ PORT │ STATUS │ ├──────────────────────────┼──────────────────┼──────────────────────────┤ │ n1 │ 5432 │ PRIMARY │ └──────────────────────────┴──────────────────┴──────────────────────────┘ ┌────────────────────────────────────────────────────────────────────────┐ │ == REPLICATION GROUP clover-2-n2, RGID - 2 == │ ├──────────────────────────┬──────────────────┬──────────────────────────┤ │ HOST │ PORT │ STATUS │ ├──────────────────────────┼──────────────────┼──────────────────────────┤ │ n2 │ 5432 │ PRIMARY │ └──────────────────────────┴──────────────────┴──────────────────────────┘ ┌────────────────────────────────────────────────────────────────────────┐ │ == REPLICATION GROUP clover-3-n3, RGID - 3 == │ ├──────────────────────────┬──────────────────┬──────────────────────────┤ │ HOST │ PORT │ STATUS │ ├──────────────────────────┼──────────────────┼──────────────────────────┤ │ n3 │ 5432 │ PRIMARY │ └──────────────────────────┴──────────────────┴──────────────────────────┘
Добавьте узлы n4
, n5
, n6
в качестве реплик, используя команду shardmanctl shard add
:
$ shardmanctl --store-endpoints http://etcd1:2379,http://etcd2:2379,http://etcd3:2379 shard --shard clover-1-n1 add -n n4 $ shardmanctl --store-endpoints http://etcd1:2379,http://etcd2:2379,http://etcd3:2379 shard --shard clover-2-n2 add -n n5 $ shardmanctl --store-endpoints http://etcd1:2379,http://etcd2:2379,http://etcd3:2379 shard --shard clover-3-n3 add -n n6
В режиме ручной топологии один узел можно добавить более чем в одну группу репликации.
В результате получится следующая конфигурация кластера:
┌─────────────────────────────────────────────────────────────────────┐ │ == REPLICATION GROUP clover-1-n1, RGID - 1 == │ ├─────────────────────────┬─────────────────┬─────────────────────────┤ │ HOST │ PORT │ STATUS │ ├─────────────────────────┼─────────────────┼─────────────────────────┤ │ n1 │ 5432 │ PRIMARY │ ├─────────────────────────┼─────────────────┼─────────────────────────┤ │ n4 │ 5432 │ STANDBY │ └─────────────────────────┴─────────────────┴─────────────────────────┘ ┌─────────────────────────────────────────────────────────────────────┐ │ == REPLICATION GROUP clover-2-n2, RGID - 2 == │ ├─────────────────────────┬─────────────────┬─────────────────────────┤ │ HOST │ PORT │ STATUS │ ├─────────────────────────┼─────────────────┼─────────────────────────┤ │ n2 │ 5432 │ PRIMARY │ ├─────────────────────────┼─────────────────┼─────────────────────────┤ │ n5 │ 5432 │ STANDBY │ └─────────────────────────┴─────────────────┴─────────────────────────┘ ┌─────────────────────────────────────────────────────────────────────┐ │ == REPLICATION GROUP clover-3-n3, RGID - 3 == │ ├─────────────────────────┬─────────────────┬─────────────────────────┤ │ HOST │ PORT │ STATUS │ ├─────────────────────────┼─────────────────┼─────────────────────────┤ │ n3 │ 5432 │ PRIMARY │ ├─────────────────────────┼─────────────────┼─────────────────────────┤ │ n6 │ 5432 │ STANDBY │ └─────────────────────────┴─────────────────┴─────────────────────────┘
Для удаления реплики запустите команду shardmanctl shard rm
. Например:
$ shardmanctl --store-endpoints http://etcd1:2379,http://etcd2:2379,http://etcd3:2379 shard --shard clover-1-n1 rm -n n4
Для удаления ведущего сервера сначала запустите команду shardmanctl shard switch
, чтобы переключить ведущий сервер на реплику; затем удалите старый ведущий сервер.
$ shardmanctl --store-endpoints http://etcd1:2379,http://etcd2:2379,http://etcd3:2379 shard --shard clover-1-n1 switch --new-primary n4