业务需求:
目前大数据生产环境kudu组件只有一个master实例,如出现问题会出现单点故障,需要配置多个master实例,保证kudu服务能够实现高可用。
实现步骤:
- 添加两台master组件,不要启动,并停止所有组件。
- 创建master所需要的文件夹fs_wal_dir、fs_data_dirs并赋予权限(与上面cm界面配置的路径要相同)。
mkdir -p /kudu/master/fs_wal_dir && mkdir -p /kudu/master/fs_data_dirs && chown -R kudu:kudu /kudu/master/fs_wal_dir && chown -R kudu:kudu /kudu/master/fs_data_dirs && chmod 700 /kudu/master/fs_wal_dir && chmod 700 /kudu/master/fs_data_dirs
- 格式化每台新主计算机上的数据目录,并记录生成的UUID(新增加的master全部执行uuid,不对原有master主机格式化)。
$ sudo -u kudu kudu fs format --fs_wal_dir=<master_wal_dir> fs_data_dirs=<master_data_dir
$ sudo -u kudu kudu fs dump uuid --fs_wal_dir=<master_wal_dir> fs_data_dirs=<master_data_dir 2>/dev/null
下图UUID为:22aac4……4c462
- 使用在原有主机上执行的以下命令重写主机的Raft配置。
sudo -u kudu kudu local_replica cmeta rewrite_raft_config --fs_wal_dir=<master_wal_dir> [--fs_data_dirs=<master_data_dir>] <tablet_id> <all_masters>
master_data_dir:
现有母版以前记录的数据目录
tablet_id:
必须是字符串 00000000000000000000000000000000
all_masters:
以空格分隔的母版列表,包括新的和现有的。列表中的每个条目都必须是以下形式的字符串:<uuid>:<hostname>:<port>
Uuid:
上面记录的每台机器的uuid
- CM上启动原有Kudu Master主机。
- 使用在每台新主计算机上执行的以下命令,将主数据复制到每个新主计算机上。
$ sudo -u kudu kudu local_replica copy_from_remote --fs_wal_dir=<master_wal_dir> [--fs_data_dirs=<master_data_dir>] <tablet_id> <existing_master>
master_data_dir:
新主人以前记录的数据目录
tablet_id:
必须是字符串 00000000000000000000000000000000
existing_master:
现有主机的RPC地址,并且必须是以下格式的字符串 <hostname>:<port>
- CM上启动所有Kudu Master主机。
- 如果您具有从Impala访问的Kudu表,但未设置DNS别名,请在为HMS提供存储的基础数据库中手动更新HMS数据库。
以下是应在HMS数据库中运行的示例SQL语句:
UPDATE TABLE_PARAMS
SET PARAM_VALUE =
'master-1.example.com,master-2.example.com,master-3.example.com'
WHERE PARAM_KEY = 'kudu.master_addresses' AND PARAM_VALUE = 'old-master';
在中impala-shell,运行:
INVALIDATE METADATA;
- 验证迁移是否成功。
使用浏览器,访问每个主服务器的Web UI。查看/ masters页面。应列出所有组件,其中一个组件的角色为LEADER,另一个为FOLLOWER角色,每个masters内容应相同,并在cm界面kill一个master的LEADER节点,其他master为LEADER则表示迁移成功。
CM kudu主界面上执行 run kudu ksck