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

本文针对分布式、高可用的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.mfbz.cn/a/80109.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于WebSocket的在线文字聊天室

与Ajax不同&#xff0c;WebSocket可以使服务端主动向客户发送响应&#xff0c;本案例就是基于WebSocket的一个在线聊天室&#xff0c;不过功能比较简单&#xff0c;只能满足文字交流。演示如下。 案例学习于b站up主&#xff0c;链接 。这位up主讲的非常清楚&#xff0c;值得去学…

(黑客)自学

一、前言&#xff1a; 1.这是一条坚持的道路,三分钟的热情可以放弃往下看了. 2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发. 3.有时多 google,baidu,我们往往都遇不到好心的大神,谁会无聊天天给你做解答. 4.遇到实在搞不懂的,可以先放放,以…

Java多态详解(1)

多态 多态的概念 所谓多态&#xff0c;通俗地讲&#xff0c;就是多种形态&#xff0c;具体点就是去完成某个行为&#xff0c;当不同的对象去完成时会产生出不同的状态。 比如&#xff1a; 这一时间爆火的“现代纪录片”中&#xff0c;麦克阿瑟总是对各种“名人”有不同的评价&…

springboot异步文件上传获取输入流提示找不到文件java.io.FileNotFoundException

springboot上传文件&#xff0c;使用异步操作处理上传的文件数据&#xff0c;出现异常如下&#xff1a; 这个是在异步之后使用传过来的MultipartFile对象尝试调用getInputStream方法发生的异常。 java.io.FileNotFoundException: C:\Users\Administrator\AppData\Local\Temp\to…

JAVA免杀学习与实验

1 认识Webshell 创建一个JSP文件&#xff1a; <% page import"java.io.InputStream" %> <% page import"java.io.BufferedReader" %> <% page import"java.io.InputStreamReader" %> <% page language"java" p…

【java安全】Log4j反序列化漏洞

文章目录 【java安全】Log4j反序列化漏洞关于Apache Log4j漏洞成因CVE-2017-5645漏洞版本复现环境漏洞复现漏洞分析 CVE-2019-17571漏洞版本漏洞复现漏洞分析 参考 【java安全】Log4j反序列化漏洞 关于Apache Log4j Log4j是Apache的开源项目&#xff0c;可以实现对System.out…

使用metasploit(MSF)对windows的ms17-010漏洞进行利用

主机发现 Ping扫描-禁用端口扫描 nmap -sn 192.168.1.0/24 ─# nmap -sn 192.168.1.0/24 Starting Nmap 7.93 ( https://nmap.org ) at 2023-08-14 10:00 EDT Nmap scan report for 192.168.1.1 Host is up (0.0053s latency). MAC Address: FC:BC:D1:C7:2F:A8 (Huawei Te…

OpenHarmony Meetup 广州站 OpenHarmony正当时—技术开源

招募令 OpenHarmony Meetup 广州站 火热招募中&#xff0c;等待激情四射的开发者&#xff0c;线下参与OpenHarmonyMeetup线下交流 展示前沿技术、探讨未来可能、让你了解更多专属OpenHarmony的魅力 线下参与&#xff0c;先到先得,仅限20个名额&#xff01; 报名截止时间8月23日…

[HZNUCTF 2023 preliminary] 2023杭师大校赛(初赛) web方向题解wp 全

ezflask 先看题目&#xff0c;应该是模板注入&#xff08;SSTI&#xff09;&#xff0c;输入{{7*‘7’}}直接报错误。 发现模板是反序输出的&#xff0c;怪不得不能直接输入{{}}。 输入}}‘7’*7{{返回777777&#xff0c;是jinja2 //直接手打&#xff0c;无所谓我是怨种 ?nam…

macOS Ventura 13.5.1(22G90)发布(附黑/白苹果系统镜像地址)

系统镜像下载&#xff1a;百度&#xff1a;黑果魏叔 系统介绍 黑果魏叔 8 月 18 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 13.5.1 更新&#xff08;内部版本号&#xff1a;22G90&#xff09;&#xff0c;本次更新距离上次发布隔了 24 天。 本次更新重点修复了…

企望制造ERP系统 RCE漏洞[2023-HW]

企望制造ERP系统 RCE漏洞 一、 产品简介二、 漏洞概述三、 复现环境四、 漏洞复现小龙POC检测 五、 修复建议 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;…

De Bruijin序列与魔术(四)——De Bruijin序列的拓展结果

早点关注我&#xff0c;精彩不错过&#xff01; 在上一讲中&#xff0c;我们解释了对扩展De Bruijin序列用来变魔术的思路和公式&#xff0c;相关内容请戳&#xff1a; De Bruijin序列与魔术&#xff08;三&#xff09;——De Bruijin序列的拓展思考 De Bruijin序列与魔术&…

【仿写tomcat】七、项目结构优化以及代码开源

仿写tomcat 项目结构开源地址 项目结构 到目前为止&#xff0c;博主的仿写tomcat就告一段落了&#xff0c;后续有时间了还会继续补充功能&#xff0c;现在的项目结构如下。 在保证功能的前提下作出的改动有&#xff1a; 将各个类中的参数统一成了Config类&#xff0c;通过对…

视频集中存储/云存储/磁盘阵列EasyCVR平台接入RTSP设备出现离线情况的排查

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

git 开发环境配置

系统&#xff1a;Mac OS 1、下载git&#xff0c;官网已经推荐使用命令下载。 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh) 2、验证git是否安装成功 git --version 3、配置本地git全局变量 git config --global user.n…

【C++学习手札】一文带你认识C++虚继承​​

食用指南&#xff1a;本文在有C基础的情况下食用更佳 &#x1f340;本文前置知识&#xff1a;C虚函数&#xff08;很重要&#xff0c;内部剖析&#xff09; ♈️今日夜电波&#xff1a;僕らのつづき—柊優花 1:06 ━━━━━━️&#x1f49f;──────── 3:51 …

AQS源码解读

文章目录 前言一、AQS是什么&#xff1f;二、解读重点属性statehead、tail 同步变量竞争acquire 同步变量释放 总结 前言 AQS是AbstractQueuedSynchronizer的缩写&#xff0c;也是大神Doug Lea的得意之作。今天我们来进行尽量简化的分析和理解性的代码阅读。 一、AQS是什么&am…

旧版本docker未及时更新,导致更新/etc/docker/daemon.json配置文件出现docker重启失败

一、背景 安装完docker和containerd之后&#xff0c;尝试重启docker的时候&#xff0c;报错如下&#xff1a; systemctl restart dockerJob for docker.service failed because the control process exited with error code. See “systemctl status docker.service” and “…

android设置竖屏仍然跟随屏幕旋转怎么办

如题所问&#xff0c;我最近遇到一个bug&#xff0c;就是设置了摇感&#xff0c;然后有用户反馈说设置了手机下拉的系统设置-屏幕旋转-关闭。然后屏幕还是会旋转的问题。 首先&#xff0c;我们先从如何设置横竖屏了解下好了 设置横屏和竖屏的方法&#xff1a; 方法一&#x…

算法与数据结构(七)--堆

一.堆 1.堆的定义 堆是计算机科学中一类特殊的数据结构的通常&#xff0c;堆通常可以被看做是一颗完全二叉树的数组对象。 堆的特性 1.它是完全二叉树&#xff0c;除了树的最后一层结点不需要是满的&#xff0c;其他的每一层从左到右都是满的&#xff0c;如果最后一层结点不…
最新文章