从0到1部署一套TiDB本地集群

网友投稿 781 2023-04-16

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

从0到1部署一套TiDB本地集群

TiDB是一款开源的NewSQL数据库,我们看一下官方的描述:

TiDB 是 PingCAP 公司自主设计、研发的开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理 (Hybrid Transactional and Analytical Processing, HTAP)的融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用、实时 HTAP、云原生的分布式数据库、兼容 MySQL 5.7 协议和 MySQL 生态等重要特性。目标是为用户提供一站式 OLTP (Online Transactional Processing)、OLAP (Online Analytical Processing)、HTAP 解决方案。TiDB 适合高可用、强一致要求较高、数据规模较大等各种应用场景。

这里面有几个关键点:

分布式关系型数据库兼容MySQL5.7支持HTAP(在线事务处理和在线分析处理)对金融行业支持很好,支持高可用、强一致和大数据场景

基本概念

这里介绍一下TiDB中的几个重要概念:

PD:Placement Driver,是TiDB的一个总控节点,负责集群的整体调度外,全局ID生成,以及全局时间戳TSO(中心化授时)的生成。也就是说全局时钟在这个节点实现。TiKV:TiDB 的存储层,是一个分布式事务型的键值数据库,满足ACID事务,使用Raft协议保证多副本一致性,还存储统计数据,TiFlash:HTAP形态的关键组件,它是TiKV的列存扩展,在提供了良好的隔离性的同时,也兼顾了强一致性。Monitor:TiDB监控组件

实验环境

由于我本地资源的限制,我们使用快速部署的方式。

TiDB快速部署的方式有2种:

第一种:使用 TiUP Playground 快速部署本地测试环境

适用场景:利用本地 Mac 或者单机 Linux 环境快速部署 TiDB 集群。可以体验 TiDB 集群的基本架构,以及 TiDB、TiKV、PD、监控等基础组件的运行。

第二种:使用TiUP cluster在单机上模拟生产环境部署步骤

希望用单台Linux服务器,体验TiDB最小的完整拓扑的集群,并模拟生产的部署步骤。

这里我采用第二种方式。

据官方描述,TiDB在CentOS 7.3做过大量的测试,建议在CentOS 7.3以上部署。

本地环境:VMware虚拟机,操作系统CentOS7.6

开始部署

我们按照官方的步骤来安装

1.关闭防火墙

systemctl stop firewalld service  iptables stop

2.下载并安装 TiUP,命令和结果如下

3.安装 TiUP 的 cluster 组件

source .bash_profile

执行安装cluster命令:

tiup cluster

输出如下:

4.调大sshd服务的连接数限制

这里需要使用root权限,具体修改/etc/ssh/sshd_config文件下面的参数配置:

MaxSessions 20

改完后重启sshd:

[root@master ~]# service sshd restart Redirecting to /bin/systemctl restart sshd.service

5.编辑集群配置模板文件

这个文件我们命名为topo.yaml,内容如下:

# # 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: "/tidb-deploy"  data_dir: "/tidb-data"  # # Monitored variables are applied to all the machines. monitored:  node_exporter_port: 9100  blackbox_exporter_port: 9115  server_configs:  tidb:    log.slow-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: 192.168.59.146  tidb_servers:  - host: 192.168.59.146  tikv_servers:  - host: 192.168.59.146    port: 20160    status_port: 20180    config:      server.labels: { host: "logic-host-1" }  # - host: 192.168.59.146 #   port: 20161 #   status_port: 20181 #   config: #     server.labels: { host: "logic-host-2" }  # - host: 192.168.59.146 #   port: 20162 #   status_port: 20182 #   config: #     server.labels: { host: "logic-host-3" }  tiflash_servers:  - host: 192.168.59.146

这里有2点需要注意:

文件中的host是部署TiDB的服务器ipssh_port默认是22

官方文件的tikv_servers是3个节点,我这里设置成了只有1个节点,原因是本地配置多个节点时只有1个节点能启动成功

6.部署集群

部署集群的命令如下:

tiup cluster deploy   ./topo.yaml --user root -p

上面的cluster-name是集群名称,tidb-version是指TiDB版本号,可以通过tiup list tidb这个命令来查看,这里使用v3.1.2,集群名称叫mytidb-cluster,命令如下:

tiup cluster deploy mytidb-cluster v3.1.2 ./topo.yaml --user root -p

下面是部署时输出的日志:

7.启动集群

命令如下:

tiup cluster start mytidb-cluster

启动成功日志如下:

8.访问数据库

因为TiDB支持mysql客户端访问,我们使用sqlyog登录TiDB,用户名root,密码空,地址192.168.59.149,端口4000,如下图:

登录成功如下图,左侧我们可以看到TiDB自带的一些表:

9.访问TiDB的Grafana监控

访问地址如下:

初始用户名/密码:admin/admin,登录进去后修改密码,成功后页面如下:

10.dashboard

TiDB v3.x版本没有dashboard,v4.0开始加入,访问地址如下:

11.查看集群列表

命令:tiup cluster list,结果如下:

12.查看集群拓扑结构

命令如下:

tiup cluster list

输入命令后,我本地集群的输出如下:

遇到的问题

安装TiDB v4.0.9版本,可以部署成功,但是启动报错,如果topo.yaml中配置了3个节点,启动报错,tikv只能启动成功一个,日志如下:

查看日志文件/tidb-deploy/tikv-20161/log/tikv.log,提示下面2个目录下找不到文件:

如果配置一个节点,启动还是失败,启动日志我们截取后半段:

在/tidb-deploy/tiflash-9000/log中文件如下:

[2021/01/06 20:06:26.207 -05:00] [INFO] [mod.rs:335] ["starting working thread"] [worker=region-collector-worker] [2021/01/06 20:06:27.130 -05:00] [FATAL] [lib.rs:482] ["called `Result::unwrap()` on an `Err` value: Os { code: 2, kind: NotFound, message: \"No such file or directory\" }"] [backtrace="stack backtrace:\n   0: tikv_util::set_panic_hook::{{closure}}\n   1: std::panicking::rust_panic_with_hook\n             at src/libstd/panicking.rs:475\n   2: rust_begin_unwind\n             at src/libstd/panicking.rs:375\n   3: core::panicking::panic_fmt\n             at src/libcore/panicking.rs:84\n   4: core::result::unwrap_failed\n             at src/libcore/result.rs:1188\n   5: cmd::server::run_tikv\n   6: run_proxy\n   7: operator()\n             at /home/jenkins/agent/workspace/optimization-build-tidb-linux-amd/tics/dbms/src/Server/Server.cpp:415\n   8: execute_native_thread_routine\n             at ../../../../../libstdc++-v3/src/c++11/thread.cc:83\n   9: start_thread\n  10: __clone\n"] [location=src/libcore/result.rs:1188] [thread_name=]

试了v4.0.1版本,也是一样的问题,都是报找不到文件的错误。

总结

TiDB部署相对容易,但是如果部署失败,比如本文的V4.0.x版本,不太好解决,因为网上相关的经验很少,官网也找不到,只能翻源代码来解决了。

上一篇:MySQL表空间回收的正确姿势
下一篇:如何进行软件的压力测试(软件压力测试报告模板)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~