一、集群缩容
1.1 下线节点
步骤:
1.对外停止服务
2.转移数据
3.修改剩余节点配置
4.通知客户端修改节点列表
# 修改90,91服务器配置文件 vim /etc/clickhouse-server/conf.d/metrika.xml 中注释掉第3个shard <remote_servers> <clickhouse_cluster_3shards_1replicas> <shard> <internal_replication>true</internal_replication> <replica> <host>192.168.12.91</host> <port>9000</port> <user>default</user> <password>PeQLg45tJcxZk</password> </replica> </shard> <shard> <internal_replication>true</internal_replication> <replica> <host>192.168.12.90</host> <port>9000</port> <user>default</user> <password>PeQLg45tJcxZk</password> </replica> </shard> <!-- 注销掉 <shard> <internal_replication>true</internal_replication> <replica> <host>192.168.12.88</host> <port>9000</port> <user>default</user> <password>PeQLg45tJcxZk</password> </replica> </shard> --> </clickhouse_cluster_3shards_1replicas> </remote_servers>
# 查询集群 aliyun-47-122-26-25 :) select * from system.clusters; SELECT * FROM system.clusters Query id: 4a1a0d43-9c19-4424-9c87-338b081e8813 ┌─cluster──────────────────────────────┬─shard_num─┬─shard_weight─┬─replica_num─┬─host_name─────┬─host_address──┬─port─┬─is_local─┬─user────┬─default_database─┬─errors_count─┬─slowdowns_count─┬─estimated_recovery_time─┐ │ clickhouse_cluster_3shards_1replicas │ 1 │ 1 │ 1 │ 192.168.12.91 │ 192.168.12.91 │ 9000 │ 1 │ default │ │ 0 │ 0 │ 0 │ │ clickhouse_cluster_3shards_1replicas │ 2 │ 1 │ 1 │ 192.168.12.90 │ 192.168.12.90 │ 9000 │ 0 │ default │ │ 0 │ 0 │ 0 │ └──────────────────────────────────────┴───────────┴──────────────┴─────────────┴───────────────┴───────────────┴──────┴──────────┴─────────┴──────────────────┴──────────────┴─────────────────┴─────────────────────────┘ 2 rows in set. Elapsed: 0.001 sec. # 将下线节点的数据转移到其它节点,迁移方式可以使用以下方式: clickhouse-client --password use test_log :) insert into test_local select * from remote('192.168.12.88','test_log','test_local','default','password'); Query id: 7c2a0285-0323-4498-82b4-1adadc90aa18 Ok. 0 rows in set. Elapsed: 0.007 sec. test_log:库名 default:账号 test_local:表名 password:密码 # 如果数据库过大可以,可以将数据分别存储在其余2台集群上 # 在集群1上执行下面的sql,将集群3的部分数据写到集群3的本地表中 insert into test_log select * from remote('192.168.12.88:9000','test_log','user','password') where id % 2 = 0; # 在集群2执行下面的sql,将集群3的部分数据写到集群2的本地表中 insert into test_log select * from remote('192.168.12.88:9000','test_log','user','password') where id % 2 = 1;
SELECT * FROM test_all Query id: 2a3627db-c64b-45a1-b3be-1868dff84f90 ┌─id─┬─name──────┐ │ 1 │ zhangsan │ │ 2 │ lisi │ │ 7 │ yw │ │ 8 │ xc │ │ 5 │ zhangquan │ │ 6 │ lihua │ │ 11 │ bb │ │ 12 │ acca │ └────┴───────────┘ ┌─id─┬─name───┐ │ 3 │ wangm │ │ 4 │ lijing │ │ 9 │ cx │ │ 10 │ aa │ │ 13 │ kkkk │ └────┴────────┘ 13 rows in set. Elapsed: 0.003 sec.
二、集群扩容
# 原配置 <clickhouse_cluster_3shards_1replicas> <shard> <internal_replication>true</internal_replication> <replica> <host>192.168.12.91</host> <port>9000</port> <user>default</user> <password>PeQLg45tJcxZk</password> </replica> </shard> <shard> <internal_replication>true</internal_replication> <replica> <host>192.168.12.90</host> <port>9000</port> <user>default</user> <password>PeQLg45tJcxZk</password> </replica> </shard> </clickhouse_cluster_3shards_1replicas> # 新增节点步骤 1.新节点安装clickhouse 2.在新节点新增相关本地表 3.修改旧节点配置 4.通知客户端修改节点列表 # 1.修改配置/etc/clickhouse-server/config.d/metrika.xml,编辑新节点,新增: <shard> <internal_replication>true</internal_replication> <replica> <host>192.168.12.88</host> <port>9000</port> <user>default</user> <password>PeQLg45tJcxZk</password> </replica> </shard> # 2.在新节点新建该集群相关本地表 # 注意和其它节点数据库表面引擎都要一样 # 3.修改集群旧节点的config.xml配置,加上新节点 修改完成后,clickhouse会自动感知到config文件变化,修改的内容会立刻生效 # 4.通知客户端更新节点列表
三、扩容后数据的均匀分布
# 通过设置集群权重,让后面的数据优先写入新节点 <clickhouse_cluster_3shards_1replicas> <shard> <weight>1</weight> <internal_replication>true</internal_replication> <replica> <host>192.168.12.91</host> <port>9000</port> <user>default</user> <password>PeQLg45tJcxZk</password> </replica> </shard> <shard> <weight>1</weight> <internal_replication>true</internal_replication> <replica> <host>192.168.12.90</host> <port>9000</port> <user>default</user> <password>PeQLg45tJcxZk</password> </replica> </shard> <shard> <weight>99</weight> <internal_replication>true</internal_replication> <replica> <host>192.168.12.88</host> <port>9000</port> <user>default</user> <password>PeQLg45tJcxZk</password> </replica> </shard> </clickhouse_cluster_3shards_1replicas>