tidb 安装文档
一、TiDB-Ansible 部署方案
- centos7.3 以上
- 中控机是用来控制整个 tidb 集群的
1. 中控机 - 安装系统依赖包
# 在中控机上安装系统依赖包sudo yum -y install epel-release git curl sshpasssudo yum -y install python-pip
2. 中控机 - 创建 tidb 用户,并生成 ssh key
# 配置免密, 所有主机sudo useradd -m -d /home/tidb tidbsudo usermod -a -G wheel tidb# 修改密码sudo passwd tidb# 登录 tidb 账号sudo su tidb# 创建 tidb 用户 ssh key, 提示 Enter passphrase 时直接回车即可。执行成功后,ssh 私钥文件为ssh-keygen -t rsa
3. 中控机 - 下载 TiDB-Ansible 和安装依赖
# 登录 tidb 用户sudo su tidb# 下载 2.1 版本git clone -b tag-v3.0.1-v1 https://gitee.com/techonline/tidb-ansible.git# 在中控机器上安装 Ansible 及其依赖cd ~/app/tidb-ansiblesudo pip install -r ./requirements.txt# 验证ansible --version ansible 2.7.11
4. 中控机 - 配置部署机器 ssh 互信及 sudo 规则
# 在中控机上配置部署机器, 写入需要部署的 主机vi hosts.ini[servers]tidb-node1tidb-node2tidb-node3tidb-node4tidb-node5tidb-node6[all:vars]username = tidbntp_server = pool.ntp.org# ssh 免密配置## 方法 1. 手动方式, 见系统环境ssh-copy-id -i ~/.ssh/id_rsa.pub tidb-node1ssh-copy-id -i ~/.ssh/id_rsa.pub tidb-node2ssh-copy-id -i ~/.ssh/id_rsa.pub tidb-node3......ssh-copy-id -i ~/.ssh/id_rsa.pub tidb-nodeN## 方法 2. 登录 tidb 服务器手动创建vim ~/.ssh/authorized_keys# 写入~/.ssh/id_rsa.pub# 修改权限chmod 600 ~/.ssh/authorized_keys## 验证是否免密ssh tidb@[tidb-node1]
5. 中控机 - 在部署目标机安装 NTP 服务
# 在中控机使用脚本在 目标机器上安装 NTP 服务cd ~/tidb-ansibleansible-playbook -i hosts.ini deploy_ntp.yml -u tidb -b# 检测 ntp 是否开启sudo systemctl status ntpd.service# 开机启动sudo systemctl enable ntpd.service# 服务器重启sudo systemctl restart ntpd.servicesudo systemctl stop ntpd.servicesudo ntpdate pool.ntp.orgsudo systemctl start ntpd.service# 执行 ntpstat 命令,输出 synchronised to NTP server(正在与 NTP server 同步)表示在正常同步:ntpstatsynchronised to NTP server (85.199.214.101) at stratum 2 time correct to within 91 ms polling server every 1024 s# 如需要修改 ntp 配置/etc/ntp.conf
6. 中控机 - 在部署目标机配置 CPUfreq 调节器模式
- 为了让 CPU 发挥最大性能,请将 CPUfreq 调节器模式设置为 performance 模式
- 如果系统不支持则跳过此步骤
# 1. 查看当前系统的 CPUfreq 调节器模式cpupower frequency-info --policy## 返回结果: 表示未设置analyzing CPU 0: Unable to determine current polic# 2. cpupower 命令查看系统支持的调节器模式cpupower frequency-info --governors## 返回结果如: Not Available 表示当前系统不支持配置 CPUfreq,跳过此步骤analyzing CPU 0: available cpufreq governors: Not Available## 返回结果如: performance powersave,表示支持这两种模式analyzing CPU 0: available cpufreq governors: performance powersave# 3. 设置 CPUfreq 调节器模式为 performancecpupower frequency-set --governor performance# 4. 若系统支持 performance 模式,则在中控机做批量设置ansible -i hosts.ini all -m shell -a "cpupower frequency-set --governor performance" -u tidb -b
7. 部署目标机 - 添加数据盘 ext4 文件系统挂载参数
8. 中控机 - 分配机器资源,编辑 inventory.ini 文件
cd ~/app/tidb-ansiblevim inventory.ini## TiDB Cluster Part (这里必须写 ip 地址)# tidb_servers[tidb_servers]tidb-node1 ansible_host=172.16.20.81tidb-node2 ansible_host=172.16.20.82tidb-node3 ansible_host=172.16.20.83tidb-node4 ansible_host=172.16.20.97tidb-node5 ansible_host=172.16.20.98tidb-node6 ansible_host=172.16.20.99# tikv_servers[tikv_servers]## 配置方法一: 单机单 TiKV 实例集群拓扑, 配置方法tidb-node1 ansible_host=172.16.20.81tidb-node2 ansible_host=172.16.20.82tidb-node3 ansible_host=172.16.20.83### 配置方法二: 单机多 TiKV 实例集群拓扑# 详见(https://pingcap.com/docs-cn/v3.0/how-to/deploy/orchestrated/ansible/#%E5%8D%95%E6%9C%BA%E5%A4%9A-tikv-%E5%AE%9E%E4%BE%8B%E9%9B%86%E7%BE%A4%E6%8B%93%E6%89%91)# 调优(https://pingcap.com/docs-cn/v3.0/reference/performance/tune-tikv/)## 第一步: 单节点 tikv 进程数量# 详见: raftstore 参数, 根据磁盘容量计算出, 一共需要多少个 tikv 数量# 根据配置, 定义单台服务器, tikv 的数量为 5 个.tidb-node1-1 ansible_host=172.16.20.81 deploy_dir=/opt/app/tidb/deploy1 tikv_port=20171 tikv_status_port=20181 labels="host=tikv1"tidb-node1-2 ansible_host=172.16.20.81 deploy_dir=/opt/app/tidb/deploy2 tikv_port=20172 tikv_status_port=20182 labels="host=tikv1"tidb-node1-3 ansible_host=172.16.20.81 deploy_dir=/opt/app/tidb/deploy3 tikv_port=20173 tikv_status_port=20183 labels="host=tikv1"tidb-node2-1 ansible_host=172.16.20.82 deploy_dir=/opt/app/tidb/deploy1 tikv_port=20171 tikv_status_port=20181 labels="host=tikv2"tidb-node2-2 ansible_host=172.16.20.82 deploy_dir=/opt/app/tidb/deploy2 tikv_port=20172 tikv_status_port=20182 labels="host=tikv2"tidb-node2-3 ansible_host=172.16.20.82 deploy_dir=/opt/app/tidb/deploy3 tikv_port=20173 tikv_status_port=20183 labels="host=tikv2"tidb-node3-1 ansible_host=172.16.20.83 deploy_dir=/opt/app/tidb/deploy1 tikv_port=20171 tikv_status_port=20181 labels="host=tikv3"tidb-node3-2 ansible_host=172.16.20.83 deploy_dir=/opt/app/tidb/deploy2 tikv_port=20172 tikv_status_port=20182 labels="host=tikv3"tidb-node3-3 ansible_host=172.16.20.83 deploy_dir=/opt/app/tidb/deploy3 tikv_port=20173 tikv_status_port=20183 labels="host=tikv3"## 第二步: 配置内存和磁盘(修改 conf/tikv.yml 参数)# titan 存储引擎titan: enabled: true max-background-gc: 4storage: ## RocksDB 使用 block cache 来缓存未压缩的数据块。较大的 block cache 可以加快读取速度。 # 推荐开启 `shared block cache` 参数。这样只需要设置全部缓存大小,使配置过程更加方便。 # 要在单个物理机上部署多个 TiKV 节点,需要显式配置该参数。否则,TiKV 中可能会出现 OOM 错误。 # 推荐设置:常情况下应设置为系统全部内存的 30%-50%。 block-cache: shared: true capacity: "50GB"readpool: # 多实例情况下,需要修改 tidb-ansible/conf/tikv.yml 中 high-concurrency、normal-concurrency 和 low-concurrency 三个参数: # 推荐设置:TiKV 实例数量 * 参数值 = CPU 核心数量 * 0.8 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: 8raftstore: # 每个 TiKV 实例, 占用磁盘大小。 当如果多个 TiKV 实例部署在同一块物理磁盘上,需要修改 capacity 参数 # 推荐配置:capacity = 磁盘总容量 / TiKV 实例数量, 如果没有设置,则使用磁盘容量。 # capacity: "2048GB"# pd_servers[pd_servers]tidb-node4 ansible_host=172.16.20.97tidb-node5 ansible_host=172.16.20.98tidb-node6 ansible_host=172.16.20.99## Monitoring Part (prometheus)# node_exporter and blackbox_exporter servers( 抽取日志服务器 )[monitoring_servers]tidb-node1 ansible_host=172.16.20.81tidb-node2 ansible_host=172.16.20.82tidb-node3 ansible_host=172.16.20.83tidb-node4 ansible_host=172.16.20.97tidb-node5 ansible_host=172.16.20.98tidb-node6 ansible_host=172.16.20.99[grafana_servers]tidb-node5 ansible_host=172.16.20.98# prometheus and pushgateway servers[monitoring_servers]tidb-node5 ansible_host=172.16.20.98[alertmanager_servers]tidb-node5 ansible_host=172.16.20.98# 如果已经了则使用 alertmanager_host:alertmanager_port## Group variables[pd_servers:vars]# location_labels = ["zone","rack","host"]location_labels = ["host"]# 1. 编辑部署配置文件vim inventory.ini ## Global variables, 部署数据目录 [all:vars] deploy_dir = /opt/app/tidb/deploy ## ssh via normal user ansible_user = tidb ## 集群名称 cluster_name = tidb-cluster-1 ## 集群版本 tidb_version = v3.0.1# 2. 检测## 检测 tidb 用户 ssh 互信配置是否成功ansible -i inventory.ini all -m shell -a 'whoami'## 检测 tidb 用户 sudo 免密码配置成功ansible -i inventory.ini all -m shell -a 'whoami' -b# 3. 执行 local_prepare.yml playbook,联网下载 TiDB binary 到中控机ansible-playbook local_prepare.yml -f 10# 4. 初始化系统环境,修改内核参数ansible-playbook bootstrap.yml# 5. 部署 TiDB 集群软件ansible-playbook deploy.yml# 6. 启动 TiDB 集群ansible-playbook start.yml
tidb 错误处理
1. NTP 检测关闭错误内容 TASK [check_system_dynamic : Preflight check - NTP service]编辑配置 vim roles/check_system_dynamic/tasks/main.yml如下注释#- name: Preflight check - Get NTP service status# shell: ntpstat | grep -w synchronised | wc -l# register: ntp_st# changed_when: false#- name: Preflight check - NTP service# fail:# msg: "Make sure NTP service is running and ntpstat is synchronised to NTP server. See https://github.com/pingcap/docs/blob/master/op-guide/ansible-deployment.md#how-to-check-whether-the-ntp-service-is-normal ."# when:# - enable_ntpd# - ntp_st.stdout|int != 12. swap 内存检测关闭编辑配置 vim roles/check_system_dynamic/tasks/main.yml#- name: Preflight check - Check swap# fail:# msg: "Swap is on, for best performance, turn swap off"# when: ansible_swaptotal_mb != 03. 如果是非 SSD 测试的话 ,最好将如下的内容注释掉 编辑配置 vim bootstrap.yml如下注释- name: tikv_servers machine benchmark hosts: tikv_servers gather_facts: false roles:# - { role: machine_benchmark, when: not dev_mode }