ClickHouse的最佳架构,主要考虑了以下两点:
01
CK新增副本
本测试主要用来做灾难恢复测试,即集群中某个分片对应的两个节点挂了一个,需要新增一个节点,存量数据同步情况和效率。
一、添加副本步骤
1)安装clickhouse
2)生成新的配置文件,加入将新副本
<!--分片1--><shard><replica><internal_replication>true</internal_replication><!--true数据选择一个正常副本写入;默认false,数据会写入所有副本,通过分布式表和复制表更容易造成数据不一致--><host>192.168.1.1</host><port>9000</port><user>user</user><password>password</password></replica><replica> <!—新副本><host>192.168.1.2</host><port>9000</port><user>user</user><password> password </password></replica></shard>
3)将新配置文件拷贝到每个节点,动态生效
4)启动新节点
5)库表需要手动创建,表引擎为ReplicatedMergeTree,创建后数据会自动同步
二、复制原理
1)复制依赖ClickHouse的复制引擎,即ReplicatedMergeTree引擎,在ZK的基础上,共享同一个ZK路径的节点,会相互同步数据。 2)CK的复制过程,就是查看自己所在的副本是否有其他节点的数据片,这个过程就是查看ZK里的元数据,如果没有,就开始从其他节点搬迁数据,搬迁速度等于最大带宽
3)因此,同一份数据,日常至少有2份即可,如果其中一份挂掉,新建一个表,把另一份及时通过过来就好(当然日常保留多份更好) 4)数据一致性,依赖ZK元数据,即复制引擎在做数据块写入的时候,记录的数据块信息数据
02
CK替换副本
一、安装步骤同上
二、修改配置文件
1)生成新的配置文件,将宕机副本剔除,将新副本加入
2)将新配置文件拷贝到每个节点,动态生效
三、如果一个副本宕机且不可恢复,需要更换新的机器,新增节点,需要将ZK里原来的节点信息删除
不然在使用on cluster命令时,因为获取不到剔除的节点信息,而一直等待执行不成功。
03
CK添加分片
一、安装步骤同上
二、修改配置文件
1)生成新的配置文件,将新分片加入
<!--分片1--><shard><replica><host>192.168.1.1</host><port>9000</port><user>user</user><password>password</password></replica></shard><!--分片2--><!--新加入的分片--><weight>2</weight><!—数据写入分片权重,默认1。例如,如果有两个碎片,第一个碎片的权重为9,而第二个碎片的权重为10,则第一个将发送9/19个行,第二个将发送10/19--><shard><replica><host>192.168.1.3</host><port>9000</port><user>user</user><password>password</password></replica></shard>
2)将新配置文件拷贝到每个节点,动态生效
3)由于分片号、权重等不同,新分片最好手动创建库表
04
ZK新增节点
如果CK写入量较大,ZK处理不过来,CK副本间可能会有延迟。可以通过适当添加节点来分担整体压力。
一、ZK安装步骤
1)在新节点安装ZK,可参考
2)生成新配置文件,server.6-7为新加的
server.1=xx.xx.xx.xx:2888:3888:observerserver.2=xx.xx.xx.xx:2888:3888:observerserver.3=xx.xx.xx.xx:2888:3888server.4=xx.xx.xx.xx:2888:3888server.5=xx.xx.xx.xx:2888:3888server.6=xx.xx.xx.xx:2888:3888:observerserver.7=xx.xx.xx.xx:2888:3888:observer
3)将新配置文件拷贝到每个节点,老节点无需重启
4)新节点启动后,新节点需要同步数据,需要等一会
5)查看状态
echo mntr|nc 127.0.0.1 2181| grep zk_server_state或./zkServer.sh status
MYSQL轻松学
微信号:learnmysql
MySQL实战知识分享,紧密业务需求,帮助初学者更快熟悉MySQL,更快成长为高级MySQL DBA。