使用 TiDB Ansible 部署 TiDB 集群

概述

Ansible 是一款自动化运维工具,TiDB Ansible 是 PingCAP 基于 Ansible playbook 功能编写的集群部署工具。本文档介绍如何使用 TiDB Ansible 部署一个完整的 TiDB 集群。

本部署工具可以通过配置文件设置集群拓扑,完成以下各项运维工作:

准备机器

  1. 部署目标机器若干

    • 建议 4 台及以上,TiKV 至少 3 实例,且与 TiDB、PD 模块不位于同一主机,详见部署建议
    • 推荐安装 CentOS 7.3 及以上版本 Linux 操作系统,x86_64 架构 (amd64)。
    • 机器之间内网互通。
  2. 部署中控机一台

    • 中控机可以是部署目标机器中的某一台。
    • 推荐安装 CentOS 7.3 及以上版本 Linux 操作系统(默认包含 Python 2.7)。
    • 该机器需开放外网访问,用于下载 TiDB 及相关软件安装包。

第 1 步:在中控机上安装系统依赖包

root 用户登录中控机,然后根据操作系统类型执行相应的安装命令。

  • 如果中控机使用的是 CentOS 7 系统,执行以下命令:

    yum -y install epel-release git curl sshpass && \ yum -y install python2-pip
  • 如果是中控机使用的是 Ubuntu 系统,执行以下命令:

    apt-get -y install git curl sshpass python-pip

第 2 步:在中控机上创建 tidb 用户,并生成 SSH key

root 用户登录中控机,执行以下步骤:

  1. 创建 tidb 用户。

    useradd -m -d /home/tidb tidb
  2. 设置 tidb 用户密码。

    passwd tidb
  3. 配置 tidb 用户 sudo 免密码,将 tidb ALL=(ALL) NOPASSWD: ALL 添加到文件末尾即可。

    visudo
    tidb ALL=(ALL) NOPASSWD: ALL
  4. 生成 SSH key。

    执行 su 命令,从 root 用户切换到 tidb 用户下。

    su - tidb

    创建 tidb 用户 SSH key,提示 Enter passphrase 时直接回车即可。执行成功后,SSH 私钥文件为 /home/tidb/.ssh/id_rsa,SSH 公钥文件为 /home/tidb/.ssh/id_rsa.pub

    ssh-keygen -t rsa
    Generating public/private rsa key pair. Enter file in which to save the key (/home/tidb/.ssh/id_rsa): Created directory '/home/tidb/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/tidb/.ssh/id_rsa. Your public key has been saved in /home/tidb/.ssh/id_rsa.pub. The key fingerprint is: SHA256:eIBykszR1KyECA/h0d7PRKz4fhAeli7IrVphhte7/So tidb@172.16.10.49 The key's randomart image is: +---[RSA 2048]----+ |=+o+.o. | |o=o+o.oo | | .O.=.= | | . B.B + | |o B * B S | | * + * + | | o + . | | o E+ . | |o ..+o. | +----[SHA256]-----+

第 3 步:在中控机器上下载 TiDB Ansible

tidb 用户登录中控机并进入 /home/tidb 目录。使用以下命令从 TiDB Ansible 项目上下载 TiDB Ansible 3.0 相应 TAG 版本,默认的文件夹名称为 tidb-ansible

git clone -b $tag https://github.com/pingcap/tidb-ansible.git

第 4 步:在中控机器上安装 TiDB Ansible 及其依赖

tidb 用户登录中控机,请务必按以下方式通过 pip 安装 TiDB Ansible 及其相关依赖的指定版本,否则会有兼容问题。目前,TiDB release-2.0、release-2.1、release-3.0、release-3.1 以及最新开发版本兼容 Ansible 2.4 ~ 2.7.11 (2.4 ≤ Ansible ≤ 2.7.11)。

  1. 在中控机器上安装 TiDB Ansible 及其依赖。

    cd /home/tidb/tidb-ansible && \ sudo pip install -r ./requirements.txt

    Ansible 及相关依赖的版本信息记录在 tidb-ansible/requirements.txt 文件中。

  2. 查看 Ansible 的版本。

    ansible --version
    ansible 2.7.11

第 5 步:在中控机上配置部署机器 SSH 互信及 sudo 规则

tidb 用户登录中控机,然后执行以下步骤:

  1. 将你的部署目标机器 IP 添加到 hosts.ini 文件的 [servers] 区块下。

    cd /home/tidb/tidb-ansible && \ vi hosts.ini
    [servers] 172.16.10.1 172.16.10.2 172.16.10.3 172.16.10.4 172.16.10.5 172.16.10.6 [all:vars] username = tidb ntp_server = pool.ntp.org
  2. 执行以下命令,按提示输入部署目标机器的 root 用户密码。

    ansible-playbook -i hosts.ini create_users.yml -u root -k

    该步骤将在部署目标机器上创建 tidb 用户,并配置 sudo 规则,配置中控机与部署目标机器之间的 SSH 互信。

如果要手工配置 SSH 互信及 sudo 免密码,可参考如何手工配置 ssh 互信及 sudo 免密码

第 6 步:在部署目标机器上安装 NTP 服务

tidb 用户登录中控机,执行以下命令:

cd /home/tidb/tidb-ansible && \ ansible-playbook -i hosts.ini deploy_ntp.yml -u tidb -b

该步骤将在部署目标机器上使用系统自带软件源联网安装并启动 NTP 服务,服务使用安装包默认的 NTP server 列表,见配置文件 /etc/ntp.conf 中 server 参数。如果使用默认的 NTP server,你的机器需要连接外网。

为了让 NTP 尽快开始同步,启动 NTP 服务前,系统会执行 ntpdate 命令,与用户在 hosts.ini 文件中指定的 ntp_server 同步日期与时间。默认的服务器为 pool.ntp.org,也可替换为你的 NTP server。

第 7 步:在部署目标机器上配置 CPUfreq 调节器模式

为了让 CPU 发挥最大性能,请将 CPUfreq 调节器模式设置为 performance 模式。如需了解 CPUfreq 的更多信息,可查看使用 CPUFREQ 调控器文档。

查看系统支持的调节器模式

执行以下 cpupower 命令,可查看系统支持的调节器模式:

cpupower frequency-info --governors
analyzing CPU 0: available cpufreq governors: performance powersave
cpupower frequency-info --governors
analyzing CPU 0: available cpufreq governors: Not Available

查看系统当前的 CPUfreq 调节器模式

执行以下 cpupower 命令,可查看系统当前的 CPUfreq 调节器模式:

cpupower frequency-info --policy
analyzing CPU 0: current policy: frequency should be within 1.20 GHz and 3.20 GHz. The governor "powersave" may decide which speed to use within this range.

如上述代码所示,本例中的当前配置是 powersave 模式。

修改调节器模式

你可以通过以下两种方法来修改调节器模式。本例中,当前调节器模式为 powersave,以下命令会将模式变更为 performance

  • 使用 cpupower frequency-set --governor 命令来修改。

    cpupower frequency-set --governor performance
  • 使用以下命令在部署目标机器上批量设置。

    ansible -i hosts.ini all -m shell -a "cpupower frequency-set --governor performance" -u tidb -b

第 8 步:在部署目标机器上添加数据盘 ext4 文件系统挂载参数

使用 root 用户登录目标机器,将部署目标机器数据盘格式化成 ext4 文件系统,挂载时添加 nodelallocnoatime 挂载参数。nodelalloc 是必选参数,否则 Ansible 安装时检测无法通过;noatime 是可选建议参数。

/dev/nvme0n1 数据盘为例,具体操作步骤如下:

  1. 查看数据盘。

    fdisk -l
    Disk /dev/nvme0n1: 1000 GB
  2. 创建分区表。

    parted -s -a optimal /dev/nvme0n1 mklabel gpt -- mkpart primary ext4 1 -1
  3. 格式化文件系统。

    mkfs.ext4 /dev/nvme0n1p1
  4. 查看数据盘分区 UUID。

    本例中 nvme0n1p1 的 UUID 为 c51eb23b-195c-4061-92a9-3fad812cc12f

    lsblk -f
    NAME FSTYPE LABEL UUID MOUNTPOINT sda ├─sda1 ext4 237b634b-a565-477b-8371-6dff0c41f5ab /boot ├─sda2 swap f414c5c0-f823-4bb1-8fdf-e531173a72ed └─sda3 ext4 547909c1-398d-4696-94c6-03e43e317b60 / sr0 nvme0n1 └─nvme0n1p1 ext4 c51eb23b-195c-4061-92a9-3fad812cc12f
  5. 编辑 /etc/fstab 文件,添加 nodelalloc 挂载参数。

    vi /etc/fstab
    UUID=c51eb23b-195c-4061-92a9-3fad812cc12f /data1 ext4 defaults,nodelalloc,noatime 0 2
  6. 挂载数据盘。

    mkdir /data1 && \ mount -a
  7. 执行以下命令,如果文件系统为 ext4,并且挂载参数中包含 nodelalloc,则表示已生效。

    mount -t ext4
    /dev/nvme0n1p1 on /data1 type ext4 (rw,noatime,nodelalloc,data=ordered)

第 9 步:编辑 inventory.ini 文件,分配机器资源

tidb 用户登录中控机,编辑 /home/tidb/tidb-ansible/inventory.ini 文件为 TiDB 集群分配机器资源。一个标准的 TiDB 集群需要 6 台机器:2 个 TiDB 实例,3 个 PD 实例,3 个 TiKV 实例。

  • 至少需部署 3 个 TiKV 实例。
  • 不要将 TiKV 实例与 TiDB 或 PD 实例混合部署在同一台机器上。
  • 将第一台 TiDB 机器同时用作监控机。

你可以根据实际场景从以下两种集群拓扑中选择一种:

  • 单机单 TiKV 实例集群拓扑

    默认情况下,建议在每个 TiKV 节点上仅部署一个 TiKV 实例,以提高性能。但是,如果你的 TiKV 部署机器的 CPU 和内存配置是部署建议的两倍或以上,并且一个节点拥有两块 SSD 硬盘或者单块 SSD 硬盘的容量大于 2 TB,则可以考虑部署两实例,但不建议部署两个以上实例。

  • 单机多 TiKV 实例集群拓扑

单机单 TiKV 实例集群拓扑

NameHost IPServices
node1172.16.10.1PD1, TiDB1
node2172.16.10.2PD2, TiDB2
node3172.16.10.3PD3
node4172.16.10.4TiKV1
node5172.16.10.5TiKV2
node6172.16.10.6TiKV3
[tidb_servers] 172.16.10.1 172.16.10.2 [pd_servers] 172.16.10.1 172.16.10.2 172.16.10.3 [tikv_servers] 172.16.10.4 172.16.10.5 172.16.10.6 [monitoring_servers] 172.16.10.1 [grafana_servers] 172.16.10.1 [monitored_servers] 172.16.10.1 172.16.10.2 172.16.10.3 172.16.10.4 172.16.10.5 172.16.10.6

单机多 TiKV 实例集群拓扑

以两实例为例:

NameHost IPServices
node1172.16.10.1PD1, TiDB1
node2172.16.10.2PD2, TiDB2
node3172.16.10.3PD3
node4172.16.10.4TiKV1-1, TiKV1-2
node5172.16.10.5TiKV2-1, TiKV2-2
node6172.16.10.6TiKV3-1, TiKV3-2
[tidb_servers] 172.16.10.1 172.16.10.2 [pd_servers] 172.16.10.1 172.16.10.2 172.16.10.3 # 注意:要使用 TiKV 的 labels,必须同时配置 PD 的 location_labels 参数,否则 labels 设置不生效。 [tikv_servers] TiKV1-1 ansible_host=172.16.10.4 deploy_dir=/data1/deploy tikv_port=20171 labels="host=tikv1" TiKV1-2 ansible_host=172.16.10.4 deploy_dir=/data2/deploy tikv_port=20172 labels="host=tikv1" TiKV2-1 ansible_host=172.16.10.5 deploy_dir=/data1/deploy tikv_port=20171 labels="host=tikv2" TiKV2-2 ansible_host=172.16.10.5 deploy_dir=/data2/deploy tikv_port=20172 labels="host=tikv2" TiKV3-1 ansible_host=172.16.10.6 deploy_dir=/data1/deploy tikv_port=20171 labels="host=tikv3" TiKV3-2 ansible_host=172.16.10.6 deploy_dir=/data2/deploy tikv_port=20172 labels="host=tikv3" # 部署 3.0 版本的 TiDB 集群时,多实例场景需要额外配置 status 端口,示例如下: # TiKV1-1 ansible_host=172.16.10.4 deploy_dir=/data1/deploy tikv_port=20171 tikv_status_port=20181 labels="host=tikv1" # TiKV1-2 ansible_host=172.16.10.4 deploy_dir=/data2/deploy tikv_port=20172 tikv_status_port=20182 labels="host=tikv1" # TiKV2-1 ansible_host=172.16.10.5 deploy_dir=/data1/deploy tikv_port=20171 tikv_status_port=20181 labels="host=tikv2" # TiKV2-2 ansible_host=172.16.10.5 deploy_dir=/data2/deploy tikv_port=20172 tikv_status_port=20182 labels="host=tikv2" # TiKV3-1 ansible_host=172.16.10.6 deploy_dir=/data1/deploy tikv_port=20171 tikv_status_port=20181 labels="host=tikv3" # TiKV3-2 ansible_host=172.16.10.6 deploy_dir=/data2/deploy tikv_port=20172 tikv_status_port=20182 labels="host=tikv3" [monitoring_servers] 172.16.10.1 [grafana_servers] 172.16.10.1 [monitored_servers] 172.16.10.1 172.16.10.2 172.16.10.3 172.16.10.4 172.16.10.5 172.16.10.6 # 注意:为使 TiKV 的 labels 设置生效,部署集群时必须设置 PD 的 location_labels 参数。 [pd_servers:vars] location_labels = ["host"]
  • 服务配置文件参数调整

    1. 多实例情况下,需要修改 tidb-ansible/conf/tikv.ymlblock-cache-size 下面的 capacity 参数:

      storage: block-cache: capacity: "1GB"
    2. 多实例情况下,需要修改 tidb-ansible/conf/tikv.ymlhigh-concurrencynormal-concurrencylow-concurrency 三个参数:

      readpool: coprocessor: # Notice: if CPU_NUM > 8, default thread pool size for coprocessors # will be set to CPU_NUM * 0.8. # high-concurrency: 8 # normal-concurrency: 8 # low-concurrency: 8
    3. 如果多个 TiKV 实例部署在同一块物理磁盘上,需要修改 conf/tikv.yml 中的 capacity 参数:

      raftstore: capacity: 0

第 10 步:调整 inventory.ini 文件中的变量

本小节介绍如何编辑部署目录的变量和 inventory.ini 文件中的其它变量。

调整部署目录

部署目录通过 deploy_dir 变量控制,默认全局变量已设置为 /home/tidb/deploy,对所有服务生效。如数据盘挂载目录为 /data1,可设置为 /data1/deploy,样例如下:

## Global variables [all:vars] deploy_dir = /data1/deploy

如为某一服务单独设置部署目录,可在配置服务主机列表时配置主机变量,以 TiKV 节点为例,其他服务类推,请务必添加第一列别名,以免服务混布时混淆。

TiKV1-1 ansible_host=172.16.10.4 deploy_dir=/data1/deploy

调整其它变量(可选)

变量含义
cluster_name集群名称,可调整
tidb_versionTiDB 版本,TiDB Ansible 各分支默认已配置
process_supervision进程监管方式,默认为 systemd,可选 supervise
timezone新安装 TiDB 集群第一次启动 bootstrap(初始化)时,将 TiDB 全局默认时区设置为该值。TiDB 使用的时区后续可通过 time_zone 全局变量和 session 变量来修改,参考时区支持。默认为 Asia/Shanghai,可选值参考 timzone 列表
enable_firewalld开启防火墙,默认不开启,如需开启,请将部署建议-网络要求 中的端口加入白名单
enable_ntpd检测部署目标机器 NTP 服务,默认为 True,请勿关闭
set_hostname根据 IP 修改部署目标机器主机名,默认为 False
enable_binlog是否部署 Pump 并开启 binlog,默认为 False,依赖 Kafka 集群,参见 zookeeper_addrs 变量
zookeeper_addrsbinlog Kafka 集群的 zookeeper 地址
deploy_without_tidbKV 模式,不部署 TiDB 服务,仅部署 PD、TiKV 及监控服务,请将 inventory.ini 文件中 tidb_servers 主机组的 IP 设置为空。
alertmanager_target可选:如果你已单独部署 alertmanager,可配置该变量,格式:alertmanager_host:alertmanager_port
grafana_admin_userGrafana 管理员帐号用户名,默认为 admin
grafana_admin_passwordGrafana 管理员帐号密码,默认为 admin,用于 Ansible 导入 Dashboard 和创建 API Key,如后期通过 grafana web 修改了密码,请更新此变量
collect_log_recent_hours采集日志时,采集最近几个小时的日志,默认为 2 小时
enable_bandwidth_limit在中控机上从部署目标机器拉取诊断数据时,是否限速,默认为 True,与 collect_bandwidth_limit 变量结合使用
collect_bandwidth_limit在中控机上从部署目标机器拉取诊断数据时限速多少,单位: Kbit/s,默认 10000,即 10Mb/s,如果是单机多 TiKV 实例部署方式,需除以单机实例个数
prometheus_storage_retentionPrometheus 监控数据的保留时间(默认为 30 天);2.1.7、3.0 以及之后的 tidb-ansible 版本中,group_vars/monitoring_servers.yml 文件里新增的配置

第 11 步:部署 TiDB 集群

ansible-playbook 执行 Playbook 时,默认并发为 5。部署目标机器较多时,可添加 -f 参数指定并发数,例如 ansible-playbook deploy.yml -f 10。以下示例使用 tidb 用户作为服务运行用户:

  1. tidb-ansible/inventory.ini 文件中,确认 ansible_user = tidb

    ## Connection # ssh via normal user ansible_user = tidb

    执行以下命令,如果所有 server 均返回 tidb,表示 SSH 互信配置成功:

    ansible -i inventory.ini all -m shell -a 'whoami'

    执行以下命令,如果所有 server 均返回 root,表示 tidb 用户 sudo 免密码配置成功。

    ansible -i inventory.ini all -m shell -a 'whoami' -b
  2. 执行 local_prepare.yml playbook,联网下载 TiDB binary 到中控机。

    ansible-playbook local_prepare.yml
  3. 初始化系统环境,修改内核参数。

    ansible-playbook bootstrap.yml
  4. 部署 TiDB 集群软件。

    ansible-playbook deploy.yml
  5. 启动 TiDB 集群。

    ansible-playbook start.yml

测试集群

TiDB 兼容 MySQL,因此可使用 MySQL 客户端直接连接 TiDB。推荐配置负载均衡以提供统一的 SQL 接口。

  1. 使用 MySQL 客户端连接 TiDB 集群。TiDB 服务的默认端口为 4000

    mysql -u root -h 172.16.10.1 -P 4000
  2. 通过浏览器访问监控平台。

常见部署问题

本小节介绍使用 TiDB Ansible 部署 TiDB 集群过程中的常见问题与解决方案。

如何自定义端口

修改 inventory.ini 文件,在相应服务 IP 后添加以下主机变量即可:

组件端口变量默认端口说明
TiDBtidb_port4000应用及 DBA 工具访问通信端口
TiDBtidb_status_port10080TiDB 状态信息上报通信端口
TiKVtikv_port20160TiKV 通信端口
TiKVtikv_status_port20180上报 TiKV 状态的通信端口
PDpd_client_port2379提供 TiDB 和 PD 通信端口
PDpd_peer_port2380PD 集群节点间通信端口
Pumppump_port8250Pump 通信端口
Prometheusprometheus_port9090Prometheus 服务通信端口
Pushgatewaypushgateway_port9091TiDB, TiKV, PD 监控聚合和上报端口
Node_exporternode_exporter_port9100TiDB 集群每个节点的系统信息上报通信端口
Blackbox_exporterblackbox_exporter_port9115Blackbox_exporter 通信端口,用于 TiDB 集群端口监控
Grafanagrafana_port3000Web 监控服务对外服务和客户端(浏览器)访问端口
Kafka_exporterkafka_exporter_port9308Kafka_exporter 通信端口,用于监控 binlog Kafka 集群

如何自定义部署目录

修改 inventory.ini 文件,在相应服务 IP 后添加以下主机变量即可:

组件目录变量默认目录说明
全局deploy_dir/home/tidb/deploy部署目录
TiDBtidb_log_dir{{ deploy_dir }}/log日志目录
TiKVtikv_log_dir{{ deploy_dir }}/log日志目录
TiKVtikv_data_dir{{ deploy_dir }}/data数据目录
TiKVwal_dir""rocksdb write-ahead 日志目录,为空时与 TiKV 数据目录一致
TiKVraftdb_path""raftdb 目录,为空时为 tikv_data_dir/raft
PDpd_log_dir{{ deploy_dir }}/log日志目录
PDpd_data_dir{{ deploy_dir }}/data.pd数据目录
pumppump_log_dir{{ deploy_dir }}/log日志目录
pumppump_data_dir{{ deploy_dir }}/data.pump数据目录
prometheusprometheus_log_dir{{ deploy_dir }}/log日志目录
prometheusprometheus_data_dir{{ deploy_dir }}/data.metrics数据目录
pushgatewaypushgateway_log_dir{{ deploy_dir }}/log日志目录
node_exporternode_exporter_log_dir{{ deploy_dir }}/log日志目录
grafanagrafana_log_dir{{ deploy_dir }}/log日志目录
grafanagrafana_data_dir{{ deploy_dir }}/data.grafana数据目录

如何检测 NTP 服务是否正常

  1. 执行以下命令,如果输出 running 表示 NTP 服务正在运行:

    sudo systemctl status ntpd.service
    ntpd.service - Network Time Service Loaded: loaded (/usr/lib/systemd/system/ntpd.service; disabled; vendor preset: disabled) Active: active (running) since 一 2017-12-18 13:13:19 CST; 3s ago
  2. 执行 ntpstat 命令,如果输出 synchronised to NTP server(正在与 NTP server 同步),表示在正常同步:

    ntpstat
    synchronised to NTP server (85.199.214.101) at stratum 2 time correct to within 91 ms polling server every 1024 s
  • 以下情况表示 NTP 服务未正常同步:

    ntpstat
    unsynchronised
  • 以下情况表示 NTP 服务未正常运行:

    ntpstat
    Unable to talk to NTP daemon. Is it running?
  • 如果要使 NTP 服务尽快开始同步,执行以下命令。可以将 pool.ntp.org 替换为你的 NTP server:

    sudo systemctl stop ntpd.service && \ sudo ntpdate pool.ntp.org && \ sudo systemctl start ntpd.service
  • 如果要在 CentOS 7 系统上手动安装 NTP 服务,可执行以下命令:

    sudo yum install ntp ntpdate && \ sudo systemctl start ntpd.service && \ sudo systemctl enable ntpd.service

如何调整进程监管方式从 supervise 到 systemd

process supervision, [systemd, supervise]
process_supervision = systemd

TiDB Anisble 在 TiDB v1.0.4 版本之前进程监管方式默认为 supervise。之前安装的集群可保持不变,如需更新为 systemd,需关闭集群,按以下方式变更:

ansible-playbook stop.yml && \ ansible-playbook deploy.yml -D && \ ansible-playbook start.yml

如何手工配置 SSH 互信及 sudo 免密码

  1. root 用户依次登录到部署目标机器创建 tidb 用户并设置登录密码。

    useradd tidb && \ passwd tidb
  2. 执行以下命令,将 tidb ALL=(ALL) NOPASSWD: ALL 添加到文件末尾,即配置好 sudo 免密码。

    visudo
    tidb ALL=(ALL) NOPASSWD: ALL
  3. tidb 用户登录到中控机,执行以下命令。将 172.16.10.61 替换成你的部署目标机器 IP,按提示输入部署目标机器 tidb 用户密码,执行成功后即创建好 SSH 互信,其他机器同理。

    ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.10.61
  4. tidb 用户登录到中控机,通过 ssh 的方式登录目标机器 IP。如果不需要输入密码并登录成功,即表示 SSH 互信配置成功。

    ssh 172.16.10.61
    [tidb@172.16.10.61 ~]$
  5. tidb 用户登录到部署目标机器后,执行以下命令,不需要输入密码并切换到 root 用户,表示 tidb 用户 sudo 免密码配置成功。

    sudo -su root
    [root@172.16.10.61 tidb]#

You need to install jmespath prior to running json_query filter 报错

  1. 请参照在中控机器上安装 TiDB Ansible 及其依赖 在中控机上通过 pip 安装 TiDB Ansible 及相关依赖的指定版本,默认会安装 jmespath

  2. 执行以下命令,验证 jmespath 是否安装成功:

    pip show jmespath
    Name: jmespath Version: 0.9.0
  3. 在中控机上 Python 交互窗口里 import jmespath

    • 如果没有报错,表示依赖安装成功。
    • 如果有 ImportError: No module named jmespath 报错,表示未成功安装 Python jmespath 模块。
    python
    Python 2.7.5 (default, Nov 6 2016, 00:28:07) [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux2 Type "help", "copyright", "credits" or "license" for more information.
    import jmespath

启动 Pump/Drainer 报 zk: node does not exist 错误

请检查 inventory.ini 里的 zookeeper_addrs 参数配置与 Kafka 集群内的配置是否相同、是否填写了命名空间。关于命名空间的配置说明如下:

# ZooKeeper connection string (see ZooKeeper docs for details). # ZooKeeper address of Kafka cluster, example: # zookeeper_addrs = "192.168.0.11:2181,192.168.0.12:2181,192.168.0.13:2181" # You can also append an optional chroot string to the URLs to specify the root directory for all Kafka znodes. Example: # zookeeper_addrs = "192.168.0.11:2181,192.168.0.12:2181,192.168.0.13:2181/kafka/123"