当集群容量不够或者读写压力太大了,需要通过增加节点来扩容;当集群承担的业务规模缩减时,可以通过减少节点来缩容。
扩容和缩容时,需要考虑这些点:
扩容流程非常简单:
nodes -d
命令查看,可以看到新节点的状态为ALIVE,但是服务的replica个数为0。set_meta_level lively
启动负载均衡,meta server会逐渐将部分replica迁移到新节点上。nodes -d
命令查看个节点服务replica的情况,在达到均衡状态后,通过set_meta_level steady
关闭负载均衡,扩容完成。缩容相对扩容来说要考虑的点就多些,主要包括:
node_live_percentage_threshold_for_update
,如果低于了限制,meta server就会自动降级为freezed状态,此时所有的reconfiguration
操作都无法进行,缩容流程也进行不下去。所以在缩容之前需要计算一下是否会造成这种情况,如果会,就先升级meta server的配置,将node_live_percentage_threshold_for_update
修改至足够低,保证在缩容过程中meta server不会自动降级为freezed状态。推荐的缩容流程:
node_live_percentage_threshold_for_update
,如果低于,就将该配置参数改小些,然后升级meta server。>>> set_meta_level steady
>>> remote_command -t meta-server meta.lb.assign_secondary_black_list $address_list其中
address_list
是要下线节点的ip:port地址列表,用逗号分隔。assign_delay_ms
设为10,这样做的目的是让节点下线后,立即在其他节点上补充备份:>>> remote_command -t meta-server meta.lb.assign_delay_ms 10
ls -d
命令查看集群状态,等待所有partition都完全恢复健康(所有表的unhealthy数都为0)。nodes -d
不再显示已经下线的节点。node_live_percentage_threshold_for_update
,重启时需要修改配置文件,再其调整为合适的值。以上过程可以自动化,我们提供了集群升级脚本scripts/pegasus_offline_node_list.sh。不过这个脚本并不能直接使用,因为其依赖minos部署工具来完成进程的远程stop操作。pegasus_offline_node_list.sh
调用pegasus_offline_node.sh
,因此这两个脚本的minos_client_dir都需要更改。你可以针对你们自己的部署系统,修改脚本中minos相关部分,使其可以正常工作。如需帮助,请联系我们。
注意:在使用集群升级脚本的时候,也要保证配置参数node_live_percentage_threshold_for_update
的值足够小(有必要可以先升级meta-server),避免使集群进入freezed状态。
通过先扩容后缩容,可以实现集群的节点迁移。为了尽量减少数据的重复拷贝和移动,建议按照如下步骤: