架构师必备--高可用高性能分布式数据库Tidb安装部署实践

news2024/11/19 6:44:12

本文针对分布式、高可用的tidb数据库,从搭建实际生产环境的集群服务,介绍下tidb的安装流程、安装前的环境检测和系统优化、服务访问等方面介绍下具体的流程,希望对大家熟悉和了解tidb数据库有所帮助,减少不必要的弯路。

1.概述

Tidb是PingCAP公司自主设计、研发的开源分布式关系型数据库,同时支持在线事务处理与在线分析处理(HTAP)的融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用。TiDB 适合高可用、强一致要求较高、数据规模较大等各种应用场景。

2.硬件要求

生产环境最低要求如下:
在这里插入图片描述

开发及测试最低要求如下:
在这里插入图片描述
以上是tidb数据库的常用组件,本文只安装tidb、pd、tikv和监控组件

3.安装前环境检查及系统优化

3.1 磁盘挂载

生产环境部署,建议使用 EXT4 类型文件系统的 NVME 类型的 SSD 磁盘存储 TiKV 数据文件。这个配置方案为最佳实施方案,其可靠性、安全性、稳定性已经在大量线上场景中得到证实。

使用root用户登录目标机器,将部署目标机器数据盘格式化成 ext4 文件系统,挂载时添加nodelalloc和noatime挂载参数。nodelalloc是必选参数,否则 TiUP 安装时检测无法通过;noatime是可选建议参数。

注意
如果你的数据盘已经格式化成 ext4 并挂载了磁盘,可先执行 umount /dev/nvme0n1p1 命令卸载,从编辑 /etc/fstab 文件步骤开始执行,添加挂载参数重新挂载即可。

3.1.1查看数据盘

fdisk -l

3.1.2创建分区

parted -s -a optimal /dev/nvme0n1 mklabel gpt -- mkpart primary ext4 1 -1

注意

使用 lsblk 命令查看分区的设备号:对于 nvme 磁盘,生成的分区设备号一般为 nvme0n1p1;对于普通磁盘(例如 /dev/sdb),生成的分区设备号一般为 sdb1。

3.1.3格式化文件系统

mkfs.ext4 /dev/nvme0n1p1

3.1.4查看数据盘分区 UUID

lsblk -f

在这里插入图片描述

3.1.5编辑 /etc/fstab 文件

添加 nodelalloc 挂载参数。 执行如下命令进入fstab文件,然后将文本添加到最后一行并保存

vi /etc/fstab

文本内容如下:

UUID=c51eb23b-195c-4061-92a9-3fad812cc12f /data1 ext4 defaults,nodelalloc,noatime 0 2

上述的uuid要换成3.1.4步骤中机器实际的uuid,/data1换成服务器上实际被挂载的目录

3.1.6挂载数据盘

mount -a

3.1.7执行以下命令,如果文件系统为 ext4,并且挂载参数中包含 nodelalloc,则表示已生效。

mount -t ext4

3.2 关闭防火墙

关闭命令

systemctl stop firewalld.service

关闭防火墙自启动服务

systemctl disable firewalld.service

检查防火墙状态

systemctl status firewalld.service

3.3 检测及关闭系统swap

TiDB 运行需要有足够的内存。如果内存不足,不建议使用 swap 作为内存不足的缓冲,因为这会降低性能。建议永久关闭系统 swap。

执行如下命令关闭:

echo "vm.swappiness = 0">> /etc/sysctl.conf

swapoff -a && swapon -a

sysctl -p

3.4 检测及安装NTP服务

TiDB 是一套分布式数据库系统,需要节点间保证时间的同步,从而确保 ACID 模型的事务线性一致性

3.4.1执行以下命令,如果输出running表示 NTP 服务正在运行

sudo systemctl status ntpd.service

在这里插入图片描述

若返回报错信息Unit ntpd.service could not be found.,请尝试执行以下命令,以查看与NTP进行时钟同步所使用的系统配置是chronyd还是ntpd:

sudo systemctl status chronyd.service

3.4.2 执行 ntpstat 命令检测是否与 NTP 服务器同步

ntpstat

如果输出synchronised to NTP server,表示正在与 NTP 服务器正常同步
如果系统使用的是ntpd时间同步服务,可忽略3.4.3步骤

3.4.3执行chronyc tracking命令查看 Chrony 服务是否与 NTP 服务器同步。

chronyc tracking

注意:该操作仅适用于使用 Chrony 的系统,不适用于使用 NTPd 的系统。
如果该命令返回结果如下,则表示 Chrony 服务未正常运行:需要手动启动该服务
启动chronyd服务并设置自启动:

systemctl start chronyd   启动服务
systemctl status chronyd  查看状态
systemctl enable chronyd  设置开机自启

3.5 操作系统检查及参数优化

在生产系统的 TiDB 中,建议对操作系统进行如下的配置优化:

  1. 关闭透明大页(即 Transparent Huge Pages,缩写为 THP)。
  2. 将存储介质的 I/O 调度器设置为 noop。
  3. 为调整 CPU 频率的 cpufreq 模块选用 performance 模式。

检查流程:

3.5.1执行以下命令查看透明大页的开启状态

cat /sys/kernel/mm/transparent_hugepage/enabled

在这里插入图片描述

[always] madvise never表示透明大页处于启用状态,需要关闭。

3.5.2 执行以下命令查看数据目录所在磁盘的 I/O 调度器。

cat /sys/block/sda/queue/scheduler

在这里插入图片描述

noop [deadline] cfq 表示磁盘的I/O 调度器使用deadline,需要进行修改。

3.5.3 执行以下命令查看磁盘的唯一标识 ID_SERIAL。

udevadm info --name=/dev/sda | grep ID_SERIAL

如果多个磁盘都分配了数据目录,需要多次执行以上命令,记录所有磁盘各自的唯一标识。

3.5.4 执行以下命令查看 cpufreq 模块选用的节能策略。

cpupower frequency-info –policy

在这里插入图片描述

The governor “powersave” 表示 cpufreq 的节能策略使用 powersave,需要调整为 performance 策略。

优化流程:

a、执行 tuned-adm list 命令查看当前操作系统的 tuned 策略。

tuned-adm list

Current active profile: balanced 表示当前操作系统的 tuned 策略使用 balanced,建议在当前策略的基础上添加操作系统优化配置。

b、创建新的 tuned 策略。(ID_SERIAL要换成检查流程第3步中实际的磁盘唯一标识符)

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=36d0946606d79f90025f3e09a0c1fc035)
elevator=noop

c、应用新的 tuned 策略。

tuned-adm profile balanced-tidb-optimal

d、执行以下命令验证透明大页的状态

 cat /sys/kernel/mm/transparent_hugepage/enabled

e、执行以下命令命令验证数据目录所在磁盘的 I/O 调度器。

cat /sys/block/sda/queue/scheduler

f、执行以下命令查看查看 cpufreq 模块选用的节能策略。

cpupower frequency-info –policy

g、执行以下命令修改 sysctl 参数。

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

h、执行以下命令查配置用户的limits.conf文件

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

此外,由于集群服务是安装在多台服务器上,所以需要设置机器之间ssh互信和sudo免密访问,但是如果使用tiup组件管理器,可以不用进行此操作,因为tiup可以自动设置互信和免密。至此,安装前的准备工作已完成,接下来就行实际安装流程。

4.搭建集群服务

4.1 下载并安装TiUP

curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh

在这里插入图片描述

4.2 声明全局环境变量

source ${your_shell_profile}
在这里插入图片描述
TiUP 安装完成后会提示对应 Shell profile 文件的绝对路径。在执行以下 source 命令前,需要将 ${your_shell_profile} 修改为 Shell profile 文件的实际位置

4.3 安装 TiUP 的 cluster 组件

tiup cluster

4.4 创建并启动集群

安装集群前,需要先创建集群的拓扑文件,此处可以直接先在本地创建好,比如topo.yanl,复制以下内容,然后传到服务器即可。文件中路径和ip根据实际情况声明

# # 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"  #该路径最好换成磁盘上实际挂载的目录下,比如/xxx/tidb-deploy
  data_dir: "/tidb-data"      #该路径最好换成磁盘上实际挂载的目录下,比如/xxx/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: 1000
  tikv:
    readpool.storage.use-unified-pool: false
    readpool.coprocessor.use-unified-pool: true
  pd:
    schedule.leader-schedule-limit: 4
    schedule.region-schedule-limit: 2048
    schedule.replica-schedule-limit: 64

pd_servers:
  - host: 10.0.0.1
  - host: 10.0.0.1
  - host: 10.0.0.1

tidb_servers:
  - host: 10.0.0.1
  - host: 10.0.0.1

tikv_servers:
  - host: 10.0.0.1	
  - host: 10.0.0.1
  - host: 10.0.0.1

monitoring_servers:
  - host: 10.0.0.1

grafana_servers:
  - host: 10.0.0.1

alertmanager_servers:
  - host: 10.0.0.1

4.5执行部署命令前,先检查环境是否满足要求

tiup cluster check  ./topo.yaml

如果报错:Error:none of ssh password,identity file ,SSH_AUTH_SOCK specified,改成如下命令,

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

然后输入密码即可检查环境。如果环境检查不通过,使用如下命令自行修复

tiup cluster check  ./topo.yaml --apply --user root -p

尽量保证检查的结果result栏为pass状态,如果没有绑核,numa绑核对应的那栏失败可以不用太关心,但是其他栏尽量都通过,最不济是warning状态

4.6 部署

命令如下:

tiup cluster deploy <cluster-name> <version> ./topo.yaml --user root -p

4.7 启动集群

tiup cluster start <cluster-name>

4.8 访问集群

安装 MySQL 客户端。如果已安装 MySQL 客户端则可跳过这一步骤。

yum -y install mysql

访问 TiDB 数据库,密码为空,也可以使用数据库客户端连接

mysql -h 10.0.1.1 -P 4000 -u root

访问 TiDB 的 Grafana 监控:
通过 http://{grafana-ip}:3000 访问集群 Grafana 监控页面,默认用户名和密码均为 admin。

访问 TiDB 的 Dashboard:
通过 http://{pd-ip}:2379/dashboard 访问集群 TiDB Dashboard 监控页面,默认用户名为 root,密码为空。
执行以下命令查看集群的拓扑结构和状态:

tiup cluster display <cluster-name>

到此,集群服务搭建完成,可以正常使用。
以下为集群操作的几个常用命令

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

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

停止组件中的某一个节点

tiup cluster stop ${cluster-name} -N 10.0.6.194:9090

启动组件中的某一个节点

tiup cluster start ${cluster-name} -N 10.0.6.194:9090

更改组件的配置后,重启组件

tiup cluster reload ${cluster-name} -R 组件名,比如tiup cluster reload tidb-pro -R tidb

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/898505.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图形推理|解题思路汇总

一、图形推理题常见题型 &#xff08;一&#xff09;图形的位置 图形的位置主要是指与图形位置相关的图形推理考点规律。 这类题目的图形特点通常有以下两类: (1)题干图形相似程度很高&#xff0c;只是某些部分的位置有差异-&#xff0c;考虑移动、旋转与翻转。…

自动编码器中的马尔可夫链蒙特卡罗期望最大化 (MCMC-EM):使用贝叶斯推理增强学习

一、介绍 自动编码器 自动编码器是强大的无监督学习算法&#xff0c;用于表示学习和降维。它们的工作原理是将输入数据编码为低维表示形式&#xff0c;然后将其解码回以重建原始数据。训练自动编码器通常涉及优化参数以最小化重建误差。然而&#xff0c;传统的优化技术&#xf…

如何通过MAT排查生产环境服务内存溢出

前言 前段时间&#xff0c;运维反馈生产环境翻译服务某个节点触发内存告警了。运维在重启节点之前&#xff0c;生成了dump快照&#xff0c;这里介绍下如何使用MAT内存分析工具来排查服务内存高占用问题。 MAT简介 MAT是Memory Analyzer的简称&#xff0c;它是一款功能强大的…

前端技术Vue学习笔记--005

Vue学习笔记 一、非父子通信-event bus 事件总线 作用&#xff1a;非父子组件之间&#xff0c;进行简易消息传递。&#xff08;复杂场景用----Vuex&#xff09; 使用步骤&#xff1a; 创建一个都能访问的事件总线 &#xff08;空Vue实例&#xff09;-----utils/EventBus.js /…

浅谈更糟糕的 CS_CLASSDC 标志位的作用

在上一篇文章中&#xff0c;我们了解了 CS_OWNDC 标志位的历史&#xff0c;也说明了设计它的初衷。 这个标志位一开始看起来是个挺好的设计&#xff0c;但是如果你多琢磨一会儿&#xff0c;就会发现它不是一个好主意。今天我们来看看更糟的。 CS_CLASSDC 标志位有点类似 CS_OW…

shell脚本文本三剑客sed

shell脚本文本三剑客sed 一.Sed编辑器1.1sed概述1.2sed工作流程1.3sed基本法1.4sed常用选项1.5sed命令的常用操作 二.sed命令使用2.1打印内容2.2删除内容示例5&#xff1a;先备份内容在删除2.3插入内容2.4取反2.5搜索替代2.6分组调用 一.Sed编辑器 1.1sed概述 sed编辑器是一种…

Linux 虚拟机Ubuntu22.04版本通过远程连接连接不上,输入ifconfig只能看到127.0.0.1的解决办法

之前给虚拟机配置静态IP之后&#xff0c;可以直接通过主机Vscode远程连接。但是前一段时间把主机的TCP/IPV4静态IP设置了一下之后&#xff0c;再连接虚拟机就连不上了&#xff0c;于是参考解决虚拟机不能上网ifconfig只显示127.0.0.1的问题&#xff0c;又可以连接上了&#xff…

Python “贪吃蛇”游戏,在不断改进中学习pygame编程

目录 前言 改进过程一 增加提示信息 原版帮助摘要 pygame.draw pygame.font class Rect class Surface 改进过程二 增加显示得分 改进过程三 增加背景景乐 增加提示音效 音乐切换 静音切换 mixer.music.play 注意事项 原版帮助摘要 pygame.mixer pygame.mix…

SpringBoot复习:(56)使用@Transactional注解标记的方法的执行流程

首先&#xff0c;如果在某个类或某个方法被标记为Transactional时&#xff0c;Spring boot底层会在创建这个bean时生成代理对象&#xff08;默认使用cglib) 示例&#xff1a; 当调用studentService的addStudent方法时&#xff0c;会直接跳到CglibAopProxy类去执行intercept方…

vscode里配置C#环境并运行.cs文件

vscode是一款跨平台、轻量级、开源的IDE, 支持C、C、Java、C#、R、Python、Go、Nodejs等多种语言的开发和调试。下面介绍在vscode里配置C#环境。这里以配置.Net SDK v5.0&#xff0c;语言版本为C#9.0&#xff0c;对应的开发平台为VS2019&#xff0c;作为案例说明。 1、下载vsc…

vue3小知识点汇总——基础积累

下面的小知识点比较零散&#xff0c;但是脑子不太好使&#xff0c;只能先记录一下啦&#xff0c;后面知识丰富起来后&#xff0c;慢慢就懂了。 1.最新版node.js已经不兼容vue2的项目了&#xff0c;学习vue3势在必行 node.js的安装及vue的搭建详细步骤&#xff1a;http://t.cs…

比特币暴跌的4个原因

作者&#xff1a;秦晋 加密市场每隔一段时间&#xff0c;就会迎来一次「暴跌」&#xff0c;而且每次暴跌原因各不相同。但归根到底都是「恐慌情绪」在作怪。继「312暴跌」、「519暴跌」之后&#xff0c;又迎来一个「8.18暴跌」。相比前两次暴跌&#xff0c;此次暴跌的原因或许略…

想做赴日程序员 有一定技术经验不学日语可以赴日IT吗?

有的小伙伴问&#xff1a;我有一定的IT技术和经验&#xff0c;不学日语的话&#xff0c;能去做赴日IT工作吗&#xff1f;说实话啊&#xff0c;我感觉如果行的话&#xff0c;那只能说明你运气不错&#xff0c;因为日本的IT行业在日本来说&#xff0c;并不是非常高薪的行业&#…

Redis中的有序集合

前言 本文着重介绍Redis中的有序集合的底层实现中的跳表 有序集合 Sorted Set Redis中的Sorted Set 是一个有序的无重复值的集合&#xff0c;他底层是使用压缩列表和跳表实现的&#xff0c;和Java中的HashMap底层数据结构&#xff08;1.8&#xff09;链表红黑树异曲同工之妙…

【深入了解PyTorch】PyTorch实战项目示例:深入探索图像分类、目标检测和情感分析

【深入了解PyTorch】PyTorch实战项目示例:深入探索图像分类、目标检测和情感分析 PyTorch实战项目示例:深入探索图像分类、目标检测和情感分析项目一:图像分类数据集准备构建模型训练模型模型评估和预测项目二:目标检测数据集准备构建模型训练模型模型评估和预测项目三:情…

记录因暴露阿里最高权限的Accesskey和secretKey导致的反弹shell攻击过程

Accesskey和SecretKey的泄露的原因 说到这个最高权限的key的泄露&#xff0c;绝对是低级的设计导致的。为了减少服务端的压力&#xff0c;直接让app直连oss服务&#xff0c;而且把最高权限的Accesskey和secretKey 下发到客户端&#xff0c;那么结果就是只要安装了该app的人&am…

js判断用户当前网络状态和判断网速

前端判断用户当前网络状态和判断网速 一、第一种是通过 HTML5 提供的 navigator 去检测网络(1)、原理介绍:(2)、兼容性 二、监听window.ononline和window.onoffline事件:三、通过ajax进行请求判断(兼容性好-推荐)(1)、原理介绍:(2)、注意: 四、navigator.connection方法监听网络…

PP-TS基于启发式搜索和集成方法的时序预测模型,使预测更加准确

时间序列数据在各行业和领域中无处不在&#xff0c;如物联网传感器的测量结果、每小时的销售额业绩、金融领域的股票价格等等&#xff0c;都是时间序列数据的例子。时间序列预测就是运用历史的多维数据进行统计分析&#xff0c;推测出事物未来的发展趋势。 为加快企业智能化转型…

Vue elementui 实现表格selection的默认勾选,翻页记录勾选状态

需求&#xff1a;当弹出一个列表页数据&#xff0c;对其进行筛选选择。 列表更新&#xff0c;填充已选数据 主要使用toggleRowSelection 代码如下&#xff1a; <el-table v-loading"loading" :data"drugList" selection-change"handleSelection…

安卓手机跑 vins slam (1)

一直是手机拍照&#xff0c;用RealityCapture重建三维模型。因为他是靠特征点去把拍摄的多个图像进行对齐的。需要拍摄的足够多&#xff0c;且有特征才能对齐&#xff0c;要不然会生成多个组件&#xff0c;还得手动拼。 而且重建的三维模型有尺度问题&#xff0c;自动重建的模…