实时警报通知:微信告警通知的重要性解析
781
2023-04-16
从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
上面的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版本,不太好解决,因为网上相关的经验很少,官网也找不到,只能翻源代码来解决了。
发表评论
暂时没有评论,来抢沙发吧~