离线部署TiDB本地测试集群

环境准备

先决条件
参考官网的TiDB 软件和硬件环境建议配置。

创建用户
创建普通用户、授权,并以普通用户身份登录测试机。
以 tidb 用户为例,后续安装 TiUP 及集群管理操作均通过该用户完成。
centos:

useradd tidb &&passwd tidb
sudo chown tidb:tidb /home/tidb/

ubuntu:

useradd -m tidb && passwd tidb
sudo chown tidb:tidb /home/tidb/
sudo chmod 750 /home/tidb/
sudo chmod 644 /home/tidb/.bashrc
vim /etc/passwd

将tidb用户sh改为bash。

离线部署TiUP组件

准备 TiUP 离线组件包
官方下载页面选择对应版本的 TiDB server 离线镜像包(包含 TiUP 离线组件包)。
需要同时下载 TiDB-community-server 软件包和 TiDB-community-toolkit 软件包。

https://cn.pingcap.com/product-community/

我们选择社区版,最近的LTS版本,此处以v8.1.1为例:


部署离线环境 TiUP 组件
将离线包发送到测试机后,切换tidb用户,执行以下命令j解压并安装 TiUP 组件:

tar xzvf tidb-community-server-${version}-linux-amd64.tar.gz && \
sh tidb-community-server-${version}-linux-amd64/local_install.sh && \

复制打印的结果,生效环境变量。以ubuntu为例:

source /home/tidb/.bashrc

local_install.sh 脚本会自动执行如下命令将当前镜像地址设置为 tidb-community-server-${version}-linux-amd64。

tiup mirror set tidb-community-server-${version}-linux-amd64 

合并离线包
如果是通过官方下载页面下载的离线软件包,需要将 TiDB-community-server 软件包和 TiDB-community-toolkit 软件包合并到离线镜像中。
执行以下命令合并离线组件到 server 目录下。

tar xf tidb-community-toolkit-${version}-linux-amd64.tar.gz
ls -ld tidb-community-server-${version}-linux-amd64 tidb-community-toolkit-${version}-linux-amd64
cd tidb-community-server-${version}-linux-amd64/
cp -rp keys ~/.tiup/
tiup mirror merge ../tidb-community-toolkit-${version}-linux-amd64

tiup mirror merge详见:

https://docs.pingcap.com/zh/tidb/stable/tiup-command-mirror-merge

若需将镜像切换到其他目录,可以通过手动执行 tiup mirror set <mirror-dir> 进行切换。

初始化集群拓扑文件

可执行如下命令,生成集群初始化配置文件:

tiup cluster template > topology.yaml

如果提示“A new version of cluster is available”可将打印的结果复制出来执行:

tiup update cluster
tiup update --all

然后再次生成集群初始化配置文件即可。

或者还可以使用模板自己创建此文件,基本配置文件的内容参考:

# # Global variables are applied to all deployments and used as the default value of
# # the deployments if a specific deployment value is missing.
global:
 user: "tidb"
 ssh_port: 22
 deploy_dir: "/data/tidb/tidb-deploy"
 data_dir: "/data/tidb/tidb-data"

# # Monitored variables are applied to all the machines.
monitored:
 node_exporter_port: 9100
 blackbox_exporter_port: 9115

server_configs:
 tidb:
   instance.tidb_slow_log_threshold: 300
 tikv:
   readpool.storage.use-unified-pool: false
   readpool.coprocessor.use-unified-pool: true
 pd:
   replication.enable-placement-rules: true
   replication.location-labels: ["host"]
 tiflash:
   logger.level: "info"

pd_servers:
 - host: 10.0.8.86

tidb_servers:
 - host: 10.0.8.86

tikv_servers:
 - host: 10.0.8.86
   port: 20160
   status_port: 20180
   config:
     server.labels: { host: "logic-host-1" }

 - host: 10.0.8.86
   port: 20161
   status_port: 20181
   config:
     server.labels: { host: "logic-host-2" }

 - host: 10.0.8.86
   port: 20162
   status_port: 20182
   config:
     server.labels: { host: "logic-host-3" }

tiflash_servers:
 - host: 10.0.8.86

monitoring_servers:
 - host: 10.0.8.86

grafana_servers:
 - host: 10.0.8.86

其他场景配置文件模板可从官网获取。

注意:

  • 对于需要全局生效的参数,请在配置文件中 server_configs 的对应组件下配置。
  • 对于需要某个节点生效的参数,请在具体节点的 config 中配置。
  • 配置的层次结构使用 . 表示。如:log.slow-threshold。更多格式参考 TiUP 配置参数模版
  • 如果需要指定在目标机创建的用户组名,可以参考这个例子

更多参数说明,请参考:

执行部署命令

注意:

通过 TiUP 进行集群部署可以使用密钥或者交互密码方式来进行安全认证:

  • 如果是密钥方式,可以通过 -i 或者 --identity_file 来指定密钥的路径。

  • 如果是密码方式,可以通过 -p 进入密码交互窗口。

  • 如果已经配置免密登录目标机,则不需填写认证。

一般情况下 TiUP 会在目标机器上创建 topology.yaml 中约定的用户和组,以下情况例外:

  • topology.yaml 中设置的用户名在目标机器上已存在。

  • 在命令行上使用了参数 --skip-create-user 明确指定跳过创建用户的步骤。

执行部署命令前,先使用 check 及 check --apply 命令检查和自动修复集群存在的潜在风险:
1.检查集群存在的潜在风险

tiup cluster check ./topology.yaml --user root [-p] [-i /home/root/.ssh/gcp_rsa]

以测试环境举例

cd /home/tidb/.tiup/bin
tiup cluster check ./topology.yaml --user root -p

2.自动修复集群存在的潜在风险

tiup cluster check ./topology.yaml --apply --user root [-p] [-i /home/root/.ssh/gcp_rsa]

测试环境执行后仍有部分未修复,需要手动处理。

常见错误及解决方式汇总

  • 解决numa的fail:
sudo apt-get install numactl
  • 解决mount point / does not have 'nodelalloc' option set和mount point / does not have 'noatime' option set的fail,需要编辑/etc/fstab文件,增加nodelalloc和noatime的配置,配置如下:
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/disk/by-uuid/f261169a-5d8e-445c-b9e6-8d6ebd961849 none swap sw 0 0
# / was on /dev/xvda4 during curtin installation
/dev/disk/by-uuid/b591a040-be76-4de3-88b9-ed105dd89c43 / ext4 defaults,nodelalloc,noatime 0 1
# /boot was on /dev/xvda3 during curtin installation
/dev/disk/by-uuid/56eb0efd-0066-4723-bf10-6b33f224b4f9 /boot ext4 defaults 0 1
/swap.img       none    swap    sw      0       0

重启后生效。
也有说noatime对于虚拟机来说无所谓,后续进一步查看含义。

  • will try to disable THP, please check again after reboot,重启后不会自动修复,需要手动关闭透明大页。
    有两种方法,优选如下这种:
 vim /etc/default/grub 

向GRUB_CMDLINE_LINUX_DEFAULT选项追加transparent_hugepage=never,顺序无所谓:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash transparent_hugepage=never"

然后执行:

update-grub

重启主机后生效。检查如下文件,是否中括号括在never上:

cat /sys/kernel/mm/transparent_hugepage/enabled
  • multiple components tikv:/data/tidb/tidb-data/tikv-20160,tikv:/data/tidb/tidb-data/tikv-20161,tikv:/data/tidb/tidb-data/tikv-20162,tiflash:/data/tidb/tidb-data/tiflash-9000 are using the same partition x.x.x.x:/ as data dir, auto fixing not supported
    此错误意思是不同tikv公用同一个目录,意味着磁盘要混用,这个对于读写效率影响相当严重,如果是测试环境的话无所谓,继续安装即可,如果是生产,强烈建议每个tikv对应不同的磁盘。
    测试环境中将topology.yaml文件中tikv只保留第一个,剩下两个均注释掉;然后tiflash相关的也注释掉,重新检测后通过。

3.部署 TiDB 集群
命令示例:

tiup cluster deploy tidb-test-86 v8.1.1 ./topology.yaml --user root [-p] [-i /home/root/.ssh/gcp_rsa]

以上部署示例中:

  • tidb-test-86 为部署的集群名称。
  • v8.1.1 为部署的集群版本,可以通过执行 tiup list tidb 来查看 TiUP 支持的最新可用版本。
  • 初始化配置文件为 topology.yaml。
  • --user root 表示通过 root 用户登录到目标主机完成集群部署,该用户需要有 ssh 到目标机器的权限,并且在目标机器有 sudo 权限。也可以用其他有 ssh 和 sudo 权限的用户完成部署。
  • [-i] 及 [-p] 为可选项,如果已经配置免密登录目标机,则不需填写。否则选择其一即可,[-i] 为可登录到目标机的 root 用户(或 --user 指定的其他用户)的私钥,也可使用 [-p] 交互式输入该用户的密码。

预期日志结尾输出如下内容,表示部署成功。

Deployed cluster `tidb-test-86` successfully, you can start it with command: `tiup cluster start tidb-test-86 --init` 

查看 TiUP 管理的集群情况

执行如下命令:

tiup cluster list

TiUP 支持管理多个 TiDB 集群,该命令会输出当前通过 TiUP cluster 管理的所有集群信息,包括集群名称、部署用户、版本、密钥信息等。
当前测试环境输出结果为:

Name          User  Version  Path                                                    PrivateKey
----          ----  -------  ----                                                    ----------
tidb-test-86  tidb  v8.1.1   /home/tidb/.tiup/storage/cluster/clusters/tidb-test-86  /home/tidb/.tiup/storage/cluster/clusters/tidb-test-86/ssh/id_rsa

检查部署的 TiDB 集群情况

例如,执行如下命令检查 tidb-test-86 集群情况:

tiup cluster display tidb-test-86

预期输出包括 tidb-test-86 集群中实例 ID、角色、主机、监听端口和状态(由于还未启动,所以状态为 Down/inactive)、目录信息。
此例中输入为:

Cluster type:       tidb
Cluster name:       tidb-test-86
Cluster version:    v8.1.1
Deploy user:        tidb
SSH type:           builtin
Grafana URL:        http://10.0.8.86:3000
ID               Role        Host       Ports        OS/Arch       Status  Data Dir                              Deploy Dir
--               ----        ----       -----        -------       ------  --------                              ----------
10.0.8.86:3000   grafana     10.0.8.86  3000         linux/x86_64  Down    -                                     /data/tidb/tidb-deploy/grafana-3000
10.0.8.86:2379   pd          10.0.8.86  2379/2380    linux/x86_64  Down    /data/tidb/tidb-data/pd-2379          /data/tidb/tidb-deploy/pd-2379
10.0.8.86:9090   prometheus  10.0.8.86  9090/12020   linux/x86_64  Down    /data/tidb/tidb-data/prometheus-9090  /data/tidb/tidb-deploy/prometheus-9090
10.0.8.86:4000   tidb        10.0.8.86  4000/10080   linux/x86_64  Down    -                                     /data/tidb/tidb-deploy/tidb-4000
10.0.8.86:20160  tikv        10.0.8.86  20160/20180  linux/x86_64  N/A     /data/tidb/tidb-data/tikv-20160       /data/tidb/tidb-deploy/tikv-20160
Total nodes: 5

启动集群

安全启动是 TiUP cluster 从 v1.9.0 起引入的一种新的启动方式,采用该方式启动数据库可以提高数据库安全性。推荐使用安全启动。
安全启动后,TiUP 会自动生成 TiDB root 用户的密码,并在命令行界面返回密码。
该自动生成的密码只会返回一次,如果没有记录或者忘记该密码,请参照忘记 root 密码修改密码。

安全启动

tiup cluster start tidb-test-86 --init

输出结果如下:

Starting cluster tidb-test-86...
+ [ Serial ] - SSHKeySet: privateKey=/home/tidb/.tiup/storage/cluster/clusters/tidb-test-86/ssh/id_rsa, publicKey=/home/tidb/.tiup/storage/cluster/clusters/tidb-test-86/ssh/id_rsa.pub
+ [Parallel] - UserSSH: user=tidb, host=10.0.8.86
+ [Parallel] - UserSSH: user=tidb, host=10.0.8.86
+ [Parallel] - UserSSH: user=tidb, host=10.0.8.86
+ [Parallel] - UserSSH: user=tidb, host=10.0.8.86
+ [Parallel] - UserSSH: user=tidb, host=10.0.8.86
+ [ Serial ] - StartCluster
Starting component pd
        Starting instance 10.0.8.86:2379
        Start instance 10.0.8.86:2379 success
Starting component tikv
        Starting instance 10.0.8.86:20160
        Start instance 10.0.8.86:20160 success
Starting component tidb
        Starting instance 10.0.8.86:4000
        Start instance 10.0.8.86:4000 success
Starting component prometheus
        Starting instance 10.0.8.86:9090
        Start instance 10.0.8.86:9090 success
Starting component grafana
        Starting instance 10.0.8.86:3000
        Start instance 10.0.8.86:3000 success
Starting component node_exporter
        Starting instance 10.0.8.86
        Start 10.0.8.86 success
Starting component blackbox_exporter
        Starting instance 10.0.8.86
        Start 10.0.8.86 success
+ [ Serial ] - UpdateTopology: cluster=tidb-test-86
Started cluster `tidb-test-86` successfully
The root password of TiDB database has been changed.
The new password is: '1X-W8_+Du754vat*9h'.
Copy and record it to somewhere safe, it is only displayed once, and will not be stored.
The generated password can NOT be get and shown again.

从中可以看到启动顺序,以及生成的root密码。看到Started cluster `tidb-test-86` successfully说明启动成功。
用普通启动方式即去掉--init参数,用无密码的root登录。

验证集群运行状态

通过 TiUP 检查集群状态
执行如下命令:

tiup cluster display tidb-test-86

预期结果输出:各节点 Status 状态信息为 Up 说明集群状态正常。
此例中输出结果为:

Cluster type:       tidb
Cluster name:       tidb-test-86
Cluster version:    v8.1.1
Deploy user:        tidb
SSH type:           builtin
Dashboard URL:      http://10.0.8.86:2379/dashboard
Grafana URL:        http://10.0.8.86:3000
ID               Role        Host       Ports        OS/Arch       Status   Data Dir                              Deploy Dir
--               ----        ----       -----        -------       ------   --------                              ----------
10.0.8.86:3000   grafana     10.0.8.86  3000         linux/x86_64  Up       -                                     /data/tidb/tidb-deploy/grafana-3000
10.0.8.86:2379   pd          10.0.8.86  2379/2380    linux/x86_64  Up|L|UI  /data/tidb/tidb-data/pd-2379          /data/tidb/tidb-deploy/pd-2379
10.0.8.86:9090   prometheus  10.0.8.86  9090/12020   linux/x86_64  Up       /data/tidb/tidb-data/prometheus-9090  /data/tidb/tidb-deploy/prometheus-9090
10.0.8.86:4000   tidb        10.0.8.86  4000/10080   linux/x86_64  Up       -                                     /data/tidb/tidb-deploy/tidb-4000
10.0.8.86:20160  tikv        10.0.8.86  20160/20180  linux/x86_64  Up       /data/tidb/tidb-data/tikv-20160       /data/tidb/tidb-deploy/tikv-20160
Total nodes: 5

使用mysql客户端连接

mysql -h 127.0.0.1 -P 4000 -u root -p 

可以看到熟悉的命令行界面,版本信息为tidb相关信息:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3835691014
Server version: 8.0.11-TiDB-v8.1.1 TiDB Server (Apache License 2.0) Community Edition, MySQL 8.0 compatible

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

通过TiDB Dashboard检查集群状态
通过 {pd-ip}:{pd-port}/dashboard 登录 TiDB Dashboard,登录用户和口令为 TiDB 数据库 root 用户和口令。如果你修改过数据库的 root 密码,则以修改后的密码为准,默认密码为空。
此例中为:

http://10.0.8.86:2379/dashboard

主页面显示 TiDB 集群中节点信息

通过Grafana 检查集群状态
通过 {Grafana-ip}:3000 登录 Grafana 监控,默认用户名及密码为 admin/admin。
首次登录需要修改admin密码。
点击 Overview 监控页面检查 TiDB 端口和负载监控信息。

通过dbeaver连接
因为tidb兼容mysql协议,因此选择mysql即可,端口改为4000:

基本操作

绝大部分语法和mysql相同,如下是官网的例子。

检查 TiDB 版本

select tidb_version()\G

创建 PingCAP database

create database pingcap;
use pingcap;

创建 tab_tidb 表

CREATE TABLE `tab_tidb` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL DEFAULT '',
`age` int(11) NOT NULL DEFAULT 0,
`version` varchar(20) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `idx_age` (`age`));

插入数据

insert into `tab_tidb` values (1,'TiDB',5,'TiDB-v5.0.0');

查看 tab_tidb 数据

select * from tab_tidb;

查看 TiKV store 状态、store_id、存储情况以及启动时间

select STORE_ID,ADDRESS,STORE_STATE,STORE_STATE_NAME,CAPACITY,AVAILABLE,UPTIME from INFORMATION_SCHEMA.TIKV_STORE_STATUS;

创建管理员

create user 'wenjie.wang'@'%' identified by 'xxxxxxxxxx';
grant all privileges on *.* to 'wenjie.wang'@'%' with grant option;

退出

exit

关闭集群

关闭集群操作会按 Alertmanager -> Grafana -> Prometheus -> TiCDC -> Drainer -> TiFlash -> TiDB -> Pump -> TiKV -> PD 的顺序关闭整个 TiDB 集群所有组件(同时也会关闭监控组件):

tiup cluster stop ${cluster-name}

和 start 命令类似,stop 命令也支持通过 -R 和 -N 参数来只停止部分组件。

例如,下列命令只停止 TiDB 组件:

tiup cluster stop ${cluster-name} -R tidb

下列命令只停止 1.2.3.4 和 1.2.3.5 这两台机器上的 TiDB 组件:

tiup cluster stop ${cluster-name} -N 1.2.3.4:4000,1.2.3.5:4000
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339

推荐阅读更多精彩内容