32.2. Масштабирование кластера #
Архитектура Postgres Pro Shardman позволяет масштабировать кластер, не прерывая его работу. В этом разделе описывается, как добавить дополнительные узлы в кластер Postgres Pro Shardman, чтобы повысить производительность/масштабируемость запросов. Если кластер Postgres Pro Shardman не соответствует ожиданиям по производительности или ёмкости хранилища, можно добавить в кластер новые узлы.
32.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