Technical note

TiDB部署笔记

官网

磁盘

vi /etc/fstab
UUID=c51eb23b-195c-4061-92a9-3fad812cc12f /data ext4 defaults,nodelalloc,noatime 0 2
mkdir /data
mount -a
mount -t ext4

Swap

echo "vm.swappiness = 0">> /etc/sysctl.conf
swapoff -a && swapon -a
sysctl -p

vi /etc/fstab # 注释掉swap一行
swapoff -a

free # 验证

ntp

yum install ntp ntpdate -y
systemctl start ntpd.service
systemctl enable ntpd.service
ntpstat

操作系统优化

cat /sys/kernel/mm/transparent_hugepage/enabled


cat /sys/block/vdc/queue/scheduler
cat /sys/block/vdd/queue/scheduler

udevadm info --name=/dev/vdc | grep ID_SERIAL
udevadm info --name=/dev/vdd | grep ID_SERIAL

cpupower frequency-info --policy

-----------------

tuned-adm list
mkdir /etc/tuned/balanced-tidb-optimal/
vi /etc/tuned/balanced-tidb-optimal/tuned.conf
[main]
include=balanced

[cpu]
governor=performance

[vm]
transparent_hugepages=never

[disk]
devices_udev_regex=(ID_SERIAL=vos-5ef7r1pv)|(ID_SERIAL=vos-od1sacxs)
elevator=noop

tuned-adm profile balanced-tidb-optimal



echo "fs.file-max = 1000000">> /etc/sysctl.conf
echo "net.core.somaxconn = 32768">> /etc/sysctl.conf
echo "net.ipv4.tcp_tw_recycle = 0">> /etc/sysctl.conf
echo "net.ipv4.tcp_syncookies = 0">> /etc/sysctl.conf
echo "vm.overcommit_memory = 1">> /etc/sysctl.conf
sysctl -p

cat << EOF >>/etc/security/limits.conf
tidb           soft    nofile          1000000
tidb           hard    nofile          1000000
tidb           soft    stack          32768
tidb           hard    stack          32768
EOF

# 禁用透明大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

# 安装numactl
yum install numactl -y

# 安装irqbalance
yum install irqbalance -y
systemctl enable irqbalance && systemctl start irqbalance

ssh互信

ssh-copy-id root@10.193.50.17
ssh-copy-id root@10.193.50.18
ssh-copy-id root@10.193.50.19

TiUP

curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
which tiup
tiup cluster
tiup update --self && tiup update cluster
tiup --binary cluster
tiup cluster template > topology.yaml
vi topology.yaml

global:
  user: "tidb"
  ssh_port: 22
  deploy_dir: "/data/tidb-deploy"
  data_dir: "/data/tidb-data"

pd_servers:
  - host: 10.193.50.17
  - host: 10.193.50.18
  - host: 10.193.50.19

tidb_servers:
  - host: 10.193.50.17
  - host: 10.193.50.18
  - host: 10.193.50.19

tikv_servers:
  - host: 10.193.50.17
  - host: 10.193.50.18
  - host: 10.193.50.19

monitoring_servers:
  - host: 10.193.50.17

grafana_servers:
  - host: 10.193.50.17

alertmanager_servers:
  - host: 10.193.50.17

tiup cluster check ./topology.yaml --user root
tiup cluster check ./topology.yaml --apply --user root

tiup cluster deploy tidb-eip v5.3.0 ./topology.yaml --user root

HaProxy

yum install haproxy -y

vi /etc/haproxy/haproxy.cfg

global                                     # 全局配置。
   log         127.0.0.1 local2            # 定义全局的 syslog 服务器,最多可以定义两个。
   chroot      /var/lib/haproxy            # 更改当前目录并为启动进程设置超级用户权限,从而提高安全性。
   pidfile     /var/run/haproxy.pid        # 将 HAProxy 进程的 PID 写入 pidfile。
   maxconn     4096                        # 单个 HAProxy 进程可接受的最大并发连接数,等价于命令行参数 "-n"。
   # nbthread    48                          # 最大线程数。线程数的上限与 CPU 数量相同。
   user        haproxy                     # 同 UID 参数。
   group       haproxy                     # 同 GID 参数,建议使用专用用户组。
   daemon                                  # 让 HAProxy 以守护进程的方式工作于后台,等同于命令行参数“-D”的功能。当然,也可以在命令行中用“-db”参数将其禁用。
   stats socket /var/lib/haproxy/stats     # 统计信息保存位置。

defaults                                   # 默认配置。
   log global                              # 日志继承全局配置段的设置。
   retries 2                               # 向上游服务器尝试连接的最大次数,超过此值便认为后端服务器不可用。
   timeout connect  2s                     # HAProxy 与后端服务器连接超时时间。如果在同一个局域网内,可设置成较短的时间。
   timeout client 30000s                   # 客户端与 HAProxy 连接后,数据传输完毕,即非活动连接的超时时间。
   timeout server 30000s                   # 服务器端非活动连接的超时时间。

listen admin_stats                         # frontend 和 backend 的组合体,此监控组的名称可按需进行自定义。
   bind 0.0.0.0:8080                       # 监听端口。
   mode http                               # 监控运行的模式,此处为 `http` 模式。
   option httplog                          # 开始启用记录 HTTP 请求的日志功能。
   maxconn 10                              # 最大并发连接数。
   stats refresh 30s                       # 每隔 30 秒自动刷新监控页面。
   stats uri /haproxy                      # 监控页面的 URL。
   stats realm HAProxy                     # 监控页面的提示信息。
   stats auth admin:pingcap123             # 监控页面的用户和密码,可设置多个用户名。
   stats hide-version                      # 隐藏监控页面上的 HAProxy 版本信息。
   stats  admin if TRUE                    # 手工启用或禁用后端服务器(HAProxy 1.4.9 及之后版本开始支持)。

listen tidb-cluster                        # 配置 database 负载均衡。
   bind 0.0.0.0:3390                       # 浮动 IP 和 监听端口。
   mode tcp                                # HAProxy 要使用第 4 层的传输层。
   balance leastconn                       # 连接数最少的服务器优先接收连接。`leastconn` 建议用于长会话服务,例如 LDAP、SQL、TSE 等,而不是短会话协议,如 HTTP。该算法是动态的,对于启动慢的服务器,服务器权重会在运行中作调整。
   server tidb-1 10.193.50.17:4000 check inter 2000 rise 2 fall 3       # 检测 4000 端口,检测频率为每 2000 毫秒一次。如果 2 次检测为成功,则认为服务器可用;如果 3 次检测为失败,则认为服务器不可用。
   server tidb-2 10.193.50.18:4000 check inter 2000 rise 2 fall 3
   server tidb-3 10.193.50.19:4000 check inter 2000 rise 2 fall 3


haproxy -f /etc/haproxy/haproxy.cfg
systemctl enable haproxy
systemctl start haproxy

启动

tiup cluster list
tiup cluster display tidb-eip
tiup cluster start tidb-eip

验证

PD

http://10.193.50.17:2379/dashboard

Grafana

http://10.193.50.17:3000

MySQL

mysql -uroot -p -h10.193.50.17 -P3390 select tidb_version()\G