准备机器
因为是测试没有按官方配置所以性能不高只是能使用,如果要达到高性能的话就按官方的硬件配置来
192.168.0.160(2核3g)中控机,目标机器
192.168.0.50(2核2g)目标机器
192.168.0.217(2核2g)目标机器
端口说明
TiDB 4000 应用及 DBA 工具访问通信端口
TiDB 10080 TiDB 状态信息上报通信端口
TiKV 20160 TiKV 通信端口
PD 2379 提供 TiDB 和 PD 通信端口
PD 2380 PD 集群节点间通信端口
Pump 8250 Pump 通信端口
Drainer 8249 Drainer 通信端口
Prometheus 9090 Prometheus 服务通信端口
Pushgateway 9091 TiDB,TiKV,PD 监控聚合和上报端口
Node_exporter 9100 TiDB 集群每个节点的系统信息上报通信端口
Blackbox_exporter 9115 Blackbox_exporter 通信端口,用于 TiDB 集群端口监控
Grafana 3000 Web 监控服务对外服务和客户端(浏览器)访问端口
Grafana 8686 grafana_collector 通信端口,用于将 Dashboard 导出为 PDF 格式
Kafka_exporter 9308 Kafka_exporter 通信端口,用于监控 binlog kafka 集群
软件版本
tidb-ansible: v3.0.2
在中控机上安装系统依赖包
以 root 用户登录中控机
#!/bin/bash
#coding:utf-8
#
## 在中控机安装依赖包
yum -y install epel-release git curl sshpass
yum -y install python2-pip
## 在中控机上创建 tidb 用户,并生成 ssh key
useradd -m -d /home/tidb tidb
echo "tidb321" | passwd --stdin tidb
cp -a /etc/sudoers{,.bak}
echo "tidb ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
su - tidb
生成密钥对
$ 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 项目上下载 master 分支的 TiDB-Ansible,默认的文件夹名称为 tidb-ansible
$ su - tidb
$ tag=v3.0.2
$ git clone -b $tag https://github.com/pingcap/tidb-ansible.git
在中控机器上安装 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 文件中。(这里有可能会报错,更新pip版本就可以了)
$ cd /home/tidb/tidb-ansible
$ sudo pip install -r ./requirements.txt -i https://mirrors.aliyun.com/pypi/simple
在中控机上配置部署机器 ssh 互信及 sudo 规则
$ cat hosts.ini
[servers]
192.168.0.160
192.168.0.217
192.168.0.50
[all:vars]
username = tidb
ntp_server = pool.ntp.org
执行以下命令,按提示输入部署目标机器 root 用户密码。该步骤将在部署目标机器上创建 tidb 用户,并配置 sudo 规则,配置中控机与部署目标机器之间的 ssh 互信。
$ ansible-playbook -i hosts.ini create_users.yml -u root -k
以 tidb 用户登录到中控机,ssh 登录目标机器 IP,不需要输入密码并登录成功,表示 ssh 互信配置成功。
$ ssh 172.17.0.50
以 tidb 用户登录到部署目标机器后,执行以下命令,不需要输入密码并切换到 root 用户,表示 tidb 用户 sudo 免密码配置成功。
$ sudo -su root
在部署目标机器上安装 NTP 服务
cd /home/tidb/tidb-ansible && \
ansible-playbook -i hosts.ini deploy_ntp.yml -u tidb -b
在部署目标机器上配置 CPUfreq 调节器模式
为了让 CPU 发挥最大性能,请将 CPUfreq 调节器模式设置为 performance 模式。如需了解 CPUfreq 的更多信息,可查看使用 CPUFREQ 调控器文档。(官方文档)
查看系统支持的调节器模式
执行以下 cpupower 命令,可查看系统支持的调节器模式:
注意:
本例中系统支持设置 performance 和 powersave 模式。如果返回 Not Available,表示当前系统不支持配置 CPUfreq,跳过该步骤即可。
cpupower frequency-info --governors
analyzing CPU 0:
available cpufreq governors: performance powersave
cpupower frequency-info --governors
analyzing CPU 0:
available cpufreq governors: Not Available
在部署目标机器上添加数据盘 ext4 文件系统挂载参数,如果分区是xfs格式也可以,具体可以看官网文档第八步
分配机器资源,编辑 inventory.ini 文件
## TiDB Cluster Part
[tidb_servers](测试其实一个节点就可以)
192.168.0.160
192.168.0.50
[tikv_servers]
192.168.0.160
192.168.0.50
192.168.0.217
[pd_servers](测试其实一个节点就可以)
192.168.0.160
192.168.0.50
192.168.0.217
[spark_master]
[spark_slaves]
[lightning_server]
[importer_server]
## Monitoring Part
# prometheus and pushgateway servers
[monitoring_servers]
192.168.0.160
[grafana_servers]
192.168.0.160
# node_exporter and blackbox_exporter servers
[monitored_servers]
192.168.0.160
192.168.0.50
192.168.0.217
[alertmanager_servers]
192.168.0.160
[kafka_exporter_servers]
## Binlog Part
[pump_servers]
[drainer_servers]
## Group variables
[pd_servers:vars]
# location_labels = ["zone","rack","host"]
## Global variables
[all:vars]
deploy_dir = /home/tidb/deploy
## Connection
# ssh via normal user
ansible_user = tidb
cluster_name = test-cluster
tidb_version = v3.0.2
# process supervision, [systemd, supervise]
process_supervision = systemd
timezone = Asia/Shanghai
enable_firewalld = False
# check NTP service
enable_ntpd = True
set_hostname = False
## binlog trigger
enable_binlog = False
# 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 = ""
# zookeeper address of kafka cluster for monitoring, example:
# zookeeper_addrs = "192.168.0.11:2181,192.168.0.12:2181,192.168.0.13:2181"
zookeeper_addrs = ""
# enable TLS authentication in the TiDB cluster
enable_tls = False
# KV mode
deploy_without_tidb = False
# wait for region replication complete before start tidb-server.
wait_replication = True
# 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
执行以下命令如果所有 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.yml playbook,联网下载 TiDB binary 到中控机:
$ ansible-playbook local_prepare.yml
这里由于我的配置不够:cpu核心数(我的为单核心,官方需要8核心)。磁盘空间太小,内存太小等等会检测不通过,所以需要修改bootstrap.yml文件把检测任务注释掉,真正的生产环境中最痛通过所有的检测,否则会有性能问题。
- name: check system
hosts: all
any_errors_fatal: true
roles:
- check_system_static
# - { role: check_system_optional, when: not dev_mode|default(false) }
- name: tikv_servers machine benchmark
hosts: tikv_servers
gather_facts: false
roles:
# - { role: machine_benchmark, when: not dev_mode|default(false) }
初始化系统环境,修改内核参数。
ansible-playbook bootstrap.yml
部署 TiDB 集群软件。(安装时间很长不知道是硬件配置低的问题还是啥问题)
ansible-playbook deploy.yml
启动 TiDB 集群
$ ansible-playbook start.yml