原文链接:https://www.cpweb.top/2526 |
---|
官方文档:
迁移到多个 Kudu master:https://kudu.apache.org/docs/administration.html#migrate_to_multi_master
从多主部署中删除 Kudu master:https://kudu.apache.org/docs/administration.html#_removing_kudu_masters_from_a_multi_master_deployment
从集群中停用或永久删除 kudu tserver:https://kudu.apache.org/docs/administration.html#tablet_server_decommissioning
kudu 命令行工具参考:https://kudu.apache.org/releases/1.15.0/docs/command_line_tools_reference.html
因线上 kudu 服务器到期,新购 3 台新型号新配置的服务器,将原服务器上的 kudu 迁移到新服务器上。
kudu 版本为 1.15.0,新购服务器上已经部署好软件没有运行。
原有服务器信息表:
IP | 主机名 | 运行服务 |
---|---|---|
10.0.0.101 | bigdata01 | kudu-master、kudu-tserver |
10.0.0.102 | bigdata02 | kudu-master、kudu-tserver |
10.0.0.103 | bigdata03 | kudu-master、kudu-tserver |
新服务器信息表:
IP | 主机名 | 运行服务 |
---|---|---|
10.0.0.104 | bigdata04 | kudu-master、kudu-tserver |
10.0.0.105 | bigdata05 | kudu-master、kudu-tserver |
10.0.0.106 | bigdata06 | kudu-master、kudu-tserver |
kudu-master 迁移采用先加后减,先将新的节点逐台加入到集群,再将老的节点从集群中删除。
注意了,配置文件 master 地址建议都采用主机名,不要主机名和 IP 混用,这样会有问题,可能会导致新 master 添加异常。
从 1.15.0 版开始,可以使用 kudu master add
向 kudu 集群添加主节点。
该过程不需要停止整个集群中的所有 kudu 进程,但是一旦添加完成,所有 kudu 进程都必须重新启动以合并新添加的 master,这可以在不导致停机的情况下完成,如下面的步骤所述。
注意该过程支持一次只添加一个主站。为了添加多个主控,请按下面步骤对下一个新 master 再次执行相同的过程。
kudu cluster ksck
进行集群健康检查。语法:kudu master add
以下将添加一个新 master bigdata04 到 kudu 集群中,其它 master 按照下面步骤逐个添加即可。
# bigdata04 节点上执行添加 master
$ sudo -u kudu kudu master add bigdata01:7051,bigdata02:7051,bigdata03:7051 bigdata04:7051 --fs_wal_dir=/data/kudu/master/wal --fs_data_dirs=/data/kudu/master/data
# 修改所有 master 配置(包括新 master)
$ sed -ri 's#^(--master_addresses).*#\1=bigdata01:7051,bigdata02:7051,bigdata03:7051,bigdata04:7051#' master.gflagfile
# 逐个重启现有老 master,并且检查状态
$ systemctl restart kudu-master
$ systemctl status kudu-master
$ netstat -ntlp | grep kudu
# 启动新的 master
$ systemctl start kudu-master
$ systemctl status kudu-master
$ netstat -ntlp | grep kudu
# 修改所有 tserver 配置
$ sed -ri 's#^(--tserver_master_addrs).*#\1=bigdata01:7051,bigdata02:7051,bigdata03:7051,bigdata04:7051#' tserver.gflagfile
# 逐个重启所有 tserver,并且检查状态
$ systemctl restart kudu-tserver
$ systemctl status kudu-tserver
$ netstat -ntlp | grep kudu
# 健康检查
$ sudo -u kudu kudu cluster ksck bigdata01:7051,bigdata02:7051,bigdata03:7051,bigdata04:7051
从 1.15.0 版开始,可以使用 kudu master remove
从 kudu 集群中删除主节点。
那里,其中一个 master 是 LEADER 角色,其他 master 是 FOLLOWER 角色。每个 master 上的内容/masters应该是一样的。使用 kudu cluster ksck
进行集群健康检查。
语法:kudu master remove
# 停止所有不需要的 kudu master。
# 注意,停止后检查下,leader 是否正确选举出来,处于新节点上。并进行健康检查
$ systemctl stop kudu-master
$ sudo -u kudu kudu master list bigdata01:7051,bigdata02:7051,bigdata03:7051,bigdata04:7051,bigdata05:7051,bigdata06:7051
$ sudo -u kudu kudu cluster ksck bigdata01:7051,bigdata02:7051,bigdata03:7051,bigdata04:7051,bigdata05:7051,bigdata06:7051
# 删除所有不需要的 master
$ sudo -u kudu kudu master remove bigdata01:7051,bigdata02:7051,bigdata03:7051,bigdata04:7051,bigdata05:7051,bigdata06:7051 bigdata04:7051
$ sudo -u kudu kudu master remove bigdata01:7051,bigdata02:7051,bigdata03:7051,bigdata04:7051,bigdata05:7051,bigdata06:7051 bigdata05:7051
$ sudo -u kudu kudu master remove bigdata01:7051,bigdata02:7051,bigdata03:7051,bigdata04:7051,bigdata05:7051,bigdata06:7051 bigdata05:7051
# 修改所有未删除 master 配置
$ sed -ri 's#^(--master_addresses).*#\1=bigdata04:7051,bigdata05:7051,bigdata06:7051#' master.gflagfile
# 逐个重启所有未删除的 master
$ systemctl restart kudu-master
$ systemctl status kudu-master
$ netstat -ntlp | grep kudu
# 修改所有 tserver 的配置
$ sed -ri 's#^(--tserver_master_addrs).*#\1=bigdata04:7051,bigdata05:7051,bigdata06:7051#' tserver.gflagfile
# 逐个重启所有 tserver,并且检查状态
$ systemctl restart kudu-tserver
$ systemctl status kudu-tserver
$ netstat -ntlp | grep kudu
# 健康检查
$ sudo -u kudu kudu cluster ksck bigdata04:7051,bigdata05:7051,bigdata06:7051
kudu-tserver 的迁移自主恢复机制和 rebalance 有两种方式。
因为线下 kudu 有些表是单副本,无法使用自主恢复机制来进行迁移,所以这次迁移选择 rabalance 来实现。大体流程是先将 tserver 置于维护模式,然后使用 rabalance 来迁移副本开实现迁移。
官方建议是不要一次停用多个 tserver。要从集群中移除多个 tserver,请按照以下步骤针对每个 tserver 进行操作。确保在关闭下一台 tserver 之前,上一台 tserver 已从群集中移除,且健康检查运行正常。
kudu cluster ksck
命令进行集群健康检查,确保集群出于健康状态kudu tserver state enter_maintenance
命令将 tserver 置于维护模式。 kudu cluster rebalance
工具,向 --ignored_tservers
参数提供要停用的 tserver 的 UUID 和加上 --move_replicas_from_ignored_tservers
选项。###(1)rebalance
官方文档:https://kudu.apache.org/releases/1.15.0/docs/command_line_tools_reference.html#cluster-rebalance
语法:kudu cluster rebalance
选项:
###(2)maintenance
官方文档:https://kudu.apache.org/releases/1.15.0/docs/command_line_tools_reference.html#state-enter_maintenance
进入维护模式:kudu tserver state enter_maintenance
退出维护模式:kudu tserver state exit_maintenance
以下将从 kudu 集群中移除 bigdata01 的 tserver 服务,其它 tserver 的移除按照下面步骤一个个来即可。
# 启动新的 3 台 tserver,将其加入到集群中
$ systemctl start kudu-tserver
$ systemctl status kudu-tserver
$ netstat -ntlp | grep kudu
# 获取 bigdata01 的 uuid,并将 bigdata01 设置为维护状态。
# 此时 bigdata 的状态会变成 MAINTENANCE_MODE。
$ sudo -u kudu kudu tserver list bigdata04:7051,bigdata05:7051,bigdata06:7051 -columns=uuid,rpc-addresses,state,heartbeat
$ sudo -u kudu kudu tserver state enter_maintenance bigdata04:7051,bigdata05:7051,bigdata06:7051 xxxxxx
# 执行重平衡
$ sudo -u kudu kudu cluster rebalance bigdata04:7051,bigdata05:7051,bigdata06:7051 --ignored_tservers xxxxxx --move_replicas_from_ignored_tservers
# 观察进度,可以发现 bigdata01 Tablet Leaders 在逐渐减少。
$ sudo -u kudu kudu cluster ksck bigdata04:7051,bigdata05:7051,bigdata06:7051 | sed -n '/Tablet Server Summary/,/Tablet Server Location Summary/p'
# 当重平衡跑完,健康检查正常,就可以关闭要停机的 tserver 服务了
$ systemctl stop kudu-tserver
# 退出 bigdata01 的维护状态
$ sudo -u kudu kudu tserver state exit_maintenance bigdata04:7051,bigdata05:7051,bigdata06:7051 xxxxxx
# 逐个重启所有的 master
$ systemctl restart kudu-master
$ systemctl status kudu-master
$ netstat -ntlp | grep kudu
# 最后验证检查
$ sudo -u kudu kudu cluster ksck bigdata04:7051,bigdata05:7051,bigdata06:7051
当然,实测是可以一次性移除多台,迁移完后数据没受影响。但是不知道在一次性移除多台过程中,数据的查询和写入会不会受到影响。如一个表 3 个副本,分布在 3 台机器上,一次性将这 3 台机器同时下线,查询和写入会不会影响。