TiDB 集群文档
1.1、环境说明
部署目标机器若干
- 建议 4 台及以上,TiKV 至少 3 实例,且与 TiDB、PD 模块不位于同一主机。
- 推荐安装 CentOS 7.3 及以上版本 Linux 操作系统,x86_64 架构 (amd64)。
- 机器之间内网互通。
注:使用 Ansible 方式部署时,TiKV 及 PD 节点数据目录所在磁盘请使用 SSD 磁盘,否则无法通过检测。 如果仅验证功能,建议使用 Docker Compose 部署方案单机进行测试。
部署中控机一台:
- 中控机可以是部署目标机器中的某一台。
- 推荐安装 CentOS 7.3 及以上版本 Linux 操作系统(默认包含 Python 2.7)。
- 该机器需开放外网访问,用于下载 TiDB 及相关软件安装包
1.2、环境配置
以
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在中控机上创建 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]-----+中控机 TiDB-Ansible
以
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下,否则会遇到权限问题。
在中控机器上安装 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在中控机上配置部署机器 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在部署目标机器上安装 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 服务前,系统会 ntpdatehosts.ini文件中的ntp_server一次,默认为pool.ntp.org,也可替换为你的 NTP server。
在部署目标机器上配置 CPUfreq 调节器模式
为了让 CPU 发挥最大性能,请将 CPUfreq 调节器模式设置为
performance模式。你可以通过
cpupower命令查看系统支持的调节器模式:# cpupower frequency-info --governors analyzing CPU 0: available cpufreq governors: performance powersave本例中系统支持设置
performance和powersave模式。如果返回 “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在部署目标机器上添加数据盘 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格式化文件系统
# 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 集群,所以混合部署需要注意以下几点:
- 所有组件的部署路径都不能有冲突,需要改变安装路径以及改变默认端口
- 所有组件的端口都不能有冲突,为避免端口冲突,导致集群安装失败,所以要么关闭当前 TiDB 集群环境,要么手动更改 TiDB、TiKV、PD 等组件的端口,当前通过更改 TiDB 配置文件 inventory.ini 安装
- 使用 supervice 的方式来管理进程(默认是 systemd)
如何自定义端口
修改 inventory.ini 文件,在相应服务 IP 后添加以下主机变量即可:
| 组件 | 端口变量 | 默认端口 | 说明 |
|---|---|---|---|
| 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
确认
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执行
local_prepare.ymlplaybook,联网下载 TiDB binary 到中控机:ansible-playbook local_prepare.yml初始化系统环境,修改内核参数
ansible-playbook bootstrap.yml部署 TiDB 集群软件
ansible-playbook deploy.yml注:Grafana Dashboard 上的 Report 按钮可用来生成 PDF 文件,此功能依赖
fontconfig包和英文字体。如需使用该功能,登录 grafana_servers 机器,用以下命令安装:$ sudo yum install fontconfig open-sans-fonts启动 TiDB 集群
ansible-playbook start.yml
测试集群
测试连接 TiDB 集群,推荐在 TiDB 前配置负载均衡来对外统一提供 SQL 接口。
使用 MySQL 客户端连接测试,TCP 4000 端口是 TiDB 服务默认端口,混合部署,当前采用5000端口。
mysql -u root -h 172.16.30.86 -P 5000通过浏览器访问监控平台。
地址:
http://172.16.10.1:3002 默认帐号密码是:admin/admin
1.5、部署问题记录
1.5.1、混合部署注意事项
TiDB 集群部署,因公司原环境存在 TiDB 集群,采用混合部署,需要注意以下三点:
混合部署:修改配置文件 inventory.ini 自定义端口以及deploy安装目录
1、使用进程 supervise 守护进程
2、独立 deploy 安装目录
3、所有端口不冲突,自定义端口
另外,配置文件 inventory.ini 中 label 只针对 TiKV 组件起作用,其他组件起标记作用,并不影响集群的使用
1.5.2、部署问题记录
- 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"
- 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 集群即可
清除集群数据,此操作会关闭 TiDB、Pump、TiKV、PD 服务,并清空 Pump、TiKV、PD 数据目录。
$ ansible-playbook unsafe_cleanup_data.yml
销毁集群,此操作会关闭集群,并清空部署目录,若部署目录为挂载点,会报错,可忽略。
$ ansible-playbook unsafe_cleanup.yml
- bootstrap fio压测检查不通过
报错显示压测的结果值低于默认值,建议使用SSD硬盘,可以使用如下命令跳过该报错:
$ ansible-playbook bootstrap.yml --extra-vars "dev_mode=True"
版权声明:本文为博主原创文章,未经博主允许不得转载。



