签到成功

知道了

CNDBA社区CNDBA社区

TiDB集群部署文档

2019-02-19 18:27 4698 0 原创 TiDB
作者: Marvinn

TiDB 集群文档

[TOC]
1.1、环境说明
  1. 部署目标机器若干http://www.cndba.cn/Marvinn/article/3271

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

    注:使用 Ansible 方式部署时,TiKV 及 PD 节点数据目录所在磁盘请使用 SSD 磁盘,否则无法通过检测。 如果仅验证功能,建议使用 Docker Compose 部署方案单机进行测试。

  2. 部署中控机一台:

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

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

    # yum -y install epel-release git curl sshpass
    # yum -y install python-pip
    

    如果是中控机是 Ubuntu 系统,执行以下命令:

    # apt-get -y install git curl sshpass python-pip
    
  2. 在中控机上创建 tidb 用户,并生成 ssh key

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

    创建 tidb 用户

    # useradd -m -d /home/tidb tidb
    

    设置 tidb 用户密码

    # passwd tidb
    

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

    # visudo
    tidb ALL=(ALL) NOPASSWD: ALL
    

    生成 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

    http://www.cndba.cn/Marvinn/article/3271

    tidb 用户登录中控机并进入 /home/tidb 目录。以下为 tidb-ansible 分支与 TiDB 版本对应关系,版本选择可以咨询官方。

    | tidb-ansible 分支 | TiDB 版本 | 备注 |
    | ————————- | —————- | —————————————————————- |
    | release-2.0 | 2.0 版本 | 最新 2.0 稳定版本,可用于生产环境 |
    | release-2.1 | 2.1 版本 | 最新 2.1 稳定版本,可用于生产环境(建议)。 |
    | master | master 版本 | 包含最新特性,每日更新 |

    使用以下命令从 Github TiDB-Ansible 项目上下载 TiDB-Ansible 相应分支,默认的文件夹名称为 tidb-ansible

  • 下载 2.0 版本:

    $ git clone -b release-2.0 https://github.com/pingcap/tidb-ansible.git
    
  • 下载 2.1 版本:

    $ git clone -b release-2.1 https://github.com/pingcap/tidb-ansible.git
    
  • 下载 master 版本:

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

:请务必按文档操作,将 tidb-ansible 下载到 /home/tidb 目录下,权限为 tidb 用户,不要下载到 /root 下,否则会遇到权限问题。

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

    tidb 用户登录中控机,请务必按以下方式通过 pip 安装 Ansible 及其相关依赖的指定版本,否则会有兼容问题。安装完成后,可通过 ansible --version 查看 Ansible 版本。目前 release-2.0、release-2.1 及 master 版本兼容 Ansible 2.4 及 Ansible 2.5 版本,Ansible 及相关依赖版本记录在 tidb-ansible/requirements.txt 文件中。

      $ cd /home/tidb/tidb-ansible
      $ sudo pip install -r ./requirements.txt
      $ ansible --version
        ansible 2.5.0
    
  2. 在中控机上配置部署机器 ssh 互信及 sudo 规则

    tidb 用户登录中控机,将你的部署目标机器 IP 添加到 hosts.ini 文件 [servers] 区块下。

    $ cd /home/tidb/tidb-ansible
    $ vi hosts.ini
    [servers]
    172.16.30.86
    172.16.30.87
    172.16.30.88
    172.16.30.89
    
    [all:vars]
    username = tidb
    ntp_server = pool.ntp.org
    

    执行以下命令,按提示输入部署目标机器 root 用户密码。该步骤将在部署目标机器上创建 tidb 用户,并配置 sudo 规则,配置中控机与部署目标机器之间的 ssh 互信。

    $ ansible-playbook -i hosts.ini create_users.yml -u root -k
    
  3. 在部署目标机器上安装 NTP 服务

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

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

    查看ntp服务状态

    $ ntpstat
    synchronised to NTP server (119.28.206.193) at stratum 3 
       time correct to within 64 ms
       polling server every 1024 s
    

该步骤将在部署目标机器上使用系统自带软件源联网安装并启动 NTP 服务,服务使用安装包默认的 NTP server 列表,见配置文件 /etc/ntp.conf 中 server 参数,如果使用默认的 NTP server,你的机器需要连接外网。 为了让 NTP 尽快开始同步,启动 NTP 服务前,系统会 ntpdate hosts.ini 文件中的 ntp_server 一次,默认为 pool.ntp.org,也可替换为你的 NTP server。

  1. 在部署目标机器上配置 CPUfreq 调节器模式

    为了让 CPU 发挥最大性能,请将 CPUfreq 调节器模式设置为 performance 模式。

    你可以通过 cpupower 命令查看系统支持的调节器模式:

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

    本例中系统支持设置 performancepowersave 模式。如果返回 “Not Available”,表示当前系统不支持配置 CPUfreq,跳过该步骤即可。

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

    你可以通过 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 模式,你可以通过以下命令设置为 performance 模式。

    # cpupower frequency-set --governor performance
    

    你也可以通过以下命令在部署目标机器上批量设置:

    $ ansible -i hosts.ini all -m shell -a "cpupower frequency-set --governor performance" -u tidb -b
    
  2. 在部署目标机器上添加数据盘 ext4 文件系统挂载参数

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

      # umount /dev/nvme0n1
    

    下面以 /dev/nvme0n1 数据盘为例:

    查看数据盘

    # fdisk -l
    Disk /dev/nvme0n1: 1000 GB
    

    创建分区表

    # parted -s -a optimal /dev/nvme0n1 mklabel gpt -- mkpart primary ext4 1 -1
    

    格式化文件系统http://www.cndba.cn/Marvinn/article/3271

    # mkfs.ext4 /dev/nvme0n1
    

    查看数据盘分区 UUID,本例中 nvme0n1 的 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 ext4         c51eb23b-195c-4061-92a9-3fad812cc12f
    

    编辑 /etc/fstab 文件,添加 nodelalloc 挂载参数

    # vi /etc/fstab
    UUID=c51eb23b-195c-4061-92a9-3fad812cc12f /data1 ext4 defaults,nodelalloc,noatime 0 2
    

    挂载数据盘

    # mkdir /data1
    # mount -a
    

    执行以下命令,如果文件系统为 ext4,并且挂载参数中包含 nodelalloc 表示生效:

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

如果你的数据盘已经格式化成 ext4 并挂载,可先执行 umount 命令卸载,从编辑 /etc/fstab 文件步骤开始执行,添加挂载参数重新挂载即可。

1.3、配置安装

当前机器环境存在 TiDB 集群,所以混合部署需要注意以下几点:

http://www.cndba.cn/Marvinn/article/3271

  1. 所有组件的部署路径都不能有冲突,需要改变安装路径以及改变默认端口
  2. 所有组件的端口都不能有冲突,为避免端口冲突,导致集群安装失败,所以要么关闭当前 TiDB 集群环境,要么手动更改 TiDB、TiKV、PD 等组件的端口,当前通过更改 TiDB 配置文件 inventory.ini 安装
  3. 使用 supervice 的方式来管理进程(默认是 systemd)

如何自定义端口

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

http://www.cndba.cn/Marvinn/article/3271

组件 端口变量 默认端口 说明
TiDB tidb_port 4000 应用及 DBA 工具访问通信端口
TiDB tidb_status_port 10080 TiDB 状态信息上报通信端口
TiKV tikv_port 20160 TiKV 通信端口
PD pd_client_port 2379 提供 TiDB 和 PD 通信端口
PD pd_peer_port 2380 PD 集群节点间通信端口
Pump pump_port 8250 Pump 通信端口
Prometheus prometheus_port 9090 Prometheus 服务通信端口
Pushgateway pushgateway_port 9091 TiDB, TiKV, PD 监控聚合和上报端口
Node_exporter node_exporter_port 9100 TiDB 集群每个节点的系统信息上报通信端口
Blackbox_exporter blackbox_exporter_port 9115 Blackbox_exporter 通信端口,用于 TiDB 集群端口监控
Grafana grafana_port 3000 Web 监控服务对外服务和客户端(浏览器)访问端口
Grafana grafana_collector_port 8686 grafana_collector 通信端口,用于将 Dashboard 导出为 PDF 格式
Kafka_exporter kafka_exporter_port 9308 Kafka_exporter 通信端口,用于监控 binlog Kafka 集群

如何自定义部署目录

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

组件 目录变量 默认目录 说明
全局 deploy_dir /home/tidb/deploy 部署目录
TiDB tidb_log_dir {{ deploy_dir }}/log 日志目录
TiKV tikv_log_dir {{ deploy_dir }}/log 日志目录
TiKV tikv_data_dir {{ deploy_dir }}/data 数据目录
TiKV wal_dir ”” rocksdb write-ahead 日志目录,为空时与 TiKV 数据目录一致
TiKV raftdb_path ”” raftdb 目录,为空时为 tikv_data_dir/raft
PD pd_log_dir {{ deploy_dir }}/log 日志目录
PD pd_data_dir {{ deploy_dir }}/data.pd 数据目录
pump pump_log_dir {{ deploy_dir }}/log 日志目录
pump pump_data_dir {{ deploy_dir }}/data.pump 数据目录
prometheus prometheus_log_dir {{ deploy_dir }}/log 日志目录
prometheus prometheus_data_dir {{ deploy_dir }}/data.metrics 数据目录
pushgateway pushgateway_log_dir {{ deploy_dir }}/log 日志目录
node_exporter node_exporter_log_dir {{ deploy_dir }}/log 日志目录
grafana grafana_log_dir {{ deploy_dir }}/log 日志目录
grafana grafana_data_dir {{ deploy_dir }}/data.grafana 数据目录

tidb 用户登录中控机,inventory.ini 文件路径为 /home/tidb/tidb-ansible/inventory.ini

注: 请使用内网 IP 来部署集群,如果部署目标机器 SSH 端口非默认 22 端口,需添加 ansible_port 变量,如: TiDB1 ansible_host=172.16.10.1 ansible_port=5555

标准 TiDB 集群需要 6 台机器:

  • 2 个 TiDB 节点
  • 3 个 PD 节点
  • 3 个 TiKV 节点,第一台 TiDB 机器同时用作监控机

默认情况下,单台机器上只需部署一个 TiKV 实例。如果你的 TiKV 部署机器 CPU 及内存配置是部署建议的两倍或以上,并且拥有两块 SSD 硬盘或单块容量超 2T 的 SSD 硬盘,可以考虑部署两实例,但不建议部署两个以上实例。

标准单机单 TiKV 实例集群拓扑以及单机多 TiKV 实例集群部署方式官方参考链接: https://pingcap.com/docs-cn/op-guide/ansible-deployment/

当前机器环境如下:采用单机多KV部署方式

Name Host IP Services
ip-172-16-30-86 172.16.30.86 PD1, TiDB
ip-172-16-30-87 172.16.30.87 PD2, TiKV1-1,TiKV1-2
ip-172-16-30-88 172.16.30.88 PD3,TiKV2-1,TiKV2-2
ip-172-16-30-89 172.16.30.89 TiKV3-1,TiKV3-2

参考混合部署inventory.ini配置文件

## TiDB Cluster Part
[tidb_servers]
TiDB ansible_host=172.16.30.86 deploy_dir=/data/tidb/deploy_tidb/tidb tidb_port=5000 tidb_status_port=10086 pump_port=8258 labels="host=ip-172-16-30-86"

[tikv_servers]
TiKV1-1 ansible_host=172.16.30.87 deploy_dir=/data/tidb/deploy_tidb/tikv1 tikv_port=20191 labels="host=ip-172-16-30-87"
TiKV1-2 ansible_host=172.16.30.87 deploy_dir=/data/tidb/deploy_tidb/tikv2 tikv_port=20192 labels="host=ip-172-16-30-87"
TiKV2-1 ansible_host=172.16.30.88 deploy_dir=/data/tidb/deploy_tidb/tikv1 tikv_port=20191 labels="host=ip-172-16-30-88"
TiKV2-2 ansible_host=172.16.30.88 deploy_dir=/data/tidb/deploy_tidb/tikv2 tikv_port=20192 labels="host=ip-172-16-30-88"
TiKV3-1 ansible_host=172.16.30.89 deploy_dir=/data/tidb/deploy_tidb/tikv1 tikv_port=20191 labels="host=ip-172-16-30-89"
TiKV3-2 ansible_host=172.16.30.89 deploy_dir=/data/tidb/deploy_tidb/tikv2 tikv_port=20192 labels="host=ip-172-16-30-89"

[pd_servers]
PD01 ansible_host=172.16.30.86 deploy_dir=/data/tidb/deploy_tidb/pd pd_client_port=2479 pd_peer_port=2480 labels="host=ip-172-16-30-86"
PD02 ansible_host=172.16.30.87 deploy_dir=/data/tidb/deploy_tidb/pd pd_client_port=2479 pd_peer_port=2480 labels="host=ip-172-16-30-87"
PD03 ansible_host=172.16.30.88 deploy_dir=/data/tidb/deploy_tidb/pd pd_client_port=2479 pd_peer_port=2480 labels="host=ip-172-16-30-88"

[spark_master]

[spark_slaves]

## Monitoring Part
# prometheus and pushgateway servers
[monitoring_servers]
prometheus3086 ansible_host=172.16.30.86 prometheus_port=9098 pushgateway_port=9099 labels="host=ip-172-16-30-86"


[grafana_servers]
grafana3086 ansible_host=172.16.30.86 grafana_port=3002 grafana_collector_port=8088 labels="host=ip-172-16-30-86"


# node_exporter and blackbox_exporter servers
[monitored_servers]
nodeblack3086 ansible_host=172.16.30.86 node_exporter_port=9102 blackbox_exporter_port=9117 labels="host=ip-172-16-30-86"
nodeblack3087 ansible_host=172.16.30.87 node_exporter_port=9102 blackbox_exporter_port=9117 labels="host=ip-172-16-30-87"
nodeblack3088 ansible_host=172.16.30.88 node_exporter_port=9102 blackbox_exporter_port=9117 labels="host=ip-172-16-30-88"
nodeblack3089 ansible_host=172.16.30.89 node_exporter_port=9102 blackbox_exporter_port=9117 labels="host=ip-172-16-30-89"

[alertmanager_servers]
altmgr3086 ansible_host=172.16.30.86 labels="host=ip-172-16-30-86"

[kafka_exporter_servers]

## Binlog Part
[pump_servers:children]
tidb_servers

[drainer_servers]

## Group variables
[pd_servers:vars]
location_labels = ["host"]

## Global variables
[all:vars]
deploy_dir = /data/tidb/deploy_tidb

## Connection
# ssh via normal user
ansible_user = tidb

cluster_name = test-cluster-TiDB

tidb_version = v2.0.11

# process supervision, [systemd, supervise]
process_supervision = supervise

timezone = Asia/Shanghai

enable_firewalld = False
# check NTP service
enable_ntpd = True
set_hostname = False

## binlog trigger
enable_binlog = False
# zookeeper address of kafka cluster for binlog, example:
# zookeeper_addrs = "192.168.0.11:2181,192.168.0.12:2181,192.168.0.13:2181"
zookeeper_addrs = ""
# kafka cluster address for monitoring, example:
# kafka_addrs = "192.168.0.11:9092,192.168.0.12:9092,192.168.0.13:9092"
kafka_addrs = "172.16.30.86:9086"

# store slow query log into seperate file
enable_slow_query_log = False

# enable TLS authentication in the TiDB cluster
enable_tls = False

# KV mode
deploy_without_tidb = False

# Optional: Set if you already have a alertmanager server.
# Format: alertmanager_host:alertmanager_port
alertmanager_target = ""

grafana_admin_user = "admin"
grafana_admin_password = "admin"


### Collect diagnosis
collect_log_recent_hours = 2

enable_bandwidth_limit = True
# default: 10Mb/s, unit: Kbit/s
collect_bandwidth_limit = 10000
1.4、部署任务

ansible-playbook 执行 Playbook 时默认并发为 5,部署目标机器较多时可添加 -f 参数指定并发,如 ansible-playbook deploy.yml -f 10

  1. 确认 tidb-ansible/inventory.ini 文件中 ansible_user = tidb,本例使用 tidb 用户作为服务运行用户,配置如下:

    ansible_user 不要设置成 root 用户,tidb-ansible 限制了服务以普通用户运行。

    ## 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
    

    :Grafana Dashboard 上的 Report 按钮可用来生成 PDF 文件,此功能依赖 fontconfig 包和英文字体。如需使用该功能,登录 grafana_servers 机器,用以下命令安装:

    $ sudo yum install fontconfig open-sans-fonts
    
  5. 启动 TiDB 集群

    ansible-playbook start.yml
    

测试集群

测试连接 TiDB 集群,推荐在 TiDB 前配置负载均衡来对外统一提供 SQL 接口。http://www.cndba.cn/Marvinn/article/3271

  • 使用 MySQL 客户端连接测试,TCP 4000 端口是 TiDB 服务默认端口,混合部署,当前采用5000端口。

    mysql -u root -h 172.16.30.86 -P 5000
    
  • 通过浏览器访问监控平台。

    地址:http://172.16.10.1:3002 默认帐号密码是:admin/adminhttp://www.cndba.cn/Marvinn/article/3271

1.5、部署问题记录
1.5.1、混合部署注意事项

TiDB 集群部署,因公司原环境存在 TiDB 集群,采用混合部署,需要注意以下三点:

混合部署:修改配置文件 inventory.ini 自定义端口以及deploy安装目录
1、使用进程 supervise 守护进程
2、独立 deploy 安装目录
3、所有端口不冲突,自定义端口

另外,配置文件 inventory.ini 中 label 只针对 TiKV 组件起作用,其他组件起标记作用,并不影响集群的使用

1.5.2、部署问题记录
  1. bootstrap过程中machine_benchmark报错
ERROR MESSAGE SUMMARY ********************************************************************************************************************************************************************
[TiKV1-1]: Ansible FAILED! => playbook: bootstrap.yml; TASK: machine_benchmark : get fio mixed test randread iops; message: {"changed": true, "cmd": "python parse_fio_output.py --target='fio_randread_write_test.json' --read-iops", "delta": "0:00:00.266771", "end": "2019-02-18 20:31:19.342900", "msg": "non-zero return code", "rc": 1, "start": "2019-02-18 20:31:19.076129", "stderr": "Traceback (most recent call last):/n  File /"parse_fio_output.py/", line 35, in <module>/n    result = json.load(fp)/n  File /"/usr/lib64/python2.7/json/__init__.py/", line 290, in load/n    **kw)/n  File /"/usr/lib64/python2.7/json/__init__.py/", line 338, in loads/n    return _default_decoder.decode(s)/n  File /"/usr/lib64/python2.7/json/decoder.py/", line 369, in decode/n    raise ValueError(errmsg(/"Extra data/", s, end, len(s)))/nValueError: Extra data: line 306 column 5 - line 309 column 1 (char 7968 - 7976)", "stderr_lines": ["Traceback (most recent call last):", "  File /"parse_fio_output.py/", line 35, in <module>", "    result = json.load(fp)", "  File /"/usr/lib64/python2.7/json/__init__.py/", line 290, in load", "    **kw)", "  File /"/usr/lib64/python2.7/json/__init__.py/", line 338, in loads", "    return _default_decoder.decode(s)", "  File /"/usr/lib64/python2.7/json/decoder.py/", line 369, in decode", "    raise ValueError(errmsg(/"Extra data/", s, end, len(s)))", "ValueError: Extra data: line 306 column 5 - line 309 column 1 (char 7968 - 7976)"], "stdout": "", "stdout_lines": []}
[TiKV1-2]: Ansible FAILED! => playbook: bootstrap.yml; TASK: machine_benchmark : get fio mixed test randread iops; message: {"changed": true, "cmd": "python parse_fio_output.py --target='fio_randread_write_test.json' --read-iops", "delta": "0:00:00.259977", "end": "2019-02-18 20:31:19.376369", "msg": "non-zero return code", "rc": 1, "start": "2019-02-18 20:31:19.116392", "stderr": "Traceback (most recent call last):/n  File /"parse_fio_output.py/", line 35, in <module>/n    result = json.load(fp)/n  File /"/usr/lib64/python2.7/json/__init__.py/", line 290, in load/n    **kw)/n  File /"/usr/lib64/python2.7/json/__init__.py/", line 338, in loads/n    return _default_decoder.decode(s)/n  File /"/usr/lib64/python2.7/json/decoder.py/", line 369, in decode/n    raise ValueError(errmsg(/"Extra data/", s, end, len(s)))/nValueError: Extra data: line 306 column 5 - line 309 column 1 (char 7968 - 7976)", "stderr_lines": ["Traceback (most recent call last):", "  File /"parse_fio_output.py/", line 35, in <module>", "    result = json.load(fp)", "  File /"/usr/lib64/python2.7/json/__init__.py/", line 290, in load", "    **kw)", "  File /"/usr/lib64/python2.7/json/__init__.py/", line 338, in loads", "    return _default_decoder.decode(s)", "  File /"/usr/lib64/python2.7/json/decoder.py/", line 369, in decode", "    raise ValueError(errmsg(/"Extra data/", s, end, len(s)))", "ValueError: Extra data: line 306 column 5 - line 309 column 1 (char 7968 - 7976)"], "stdout": "", "stdout_lines": []}
[TiKV3-1]: Ansible FAILED! => playbook: bootstrap.yml; TASK: machine_benchmark : get fio mixed test randread iops; message: {"changed": true, "cmd": "python parse_fio_output.py --target='fio_randread_write_test.json' --read-iops", "delta": "0:00:00.264040", "end": "2019-02-18 20:31:19.599566", "msg": "non-zero return code", "rc": 1, "start": "2019-02-18 20:31:19.335526", "stderr": "Traceback (most recent call last):/n  File /"parse_fio_output.py/", line 35, in <module>/n    result = json.load(fp)/n  File /"/usr/lib64/python2.7/json/__init__.py/", line 290, in load/n    **kw)/n  File /"/usr/lib64/python2.7/json/__init__.py/", line 338, in loads/n    return _default_decoder.decode(s)/n  File /"/usr/lib64/python2.7/json/decoder.py/", line 369, in decode/n    raise ValueError(errmsg(/"Extra data/", s, end, len(s)))/nValueError: Extra data: line 306 column 4 - line 309 column 1 (char 7953 - 7961)", "stderr_lines": ["Traceback (most recent call last):", "  File /"parse_fio_output.py/", line 35, in <module>", "    result = json.load(fp)", "  File /"/usr/lib64/python2.7/json/__init__.py/", line 290, in load", "    **kw)", "  File /"/usr/lib64/python2.7/json/__init__.py/", line 338, in loads", "    return _default_decoder.decode(s)", "  File /"/usr/lib64/python2.7/json/decoder.py/", line 369, in decode", "    raise ValueError(errmsg(/"Extra data/", s, end, len(s)))", "ValueError: Extra data: line 306 column 4 - line 309 column 1 (char 7953 - 7961)"], "stdout": "", "stdout_lines": []}
[TiKV2-1]: Ansible FAILED! => playbook: bootstrap.yml; TASK: machine_benchmark : get fio mixed test randread iops; message: {"changed": true, "cmd": "python parse_fio_output.py --target='fio_randread_write_test.json' --read-iops", "delta": "0:00:00.352251", "end": "2019-02-18 20:31:19.602504", "msg": "non-zero return code", "rc": 1, "start": "2019-02-18 20:31:19.250253", "stderr": "Traceback (most recent call last):/n  File /"parse_fio_output.py/", line 35, in <module>/n    result = json.load(fp)/n  File /"/usr/lib64/python2.7/json/__init__.py/", line 290, in load/n    **kw)/n  File /"/usr/lib64/python2.7/json/__init__.py/", line 338, in loads/n    return _default_decoder.decode(s)/n  File /"/usr/lib64/python2.7/json/decoder.py/", line 369, in decode/n    raise ValueError(errmsg(/"Extra data/", s, end, len(s)))/nValueError: Extra data: line 307 column 5 - line 310 column 1 (char 7969 - 7977)", "stderr_lines": ["Traceback (most recent call last):", "  File /"parse_fio_output.py/", line 35, in <module>", "    result = json.load(fp)", "  File /"/usr/lib64/python2.7/json/__init__.py/", line 290, in load", "    **kw)", "  File /"/usr/lib64/python2.7/json/__init__.py/", line 338, in loads", "    return _default_decoder.decode(s)", "  File /"/usr/lib64/python2.7/json/decoder.py/", line 369, in decode", "    raise ValueError(errmsg(/"Extra data/", s, end, len(s)))", "ValueError: Extra data: line 307 column 5 - line 310 column 1 (char 7969 - 7977)"], "stdout": "", "stdout_lines": []}
[TiKV2-2]: Ansible FAILED! => playbook: bootstrap.yml; TASK: machine_benchmark : get fio mixed test randread iops; message: {"changed": true, "cmd": "python parse_fio_output.py --target='fio_randread_write_test.json' --read-iops", "delta": "0:00:00.351828", "end": "2019-02-18 20:31:19.679745", "msg": "non-zero return code", "rc": 1, "start": "2019-02-18 20:31:19.327917", "stderr": "Traceback (most recent call last):/n  File /"parse_fio_output.py/", line 35, in <module>/n    result = json.load(fp)/n  File /"/usr/lib64/python2.7/json/__init__.py/", line 290, in load/n    **kw)/n  File /"/usr/lib64/python2.7/json/__init__.py/", line 338, in loads/n    return _default_decoder.decode(s)/n  File /"/usr/lib64/python2.7/json/decoder.py/", line 369, in decode/n    raise ValueError(errmsg(/"Extra data/", s, end, len(s)))/nValueError: Extra data: line 307 column 5 - line 310 column 1 (char 7969 - 7977)", "stderr_lines": ["Traceback (most recent call last):", "  File /"parse_fio_output.py/", line 35, in <module>", "    result = json.load(fp)", "  File /"/usr/lib64/python2.7/json/__init__.py/", line 290, in load", "    **kw)", "  File /"/usr/lib64/python2.7/json/__init__.py/", line 338, in loads", "    return _default_decoder.decode(s)", "  File /"/usr/lib64/python2.7/json/decoder.py/", line 369, in decode", "    raise ValueError(errmsg(/"Extra data/", s, end, len(s)))", "ValueError: Extra data: line 307 column 5 - line 310 column 1 (char 7969 - 7977)"], "stdout": "", "stdout_lines": []}
[TiKV3-2]: Ansible FAILED! => playbook: bootstrap.yml; TASK: machine_benchmark : get fio mixed test randread iops; message: {"changed": true, "cmd": "python parse_fio_output.py --target='fio_randread_write_test.json' --read-iops", "delta": "0:00:00.257578", "end": "2019-02-18 20:31:19.923197", "msg": "non-zero return code", "rc": 1, "start": "2019-02-18 20:31:19.665619", "stderr": "Traceback (most recent call last):/n  File /"parse_fio_output.py/", line 35, in <module>/n    result = json.load(fp)/n  File /"/usr/lib64/python2.7/json/__init__.py/", line 290, in load/n    **kw)/n  File /"/usr/lib64/python2.7/json/__init__.py/", line 338, in loads/n    return _default_decoder.decode(s)/n  File /"/usr/lib64/python2.7/json/decoder.py/", line 369, in decode/n    raise ValueError(errmsg(/"Extra data/", s, end, len(s)))/nValueError: Extra data: line 306 column 4 - line 309 column 1 (char 7953 - 7961)", "stderr_lines": ["Traceback (most recent call last):", "  File /"parse_fio_output.py/", line 35, in <module>", "    result = json.load(fp)", "  File /"/usr/lib64/python2.7/json/__init__.py/", line 290, in load", "    **kw)", "  File /"/usr/lib64/python2.7/json/__init__.py/", line 338, in loads", "    return _default_decoder.decode(s)", "  File /"/usr/lib64/python2.7/json/decoder.py/", line 369, in decode", "    raise ValueError(errmsg(/"Extra data/", s, end, len(s)))", "ValueError: Extra data: line 306 column 4 - line 309 column 1 (char 7953 - 7961)"], "stdout": "", "stdout_lines": []}
Ask for help:
Contact us: support@pingcap.com
It seems that you encounter some problems. You can send an email to the above email address, attached with the tidb-ansible/inventory.ini and tidb-ansible/log/ansible.log files and the error message, or new issue on https://github.com/pingcap/tidb-ansible/issues. We'll try our best to help you deploy a TiDB cluster. Thanks. :-)
[tidb@ip-172-16-30-86 tidb-ansible]$ 
Last login: Mon Feb 18 21:01:34 2019 from 192.168.190.6

该报错主要因为配置文件 inventory.ini 多节点 TiKV 部署安装目录同台机器多个 TiKV 节点目录一致,

[tikv_servers]
TiKV1-1 ansible_host=172.16.30.87 deploy_dir=/data/tidb/deploy_tidb/tikv tikv_port=20191 labels="host=ip-172-16-30-87"
TiKV1-2 ansible_host=172.16.30.87 deploy_dir=/data/tidb/deploy_tidb/tikv tikv_port=20192 labels="host=ip-172-16-30-87"
TiKV2-1 ansible_host=172.16.30.88 deploy_dir=/data/tidb/deploy_tidb/tikv tikv_port=20191 labels="host=ip-172-16-30-88"
TiKV2-2 ansible_host=172.16.30.88 deploy_dir=/data/tidb/deploy_tidb/tikv tikv_port=20192 labels="host=ip-172-16-30-88"
TiKV3-1 ansible_host=172.16.30.89 deploy_dir=/data/tidb/deploy_tidb/tikv tikv_port=20191 labels="host=ip-172-16-30-89"
TiKV3-2 ansible_host=172.16.30.89 deploy_dir=/data/tidb/deploy_tidb/tikv tikv_port=20192 labels="host=ip-172-16-30-89"

导致无法进行 fio 机器压测,更改成如下即可

[tikv_servers]
TiKV1-1 ansible_host=172.16.30.87 deploy_dir=/data/tidb/deploy_tidb/tikv1 tikv_port=20191 labels="host=ip-172-16-30-87"
TiKV1-2 ansible_host=172.16.30.87 deploy_dir=/data/tidb/deploy_tidb/tikv2 tikv_port=20192 labels="host=ip-172-16-30-87"
TiKV2-1 ansible_host=172.16.30.88 deploy_dir=/data/tidb/deploy_tidb/tikv1 tikv_port=20191 labels="host=ip-172-16-30-88"
TiKV2-2 ansible_host=172.16.30.88 deploy_dir=/data/tidb/deploy_tidb/tikv2 tikv_port=20192 labels="host=ip-172-16-30-88"
TiKV3-1 ansible_host=172.16.30.89 deploy_dir=/data/tidb/deploy_tidb/tikv1 tikv_port=20191 labels="host=ip-172-16-30-89"
TiKV3-2 ansible_host=172.16.30.89 deploy_dir=/data/tidb/deploy_tidb/tikv2 tikv_port=20192 labels="host=ip-172-16-30-89"
  1. Start 集群报错

tidb.log显示如下

[warning] backoffer.maxSleep 20000ms is exceeded, errors:
region not found for key "mBootstra/xffpKey/x00/x00/x00/x00/xfb/x00/x00/x00/x00/x00/x00/x00s"
region not found for key "mBootstra/xffpKey/x00/x00/x00/x00/xfb/x00/x00/x00/x00/x00/x00/x00s"
region not found for key "mBootstra/xffpKey/x00/x00/x00/x00/xfb/x00/x00/x00/x00/x00/x00/x00s"
session.go:1232: [fatal] check bootstrapped err [tikv:9001]PD server timeout[try again later

该报错是因为原机器环境中存在 TiDB 集群,原配置文件中 PD 存在端口冲突问题导致报错,重新销毁集群,修改配置文件重装 TiDB 集群即可

http://www.cndba.cn/Marvinn/article/3271
http://www.cndba.cn/Marvinn/article/3271

清除集群数据,此操作会关闭 TiDB、Pump、TiKV、PD 服务,并清空 Pump、TiKV、PD 数据目录。http://www.cndba.cn/Marvinn/article/3271

$ ansible-playbook unsafe_cleanup_data.yml

销毁集群,此操作会关闭集群,并清空部署目录,若部署目录为挂载点,会报错,可忽略。

$ ansible-playbook unsafe_cleanup.yml
  1. bootstrap fio压测检查不通过

报错显示压测的结果值低于默认值,建议使用SSD硬盘,可以使用如下命令跳过该报错:

$ ansible-playbook bootstrap.yml --extra-vars "dev_mode=True"

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
Marvinn

Marvinn

关注

路漫漫其修远兮、吾将上下而求索

  • 99
    原创
  • 0
    翻译
  • 2
    转载
  • 36
    评论
  • 访问:458378次
  • 积分:449
  • 等级:中级会员
  • 排名:第12名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ