tidb 安装文档

一、TiDB-Ansible 部署方案

  • centos7.3 以上
  • 中控机是用来控制整个 tidb 集群的

1. 中控机 - 安装系统依赖包

  1. # 在中控机上安装系统依赖包
  2. sudo yum -y install epel-release git curl sshpass
  3. sudo yum -y install python-pip

2. 中控机 - 创建 tidb 用户,并生成 ssh key

  1. # 配置免密, 所有主机
  2. sudo useradd -m -d /home/tidb tidb
  3. sudo usermod -a -G wheel tidb
  4. # 修改密码
  5. sudo passwd tidb
  6. # 登录 tidb 账号
  7. sudo su tidb
  8. # 创建 tidb 用户 ssh key, 提示 Enter passphrase 时直接回车即可。执行成功后,ssh 私钥文件为
  9. ssh-keygen -t rsa

3. 中控机 - 下载 TiDB-Ansible 和安装依赖

  1. # 登录 tidb 用户
  2. sudo su tidb
  3. # 下载 2.1 版本
  4. git clone -b tag-v3.0.1-v1 https://gitee.com/techonline/tidb-ansible.git
  5. # 在中控机器上安装 Ansible 及其依赖
  6. cd ~/app/tidb-ansible
  7. sudo pip install -r ./requirements.txt
  8. # 验证
  9. ansible --version
  10. ansible 2.7.11

4. 中控机 - 配置部署机器 ssh 互信及 sudo 规则

  1. # 在中控机上配置部署机器, 写入需要部署的 主机
  2. vi hosts.ini
  3. [servers]
  4. tidb-node1
  5. tidb-node2
  6. tidb-node3
  7. tidb-node4
  8. tidb-node5
  9. tidb-node6
  10. [all:vars]
  11. username = tidb
  12. ntp_server = pool.ntp.org
  13. # ssh 免密配置
  14. ## 方法 1. 手动方式, 见系统环境
  15. ssh-copy-id -i ~/.ssh/id_rsa.pub tidb-node1
  16. ssh-copy-id -i ~/.ssh/id_rsa.pub tidb-node2
  17. ssh-copy-id -i ~/.ssh/id_rsa.pub tidb-node3
  18. ......
  19. ssh-copy-id -i ~/.ssh/id_rsa.pub tidb-nodeN
  20. ## 方法 2. 登录 tidb 服务器手动创建
  21. vim ~/.ssh/authorized_keys
  22. # 写入
  23. ~/.ssh/id_rsa.pub
  24. # 修改权限
  25. chmod 600 ~/.ssh/authorized_keys
  26. ## 验证是否免密
  27. ssh tidb@[tidb-node1]

5. 中控机 - 在部署目标机安装 NTP 服务

  1. # 在中控机使用脚本在 目标机器上安装 NTP 服务
  2. cd ~/tidb-ansible
  3. ansible-playbook -i hosts.ini deploy_ntp.yml -u tidb -b
  4. # 检测 ntp 是否开启
  5. sudo systemctl status ntpd.service
  6. # 开机启动
  7. sudo systemctl enable ntpd.service
  8. # 服务器重启
  9. sudo systemctl restart ntpd.service
  10. sudo systemctl stop ntpd.service
  11. sudo ntpdate pool.ntp.org
  12. sudo systemctl start ntpd.service
  13. # 执行 ntpstat 命令,输出 synchronised to NTP server(正在与 NTP server 同步)表示在正常同步:
  14. ntpstat
  15. synchronised to NTP server (85.199.214.101) at stratum 2
  16. time correct to within 91 ms
  17. polling server every 1024 s
  18. # 如需要修改 ntp 配置
  19. /etc/ntp.conf

6. 中控机 - 在部署目标机配置 CPUfreq 调节器模式

  • 为了让 CPU 发挥最大性能,请将 CPUfreq 调节器模式设置为 performance 模式
  • 如果系统不支持则跳过此步骤
  1. # 1. 查看当前系统的 CPUfreq 调节器模式
  2. cpupower frequency-info --policy
  3. ## 返回结果: 表示未设置
  4. analyzing CPU 0:
  5. Unable to determine current polic
  6. # 2. cpupower 命令查看系统支持的调节器模式
  7. cpupower frequency-info --governors
  8. ## 返回结果如: Not Available 表示当前系统不支持配置 CPUfreq,跳过此步骤
  9. analyzing CPU 0:
  10. available cpufreq governors: Not Available
  11. ## 返回结果如: performance powersave,表示支持这两种模式
  12. analyzing CPU 0:
  13. available cpufreq governors: performance powersave
  14. # 3. 设置 CPUfreq 调节器模式为 performance
  15. cpupower frequency-set --governor performance
  16. # 4. 若系统支持 performance 模式,则在中控机做批量设置
  17. ansible -i hosts.ini all -m shell -a "cpupower frequency-set --governor performance" -u tidb -b

7. 部署目标机 - 添加数据盘 ext4 文件系统挂载参数

8. 中控机 - 分配机器资源,编辑 inventory.ini 文件

  1. cd ~/app/tidb-ansible
  2. vim inventory.ini
  3. ## TiDB Cluster Part (这里必须写 ip 地址)
  4. # tidb_servers
  5. [tidb_servers]
  6. tidb-node1 ansible_host=172.16.20.81
  7. tidb-node2 ansible_host=172.16.20.82
  8. tidb-node3 ansible_host=172.16.20.83
  9. tidb-node4 ansible_host=172.16.20.97
  10. tidb-node5 ansible_host=172.16.20.98
  11. tidb-node6 ansible_host=172.16.20.99
  12. # tikv_servers
  13. [tikv_servers]
  14. ## 配置方法一: 单机单 TiKV 实例集群拓扑, 配置方法
  15. tidb-node1 ansible_host=172.16.20.81
  16. tidb-node2 ansible_host=172.16.20.82
  17. tidb-node3 ansible_host=172.16.20.83
  18. ### 配置方法二: 单机多 TiKV 实例集群拓扑
  19. # 详见(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)
  20. # 调优(https://pingcap.com/docs-cn/v3.0/reference/performance/tune-tikv/)
  21. ## 第一步: 单节点 tikv 进程数量
  22. # 详见: raftstore 参数, 根据磁盘容量计算出, 一共需要多少个 tikv 数量
  23. # 根据配置, 定义单台服务器, tikv 的数量为 5 个.
  24. 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"
  25. 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"
  26. 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"
  27. 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"
  28. 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"
  29. 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"
  30. 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"
  31. 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"
  32. 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"
  33. ## 第二步: 配置内存和磁盘(修改 conf/tikv.yml 参数)
  34. # titan 存储引擎
  35. titan:
  36. enabled: true
  37. max-background-gc: 4
  38. storage:
  39. ## RocksDB 使用 block cache 来缓存未压缩的数据块。较大的 block cache 可以加快读取速度。
  40. # 推荐开启 `shared block cache` 参数。这样只需要设置全部缓存大小,使配置过程更加方便。
  41. # 要在单个物理机上部署多个 TiKV 节点,需要显式配置该参数。否则,TiKV 中可能会出现 OOM 错误。
  42. # 推荐设置:常情况下应设置为系统全部内存的 30%-50%。
  43. block-cache:
  44. shared: true
  45. capacity: "50GB"
  46. readpool:
  47. # 多实例情况下,需要修改 tidb-ansible/conf/tikv.yml 中 high-concurrency、normal-concurrency 和 low-concurrency 三个参数:
  48. # 推荐设置:TiKV 实例数量 * 参数值 = CPU 核心数量 * 0.8
  49. coprocessor:
  50. # Notice: if CPU_NUM > 8, default thread pool size for coprocessors
  51. # will be set to CPU_NUM * 0.8.
  52. # high-concurrency: 8
  53. # normal-concurrency: 8
  54. # low-concurrency: 8
  55. raftstore:
  56. # 每个 TiKV 实例, 占用磁盘大小。 当如果多个 TiKV 实例部署在同一块物理磁盘上,需要修改 capacity 参数
  57. # 推荐配置:capacity = 磁盘总容量 / TiKV 实例数量, 如果没有设置,则使用磁盘容量。
  58. # capacity: "2048GB"
  59. # pd_servers
  60. [pd_servers]
  61. tidb-node4 ansible_host=172.16.20.97
  62. tidb-node5 ansible_host=172.16.20.98
  63. tidb-node6 ansible_host=172.16.20.99
  64. ## Monitoring Part (prometheus)
  65. # node_exporter and blackbox_exporter servers( 抽取日志服务器 )
  66. [monitoring_servers]
  67. tidb-node1 ansible_host=172.16.20.81
  68. tidb-node2 ansible_host=172.16.20.82
  69. tidb-node3 ansible_host=172.16.20.83
  70. tidb-node4 ansible_host=172.16.20.97
  71. tidb-node5 ansible_host=172.16.20.98
  72. tidb-node6 ansible_host=172.16.20.99
  73. [grafana_servers]
  74. tidb-node5 ansible_host=172.16.20.98
  75. # prometheus and pushgateway servers
  76. [monitoring_servers]
  77. tidb-node5 ansible_host=172.16.20.98
  78. [alertmanager_servers]
  79. tidb-node5 ansible_host=172.16.20.98
  80. # 如果已经了则使用 alertmanager_host:alertmanager_port
  81. ## Group variables
  82. [pd_servers:vars]
  83. # location_labels = ["zone","rack","host"]
  84. location_labels = ["host"]
  85. # 1. 编辑部署配置文件
  86. vim inventory.ini
  87. ## Global variables, 部署数据目录
  88. [all:vars]
  89. deploy_dir = /opt/app/tidb/deploy
  90. ## ssh via normal user
  91. ansible_user = tidb
  92. ## 集群名称
  93. cluster_name = tidb-cluster-1
  94. ## 集群版本
  95. tidb_version = v3.0.1
  96. # 2. 检测
  97. ## 检测 tidb 用户 ssh 互信配置是否成功
  98. ansible -i inventory.ini all -m shell -a 'whoami'
  99. ## 检测 tidb 用户 sudo 免密码配置成功
  100. ansible -i inventory.ini all -m shell -a 'whoami' -b
  101. # 3. 执行 local_prepare.yml playbook,联网下载 TiDB binary 到中控机
  102. ansible-playbook local_prepare.yml -f 10
  103. # 4. 初始化系统环境,修改内核参数
  104. ansible-playbook bootstrap.yml
  105. # 5. 部署 TiDB 集群软件
  106. ansible-playbook deploy.yml
  107. # 6. 启动 TiDB 集群
  108. ansible-playbook start.yml

tidb 错误处理

  1. 1. NTP 检测关闭
  2. 错误内容
  3. TASK [check_system_dynamic : Preflight check - NTP service]
  4. 编辑配置
  5. vim roles/check_system_dynamic/tasks/main.yml
  6. 如下注释
  7. #- name: Preflight check - Get NTP service status
  8. # shell: ntpstat | grep -w synchronised | wc -l
  9. # register: ntp_st
  10. # changed_when: false
  11. #- name: Preflight check - NTP service
  12. # fail:
  13. # 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 ."
  14. # when:
  15. # - enable_ntpd
  16. # - ntp_st.stdout|int != 1
  17. 2. swap 内存检测关闭
  18. 编辑配置
  19. vim roles/check_system_dynamic/tasks/main.yml
  20. #- name: Preflight check - Check swap
  21. # fail:
  22. # msg: "Swap is on, for best performance, turn swap off"
  23. # when: ansible_swaptotal_mb != 0
  24. 3. 如果是非 SSD 测试的话 ,最好将如下的内容注释掉
  25. 编辑配置
  26. vim bootstrap.yml
  27. 如下注释
  28. - name: tikv_servers machine benchmark
  29. hosts: tikv_servers
  30. gather_facts: false
  31. roles:
  32. # - { role: machine_benchmark, when: not dev_mode }