TiDB Ansible方式部署集群
一.在控制机上安装系统依赖包
1. 以root 用户进行登录
CentS 7 系统 执行
yum -y install epel-release git curl sshpass && \
yum -y install python2-pip
Ubuntu 执行
apt-get -y install git curl sshpass python-pip
二.在控制机上创建tidb用户并 生成ssh key
1. 以 root 用户 登录控制机 并创建用户
useradd -m -d /home/tidb tidb
2. 设置tidb 用户密码
passwd tidb
3. 配置 tidb 用户 sudo 免密码
visudo
# 然后在最后一行加上
tidb ALL=(ALL) NOPASSWD: ALL
4. 生产 SSH key
# 执行 su 命令,从 root 用户切换到 tidb 用户下。
su - tidb
ssh-keygen -t rsa
# 提示 Enter passphrase 时直接回车即可。执行成功后,
# SSH 私钥文件为 /home/tidb/.ssh/id_rsa,SSH 公钥文件为 /home/tidb/.ssh/id_rsa.pub。
三. 在控制机上下载TIDB ansible
1. 以 tidb 用户登录中控机并进入 /home/tidb 目录, 必须要在该目录 不然可能会出现无权限的问题。使用以下命令从 TiDB Ansible 项目上下载 TiDB Ansible 4.0 相应 TAG 版本,默认的文件夹名称为 tidb-ansible。
git clone -b $tag https://github.com/pingcap/tidb-ansible.git
# $tag 就是对应的版本号
四.在控制机上安装TIDB ansible及依赖
1. 以tidb 用户登录 控制机 在控制机上安装 TIDB ansible及依赖
cd /home/tidb/tidb-ansible && \
sudo pip install -r ./requirements.txt
2. 查看 ansible 版本
ansible --version
ansible 2.7.11
五.在控制机上配置 部署机器SSH互信
1.以 tidb 用户登录控制器机 然后将需要部署的机器IP添加到 hosts.ini 文件的 [servers] 区块下
cd /home/tidb/tidb-ansible && \
vi hosts.ini
[servers]
172.16.5.52
172.16.4.29
172.16.4.56
172.16.4.30
172.16.4.224
172.16.5.208
[all:vars]
username = tidb
ntp_server = pool.ntp.org
2. 执行下面命令 将 需要部署的目标机器上 创建tidb 用户 并配置互信和sudo规则
ansible-playbook -i hosts.ini create_users.yml -u root -k
3. 手工互信方法
1. 以root 用户登录依次登录到目标机器中 创建 tidb 用户
useradd tidb && \
passwd tidb
2.配置sudo 免密码
执行 visudo 在最后一行输入 tidb ALL=(ALL) NOPASSWD: ALL
3. 在以 root 用户登录 控制机 部署互信
ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.5.52
# IP 需要修改为你的目标机器IP地址
4. 通过ssh 链接进行测试
六.在目标机器上安装ntp服务
1. 以 tidb 用户 登录控制机 执行一下命令 将目标机器上部署 ntp服务
cd /home/tidb/tidb-ansible && \
ansible-playbook -i hosts.ini deploy_ntp.yml -u tidb -b
2. 执行下面命令, 检测 ntp 服务是否正常运行
1. sudo systemctl status ntpd.service
# 如果输出runing 表示正常运行
2. ntpstat
# 如果输出 synchronised to NTP server 表示正常同步
七.在目标机器上配置CPUfrep 调解模式
1. 执行 cpupower 命令 查看系统支持模式
1. cpupower frequency-info --governors
analyzing CPU 0:
available cpufreq governors: performance powersave
# 如果返回 Not Available 则直接跳过 第七步
2. 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.
3. 修改 模式
cpupower frequency-set --governor performance
2. 也可以在控制机器上批量修改, 前提是 目标前期满足 七.1.1 的条件
ansible -i hosts.ini all -m shell -a "cpupower frequency-set --governor performance" -u tidb -b
八.在目标机器上添加磁盘
使用 root 用户登录目标机器,将部署目标机器数据盘格式化成 ext4 文件系统,挂载时添加 nodelalloc 和 noatime 挂载参数。nodelalloc 是必选参数,否则 Ansible 安装时检测无法通过;noatime 是可选建议参数。
注意:
如果你的数据盘已经格式化成 ext4 并挂载了磁盘,可先执行 umount /dev/nvme0n1p1 命令卸载,从编辑 /etc/fstab 文件步骤开始执行,添加挂载参数重新挂载即可。 以 /dev/nvme0n1 数据盘为例,具体操作步骤如下:
1. 查看数据盘
fdisk -l
Disk /dev/nvme0n1: 1000 GB # 如果没有这个直接跳过第八步
2. 创建分区表
parted -s -a optimal /dev/nvme0n1 mklabel gpt -- mkpart primary ext4 1 -1
3.格式化文件系统
mkfs.ext4 /dev/nvme0n1p1
4.查看数据盘分区uuid
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
└─nvme0n1p1 ext4 c51eb23b-195c-4061-92a9-3fad812cc12f
5.编辑/etc/fstab, 添加nodelalloc 挂载参数
vi /etc/fstab
UUID=c51eb23b-195c-4061-92a9-3fad812cc12f /data1 ext4 defaults,nodelalloc,noatime 0 2
6.挂载数据盘
mkdir /data1 && \
mount -a
7. 执行mount -t ext4 返回参数中包含 mount -t ext4 表示 已经生效
mount -t ext4
/dev/nvme0n1p1 on /data1 type ext4 (rw,noatime,nodelalloc,data=ordered)
九.编辑 inventory.ini 文件,分配机器资源
- 至少需部署 3 个 TiKV 实例。
- 不要将 TiKV 实例与 TiDB 或 PD 实例混合部署在同一台机器上。
- 将第一台 TiDB 机器同时用作监控机。
请使用内网 IP 来部署集群,如果部署目标机器 SSH 端口非默认的 22 端口,
需添加 ansible_port 变量,如 TiDB1 ansible_host=172.16.10.1 ansible_port=5555。
如果是 ARM 架构的机器,需要将 cpu_architecture 改为 arm64。
1. 编辑 /tidb-tidb-ansible/inventory.ini文件, 我的是按照单机多实例进行配置的
Name
|
Host IP
|
Services
|
node1
|
172.16.10.1
|
PD1, TiDB1
|
node2
|
172.16.10.2
|
PD2, TiDB2
|
node3
|
172.16.10.3
|
PD3
|
node4
|
172.16.10.4
|
TiKV1-1, TiKV1-2
|
node5
|
172.16.10.5
|
TiKV2-1, TiKV2-2
|
node6
|
172.16.10.6
|
TiKV3-1, TiKV3-2
|
[tidb@CentOS76_VM tidb-ansible]$ vim inventory.ini ## TiDB Cluster Part [tidb_servers] 172.16.5.52 172.16.4.29 [tikv_servers] TiKV1-1 ansible_host=172.16.4.30 deploy_dir=/data1/deploy tikv_port=20171 tikv_status_port=20181 labels="host=tikv1" TiKV1-2 ansible_host=172.16.4.30 deploy_dir=/data2/deploy tikv_port=20172 tikv_status_port=20182 labels="host=tikv1" TiKV2-1 ansible_host=172.16.4.224 deploy_dir=/data1/deploy tikv_port=20171 tikv_status_port=20181 labels="host=tikv2" TiKV2-2 ansible_host=172.16.4.224 deploy_dir=/data2/deploy tikv_port=20172 tikv_status_port=20182 labels="host=tikv2" TiKV3-1 ansible_host=172.16.5.208 deploy_dir=/data1/deploy tikv_port=20171 tikv_status_port=20181 labels="host=tikv3" TiKV3-2 ansible_host=172.16.5.208 deploy_dir=/data2/deploy tikv_port=20172 tikv_status_port=20182 labels="host=tikv3" [pd_servers] 172.16.5.52 172.16.4.29 172.16.4.56 [spark_master] [spark_slaves] [lightning_server] [importer_server] ## Monitoring Part # prometheus and pushgateway servers [monitoring_servers] 172.16.5.52 [grafana_servers] 172.16.5.52 # node_exporter and blackbox_exporter servers [monitored_servers] 172.16.5.52 172.16.4.29 172.16.4.56 172.16.4.30 172.16.4.224 172.16.5.208 [alertmanager_servers] [kafka_exporter_servers] ## Binlog Part [pump_servers] [drainer_servers] ## For TiFlash Part, please contact us for beta-testing and user manual [tiflash_servers] ## Group variables # 注意:为使 TiKV 的 labels 设置生效,部署集群时必须设置 PD 的 location_labels 参数。 [pd_servers:vars] location_labels = ["host"]
2. 参数调整注意事项
1.多实例情况下,需要修改 tidb-ansible/conf/tikv.yml 中 block-cache-size 下面的 capacity 参数:
storage:
block-cache:
capacity: "1GB"
TiKV 实例数量指每个服务器上 TiKV 的进程数量。
推荐设置:capacity = MEM_TOTAL * 0.5 / TiKV 实例数量
2.多实例情况下,需要修改 tidb-ansible/conf/tikv.yml 中 high-concurrency、normal-concurrency 和 low-concurrency 三个参数:
readpool:
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: 8
推荐设置:TiKV 实例数量 * 参数值 = CPU 核心数量 * 0.8
3.如果多个 TiKV 实例部署在同一块物理磁盘上,需要修改 conf/tikv.yml 中的 capacity 参数:
raftstore:
capacity: 0
推荐配置:capacity = 磁盘总容量 / TiKV 实例数量
例如:capacity: "100GB"
十.inventory.ini 的相关变量
变量
|
含义
|
cluster_name
|
集群名称,可调整
|
cpu_architecture
|
CPU 体系架构,默认为 amd64,可选 arm64
|
tidb_version
|
TiDB 版本,TiDB Ansible 各分支默认已配置
|
process_supervision
|
进程监管方式,默认为 systemd,可选 supervise
|
timezone
|
新安装 TiDB 集群第一次启动 bootstrap(初始化)时,将 TiDB 全局默认时区设置为该值。TiDB 使用的时区后续可通过 time_zone 全局变量和 session 变量来修改,参考时区支持。默认为 Asia/Shanghai,可选值参考 timzone 列表。
|
enable_firewalld
|
开启防火墙,默认不开启,如需开启,请将部署建议-网络要求 中的端口加入白名单
|
enable_ntpd
|
检测部署目标机器 NTP 服务,默认为 True,请勿关闭
|
set_hostname
|
根据 IP 修改部署目标机器主机名,默认为 False
|
enable_binlog
|
是否部署 Pump 并开启 binlog,默认为 False,依赖 Kafka 集群,参见 zookeeper_addrs 变量
|
zookeeper_addrs
|
binlog Kafka 集群的 zookeeper 地址
|
deploy_without_tidb
|
KV 模式,不部署 TiDB 服务,仅部署 PD、TiKV 及监控服务,请将 inventory.ini 文件中 tidb_servers 主机组 IP 设置为空。
|
alertmanager_target
|
可选:如果你已单独部署 alertmanager,可配置该变量,格式:alertmanager_host:alertmanager_port
|
grafana_admin_user
|
Grafana 管理员帐号用户名,默认为 admin
|
grafana_admin_password
|
Grafana 管理员帐号密码,默认为 admin,用于 Ansible 导入 Dashboard 和创建 API Key,如后期通过 grafana web 修改了密码,请更新此变量
|
collect_log_recent_hours
|
采集日志时,采集最近几个小时的日志,默认为 2 小时
|
enable_bandwidth_limit
|
在中控机上从部署目标机器拉取诊断数据时,是否限速,默认为 True,与 collect_bandwidth_limit 变量结合使用
|
collect_bandwidth_limit
|
在中控机上从部署目标机器拉取诊断数据时限速多少,单位: Kbit/s,默认 10000,即 10Mb/s,如果是单机多 TiKV 实例部署方式,需除以单机实例个数
|
prometheus_storage_retention
|
Prometheus 监控数据的保留时间(默认为 30 天);2.1.7、3.0 以及之后的 tidb-ansible 版本中,group_vars/monitoring_servers.yml 文件里新增的配置
|
十一.部署TIDB 集群
ansible-playbook 执行 Playbook 时,默认并发为 5。部署目标机器较多时,
可添加 -f 参数指定并发数,例如 ansible-playbook deploy.yml -f 10
1. 以 tidb 用户登录控制机 在 tidb-ansible/inventory.ini 文件中,确认 ansible_user = tidb
## Connection
# ssh via normal user
ansible_user = tidb
# 因为 TIDB 限制了服务以普通用户运行
1. ansible -i inventory.ini all -m shell -a 'whoami'
# 返回tidb 表示互信配置成功
2.ansible -i inventory.ini all -m shell -a 'whoami' -b
# 返回tidb 表示sudo免密配置成功
2.执行 local_prepare.yml playbook,联网下载 TiDB binary 至中控机
ansible-playbook local_prepare.yml
3.初始化环境, 修改内核参数
ansible-playbook bootstrap.yml
4.部署 TIDB 集群
ansible-playbook deploy.yml
5.启动TIDB集群
ansible-playbook start.yml
测试集群
TiDB 兼容 MySQL,因此可使用 MySQL 客户端直接连接 TiDB。推荐配置负载均衡以提供统一的 SQL 接口。
1. 使用 MySQL 客户端连接 TiDB 集群。TiDB 服务的默认端口为 4000。
mysql -u root -h 172.16.10.1 -P 4000
2. 通过浏览器访问监控平台。
- 地址:http://172.16.10.1:3000
- 默认帐号与密码:admin;admin