перебалансировки данных в clickhouse нет если вы про это ну и реплики в ZK по новой надо регистрировать c другими именами 3 реплики у вас на скольки физических машинах? на 3х хотите 4 сервера? или сколько?
да на 3х, хочу еще одну взять машину. 2 шарда и к ним по реплике
ну тогда в целом не очень сложно должно быть. хотя надо смотреть какие косяки всплывут с Atomic и папкой /var/lib/clickhouse/store убираете replica-3 из <remote_servers> на replica-1 и replica-2 должно подхватиться без рестарта ну и на уровне chproxy \ приложения \ kubernetes sevices если есть ее выключаете стопаете replica-3 чистите в ней /var/lib/clickhouse/data/db/ваши_replicated_merge_tree_Таблицы/ надеюсь вы использовали макросы при создании ReplicatedMergeTree таблиц =) меняете <shard>2</shard> <replica>replica-3</replica> в <macros> ставите новый сервер replica-4 стопаете clickhouse-server на replica-4 меняете <shard>2</shard> <replica>replica-4</replica> в <macros> переносите /var/lib/clickhouse/metadata с replica-3 на replica-4 меняете на replica-3 и replica-4 <remote_servers> на двухшардовую конфигурацию стартуете replica-4 и replica-4 проверяете что таблицы есть. но данных нет меняете на replica-1 и replica-2 <remote_servers> на двухшардовую конфигурацию подхватить должно без рестарта после этого проверяем что данные из Distributed таблиц выбираются нормально для ребалансировки данных можно сделать на replica-3 INSERT INTO table SELECT * FROM remote('replica-1', db, table) WHERE <sharding_expression>=XXX и на replica-1 ALTER TABLE table DELETE WHERE <sharding_expression>=XXX и молиться что все нормально отреплицируется пользуясь случаем прорекламирую что если у вас kubernetes умеет horizontal autoscaling и вы используете clickhouse-operator может провернуть вам подобное (но без перебалансировки данных) там просто в yaml манифесте меняется spec: clusters: - name: cluster_name layout: shardCount: 1 replicasCount: 3 на layout: shardCount: 2 replicasCount: 2 ;)
спасибо за крутой ответ!
Обсуждают сегодня