3.3.3 负载均衡
分布式存储系统的每个集群中一般有一个总控节点,其他节点为工作节点,由总控节点根据全局负载信息进行整体调度。工作节点刚上线时,总控节点需要将数据迁移到该节点,另外,系统运行过程中也需要不断地执行迁移任务,将数据从负载较高的工作节点迁移到负载较低的工作节点。
工作节点通过心跳包(Heartbeat,定时发送)将节点负载相关的信息,如CPU,内存,磁盘,网络等资源使用率,读写次数及读写数据量等发送给主控节点。主控节点计算出工作节点的负载以及需要迁移的数据,生成迁移任务放入迁移队列中等待执行。需要注意的是,负载均衡操作需要控制节奏,比如一台全新的工作节点刚上线的时候,由于负载最低,如果主控节点将大量的数据同时迁移到这台新加入的机器,整个系统在新增机器的过程中服务能力会大幅下降。负载均衡操作需要做到比较平滑,一般来说,从新机器加入到集群负载达到比较均衡的状态需要较长一段时间,比如30分钟到一个小时。
负载均衡需要执行数据迁移操作。在分布式存储系统中往往会存储数据的多个副本,其中一个副本为主副本,其他副本为备副本,由主副本对外提供服务。迁移备副本不会对服务造成影响,迁移主副本也可以首先将数据的读写服务切换到其他备副本。整个迁移过程可以做到无缝,对用户完全透明。
假设数据分片D有两个副本D1和D2,分别存储在工作节点A1和A2,其中,D1为主副本,提供读写服务,D2为备副本。如果需要将D1从工作节点A1中迁移出去,大致的操作步骤如下:
1)将数据分片D的读写服务由工作节点A1切换到A2,D2变成主副本;
2)增加副本:选择某个节点,例如B节点,增加D的副本,即B节点从A2节点获取D的副本数据(D2)并与之保持同步;
3)删除工作节点A1上的D1副本。