[转帖]TiDB 环境与系统配置检查
https://docs-archive.pingcap.com/zh/tidb/v6.0/check-before-deployment
本文介绍部署 TiDB 前的环境检查操作,以下各项操作按优先级排序。
在 TiKV 部署目标机器上添加数据盘 EXT4 文件系统挂载参数
生产环境部署,建议使用 EXT4 类型文件系统的 NVME 类型的 SSD 磁盘存储 TiKV 数据文件。这个配置方案为最佳实施方案,其可靠性、安全性、稳定性已经在大量线上场景中得到证实。
使用 root 用户登录目标机器,将部署目标机器数据盘格式化成 ext4 文件系统,挂载时添加 nodelalloc 和 noatime 挂载参数。nodelalloc 是必选参数,否则 TiUP 安装时检测无法通过;noatime 是可选建议参数。
如果你的数据盘已经格式化成 ext4 并挂载了磁盘,可先执行 umount /dev/nvme0n1p1 命令卸载,从编辑 /etc/fstab 文件步骤开始执行,添加挂载参数重新挂载即可。
以 /dev/nvme0n1 数据盘为例,具体操作步骤如下:
查看数据盘。
fdisk -lDisk /dev/nvme0n1: 1000 GB创建分区。
parted -s -a optimal /dev/nvme0n1 mklabel gpt -- mkpart primary ext4 1 -1注意使用
lsblk命令查看分区的设备号:对于 nvme 磁盘,生成的分区设备号一般为nvme0n1p1;对于普通磁盘(例如/dev/sdb),生成的分区设备号一般为sdb1。格式化文件系统。
mkfs.ext4 /dev/nvme0n1p1查看数据盘分区 UUID。
本例中
nvme0n1p1的 UUID 为c51eb23b-195c-4061-92a9-3fad812cc12f。lsblk -fNAME FSTYPE LABEL UUID MOUNTPOINT sda ├─sda1 ext4 237b634b-a565-477b-8371-6dff0c41f5ab /boot ├─sda2 swap f414c5c0-f823-4bb1-8fdf-e531173a72ed └─sda3 ext4 547909c1-398d-4696-94c6-03e43e317b60 / sr0 nvme0n1 └─nvme0n1p1 ext4 c51eb23b-195c-4061-92a9-3fad812cc12f编辑
/etc/fstab文件,添加nodelalloc挂载参数。vi /etc/fstabUUID=c51eb23b-195c-4061-92a9-3fad812cc12f /data1 ext4 defaults,nodelalloc,noatime 0 2挂载数据盘。
mkdir /data1 && \ mount -a执行以下命令,如果文件系统为 ext4,并且挂载参数中包含
nodelalloc,则表示已生效。mount -t ext4/dev/nvme0n1p1 on /data1 type ext4 (rw,noatime,nodelalloc,data=ordered)
检测及关闭系统 swap
TiDB 运行需要有足够的内存。如果内存不足,不建议使用 swap 作为内存不足的缓冲,因为这会降低性能。建议永久关闭系统 swap。
要永久关闭 swap,可执行以如下命令:
- 一起执行
swapoff -a和swapon -a命令是为了刷新 swap,将 swap 里的数据转储回内存,并清空 swap 里的数据。不可省略 swappiness 设置而只执行swapoff -a;否则,重启后 swap 会再次自动打开,使得操作失效。 - 执行
sysctl -p命令是为了在不重启的情况下使配置生效。
检测及关闭目标部署机器的防火墙
本段介绍如何关闭目标主机防火墙配置,因为在 TiDB 集群中,需要将节点间的访问端口打通才可以保证读写请求、数据心跳等信息的正常的传输。在普遍线上场景中,数据库到业务服务和数据库节点的网络联通都是在安全域内完成数据交互。如果没有特殊安全的要求,建议将目标节点的防火墙进行关闭。否则建议按照端口使用规则,将端口信息配置到防火墙服务的白名单中。
检查防火墙状态(以 CentOS Linux release 7.7.1908 (Core) 为例)
sudo firewall-cmd --state sudo systemctl status firewalld.service关闭防火墙服务
sudo systemctl stop firewalld.service关闭防火墙自动启动服务
sudo systemctl disable firewalld.service检查防火墙状态
sudo systemctl status firewalld.service
检测及安装 NTP 服务
TiDB 是一套分布式数据库系统,需要节点间保证时间的同步,从而确保 ACID 模型的事务线性一致性。目前解决授时的普遍方案是采用 NTP 服务,可以通过互联网中的 pool.ntp.org 授时服务来保证节点的时间同步,也可以使用离线环境自己搭建的 NTP 服务来解决授时。
采用如下步骤检查是否安装 NTP 服务以及与 NTP 服务器正常同步:
执行以下命令,如果输出
running表示 NTP 服务正在运行:sudo systemctl status ntpd.servicentpd.service - Network Time Service Loaded: loaded (/usr/lib/systemd/system/ntpd.service; disabled; vendor preset: disabled) Active: active (running) since 一 2017-12-18 13:13:19 CST; 3s ago若返回报错信息
Unit ntpd.service could not be found.,请尝试执行以下命令,以查看与 NTP 进行时钟同步所使用的系统配置是chronyd还是ntpd:sudo systemctl status chronyd.servicechronyd.service - NTP client/server Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2021-04-05 09:55:29 EDT; 3 days ago若发现系统既没有配置
chronyd也没有配置ntpd,则表示系统尚未安装任一服务。此时,应先安装其中一个服务,并保证它可以自动启动,默认使用ntpd。如果你使用的系统配置是
chronyd,请直接执行步骤 3。
执行
ntpstat命令检测是否与 NTP 服务器同步:注意Ubuntu 系统需安装
ntpstat软件包。ntpstat如果输出
synchronised to NTP server,表示正在与 NTP 服务器正常同步:synchronised to NTP server (85.199.214.101) at stratum 2 time correct to within 91 ms polling server every 1024 s以下情况表示 NTP 服务未正常同步:
unsynchronised以下情况表示 NTP 服务未正常运行:
Unable to talk to NTP daemon. Is it running?
执行
chronyc tracking命令查看 Chrony 服务是否与 NTP 服务器同步。注意该操作仅适用于使用 Chrony 的系统,不适用于使用 NTPd 的系统。
chronyc tracking如果该命令返回结果为
Leap status : Normal,则代表同步过程正常。Reference ID : 5EC69F0A (ntp1.time.nl) Stratum : 2 Ref time (UTC) : Thu May 20 15:19:08 2021 System time : 0.000022151 seconds slow of NTP time Last offset : -0.000041040 seconds RMS offset : 0.000053422 seconds Frequency : 2.286 ppm slow Residual freq : -0.000 ppm Skew : 0.012 ppm Root delay : 0.012706812 seconds Root dispersion : 0.000430042 seconds Update interval : 1029.8 seconds Leap status : Normal如果该命令返回结果如下,则表示同步过程出错:
Leap status : Not synchronised如果该命令返回结果如下,则表示 Chrony 服务未正常运行:
506 Cannot talk to daemon
如果要使 NTP 服务尽快开始同步,执行以下命令。可以将 pool.ntp.org 替换为你的 NTP 服务器:
如果要在 CentOS 7 系统上手动安装 NTP 服务,可执行以下命令:
检查和配置操作系统优化参数
在生产系统的 TiDB 中,建议对操作系统进行如下的配置优化:
- 关闭透明大页(即 Transparent Huge Pages,缩写为 THP)。数据库的内存访问模式往往是稀疏的而非连续的。当高阶内存碎片化比较严重时,分配 THP 页面会出现较高的延迟。
- 将存储介质的 I/O 调度器设置为 noop。对于高速 SSD 存储介质,内核的 I/O 调度操作会导致性能损失。将调度器设置为 noop 后,内核不做任何操作,直接将 I/O 请求下发给硬件,以获取更好的性能。同时,noop 调度器也有较好的普适性。
- 为调整 CPU 频率的 cpufreq 模块选用 performance 模式。将 CPU 频率固定在其支持的最高运行频率上,不进行动态调节,可获取最佳的性能。
采用如下步骤检查操作系统的当前配置,并配置系统优化参数:
执行以下命令查看透明大页的开启状态。
cat /sys/kernel/mm/transparent_hugepage/enabled[always] madvise never注意[always] madvise never表示透明大页处于启用状态,需要关闭。执行以下命令查看数据目录所在磁盘的 I/O 调度器。假设在 sdb、sdc 两个磁盘上创建了数据目录。
cat /sys/block/sd[bc]/queue/schedulernoop [deadline] cfq noop [deadline] cfq注意noop [deadline] cfq表示磁盘的 I/O 调度器使用deadline,需要进行修改。执行以下命令查看磁盘的唯一标识
ID_SERIAL。udevadm info --name=/dev/sdb | grep ID_SERIALE: ID_SERIAL=36d0946606d79f90025f3e09a0c1f9e81 E: ID_SERIAL_SHORT=6d0946606d79f90025f3e09a0c1f9e81注意如果多个磁盘都分配了数据目录,需要多次执行以上命令,记录所有磁盘各自的唯一标识。
执行以下命令查看 cpufreq 模块选用的节能策略。
cpupower frequency-info --policyanalyzing CPU 0: current policy: frequency should be within 1.20 GHz and 3.10 GHz. The governor "powersave" may decide which speed to use within this range.注意The governor "powersave"表示 cpufreq 的节能策略使用 powersave,需要调整为 performance 策略。如果是虚拟机或者云主机,则不需要调整,命令输出通常为Unable to determine current policy。配置系统优化参数
方法一:使用 tuned(推荐)
执行
tuned-adm list命令查看当前操作系统的 tuned 策略。tuned-adm listAvailable profiles: - balanced - General non-specialized tuned profile - desktop - Optimize for the desktop use-case - hpc-compute - Optimize for HPC compute workloads - latency-performance - Optimize for deterministic performance at the cost of increased power consumption - network-latency - Optimize for deterministic performance at the cost of increased power consumption, focused on low latency network performance - network-throughput - Optimize for streaming network throughput, generally only necessary on older CPUs or 40G+ networks - powersave - Optimize for low power consumption - throughput-performance - Broadly applicable tuning that provides excellent performance across a variety of common server workloads - virtual-guest - Optimize for running inside a virtual guest - virtual-host - Optimize for running KVM guests Current active profile: balancedCurrent active profile: balanced表示当前操作系统的 tuned 策略使用 balanced,建议在当前策略的基础上添加操作系统优化配置。创建新的 tuned 策略。
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)|(ID_SERIAL=36d0946606d79f90025f3e09a0c1f9e81) elevator=noopinclude=balanced表示在现有的 balanced 策略基础上添加操作系统优化配置。应用新的 tuned 策略。
tuned-adm profile balanced-tidb-optimal
方法二:使用脚本方式。如果已经使用 tuned 方法,请跳过本方法。
执行
grubby命令查看默认内核版本。注意需安装
grubby软件包。grubby --default-kernel/boot/vmlinuz-3.10.0-957.el7.x86_64执行
grubby --update-kernel命令修改内核配置。grubby --args="transparent_hugepage=never" --update-kernel /boot/vmlinuz-3.10.0-957.el7.x86_64注意--update-kernel后需要使用实际的默认内核版本。执行
grubby --info命令查看修改后的默认内核配置。grubby --info /boot/vmlinuz-3.10.0-957.el7.x86_64注意--info后需要使用实际的默认内核版本。index=0 kernel=/boot/vmlinuz-3.10.0-957.el7.x86_64 args="ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=en_US.UTF-8 transparent_hugepage=never" root=/dev/mapper/centos-root initrd=/boot/initramfs-3.10.0-957.el7.x86_64.img title=CentOS Linux (3.10.0-957.el7.x86_64) 7 (Core)修改当前的内核配置立即关闭透明大页。
echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag配置 udev 脚本应用 IO 调度器策略。
vi /etc/udev/rules.d/60-tidb-schedulers.rulesACTION=="add|change", SUBSYSTEM=="block", ENV{ID_SERIAL}=="36d0946606d79f90025f3e09a0c1fc035", ATTR{queue/scheduler}="noop" ACTION=="add|change", SUBSYSTEM=="block", ENV{ID_SERIAL}=="36d0946606d79f90025f3e09a0c1f9e81", ATTR{queue/scheduler}="noop"应用 udev 脚本。
udevadm control --reload-rules udevadm trigger --type=devices --action=change创建 CPU 节能策略配置服务。
cat >> /etc/systemd/system/cpupower.service << EOF [Unit] Description=CPU performance [Service] Type=oneshot ExecStart=/usr/bin/cpupower frequency-set --governor performance [Install] WantedBy=multi-user.target EOF应用 CPU 节能策略配置服务。
systemctl daemon-reload systemctl enable cpupower.service systemctl start cpupower.service
执行以下命令验证透明大页的状态。
cat /sys/kernel/mm/transparent_hugepage/enabledalways madvise [never]执行以下命令验证数据目录所在磁盘的 I/O 调度器。
cat /sys/block/sd[bc]/queue/scheduler[noop] deadline cfq [noop] deadline cfq执行以下命令查看 cpufreq 模块选用的节能策略。
cpupower frequency-info --policyanalyzing CPU 0: current policy: frequency should be within 1.20 GHz and 3.10 GHz. The governor "performance" may decide which speed to use within this range.执行以下命令修改 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执行以下命令配置用户的 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 部署工具会自动配置 SSH 互信及免密登录,可忽略本段内容。
以
root用户依次登录到部署目标机器创建tidb用户并设置登录密码。useradd tidb && \ passwd tidb执行以下命令,将
tidb ALL=(ALL) NOPASSWD: ALL添加到文件末尾,即配置好 sudo 免密码。visudotidb ALL=(ALL) NOPASSWD: ALL以
tidb用户登录到中控机,执行以下命令。将10.0.1.1替换成你的部署目标机器 IP,按提示输入部署目标机器tidb用户密码,执行成功后即创建好 SSH 互信,其他机器同理。新建的tidb用户下没有.ssh目录,需要执行生成 rsa 密钥的命令来生成.ssh目录。如果要在中控机上部署 TiDB 组件,需要为中控机和中控机自身配置互信。ssh-keygen -t rsa ssh-copy-id -i ~/.ssh/id_rsa.pub 10.0.1.1以
tidb用户登录中控机,通过ssh的方式登录目标机器 IP。如果不需要输入密码并登录成功,即表示 SSH 互信配置成功。ssh 10.0.1.1[tidb@10.0.1.1 ~]$以
tidb用户登录到部署目标机器后,执行以下命令,不需要输入密码并切换到root用户,表示tidb用户 sudo 免密码配置成功。sudo -su root[root@10.0.1.1 tidb]#
安装 numactl 工具
本段主要介绍如何安装 NUMA 工具。在生产环境中,因为硬件机器配置往往高于需求,为了更合理规划资源,会考虑单机多实例部署 TiDB 或者 TiKV。NUMA 绑核工具的使用,主要为了防止 CPU 资源的争抢,引发性能衰退。
- NUMA 绑核是用来隔离 CPU 资源的一种方法,适合高配置物理机环境部署多实例使用。
- 通过
tiup cluster deploy完成部署操作,就可以通过exec命令来进行集群级别管理工作。
安装 NUMA 工具有两种方法:
方法 1:登录到目标节点进行安装(以 CentOS Linux release 7.7.1908 (Core) 为例)。
方法 2:通过 tiup cluster exec 在集群上批量安装 NUMA。
使用 TiUP 安装 TiDB 集群,参考使用 TiUP 部署 TiDB 集群完成
tidb-test集群的部署。如果本地已有集群,可跳过这一步。tiup cluster deploy tidb-test v6.0.0 ./topology.yaml --user root [-p] [-i /home/root/.ssh/gcp_rsa]执行
tiup cluster exec命令,以sudo权限在tidb-test集群所有目标主机上安装 NUMA。tiup cluster exec tidb-test --sudo --command "yum -y install numactl"你可以执行
tiup cluster exec --help查看的tiup cluster exec命令的说明信息。
[转帖]TiDB 环境与系统配置检查的更多相关文章
- Linux或UNIX系统配置检查
1. Linux或UNIX系统配置检查 系统配置的扫描是基于被动式策略进行扫描,主要检测主机上是否存在配置错误或者不符合预定义的安全策略的配置,通常需要管理员权限才能执行的扫描. 在Linux或UNI ...
- 生产环境使用 pt-table-checksum 检查MySQL数据一致性【转】
公司数据中心从托管机房迁移到阿里云,需要对mysql迁移(Replication)后的数据一致性进行校验,但又不能对生产环境使用造成影响,pt-table-checksum 成为了绝佳也是唯一的检查工 ...
- SQL Server 2005 无法连接到WMI提供程序 无法执行 SQL Server 系统配置检查器
无法连接到WMI提供程序.你没有权限或者该服务器无法访问/cannot connect to WMI provider. You do not have permission or the--由于计算 ...
- SqlServer2008安装时系统配置检查器重新启动计算机失败
系统:win7 64 旗舰版 软件版本:sqlserver 2008 在安装前执行:系统配置检查器 的时候报错 ‘重新启动计算机失败’,如下图 处理办法: RebootRequiredCheck ...
- PHP环境安全性能检查
PHP环境安全性能检查 PHP在Linux环境下安全配置是一个复杂的过程,其中涉及到很多的细节设置,在这里发出来一个脚本,通过这个脚本来检测你的PHP环境是否存在安全隐患,从而针对这些对你的PHP环境 ...
- [转帖]Linux 硬件和系统配置查看命令小结
https://blog.csdn.net/strongwangjiawei/article/details/8208825 转帖了不少 发现自己记住的还是不多.. Linux 硬件和系统配置查看命令 ...
- 生产环境使用 pt-table-checksum 检查MySQL数据一致性
公司数据中心从托管机房迁移到阿里云,需要对mysql迁移(Replication)后的数据一致性进行校验,但又不能对生产环境使用造成影响,pt-table-checksum 成为了绝佳也是唯一的检查工 ...
- 服务端测试环境hosts配置检查脚本
[本文出自天外归云的博客园] 问题 由于A测试环境和B测试环境相互耦合,B测试环境切换导致我方测试环境需要更改后台服务器的响应配置.若多台服务器中有一台服务器没有更改配置,则在测试过程中将会出现问题. ...
- [转帖]Linux环境变量设置方法总结 PATH、LD_LIBRARY_PATH
Linux环境变量设置方法总结 PATH.LD_LIBRARY_PATH 2018年01月17日 21:10:26 晨至曦 阅读数 7548 https://blog.csdn.net/qq_1900 ...
- Intel oneAPI 环境变量设置
因工作需要,需要在linux系统配置多个不同环境的库,需要使用environment-modules工具管理环境变量,为保持配置方法的一致性,也使用modulefile文件加载Intel oneAPI ...
随机推荐
- Linux的期末冲刺
选择 一.Linux基础 Linux目录结构 相关命令: cd, ls, pwd 详解: Linux 目录结构采用树状结构,根目录为 /.用户的帐户信息保存在 /etc/passwd 文件中,包括用户 ...
- 【K8S系列】如何高效查看 k8s日志
序言 你只管努力,其他交给时间,时间会证明一切. 文章标记颜色说明: 黄色:重要标题 红色:用来标记结论 绿色:用来标记一级论点 蓝色:用来标记二级论点 Kubernetes (k8s) 是一个容器编 ...
- 斯坦福 UE4 C++ ActionRoguelike游戏实例教程 02.AI自定义任务和观察器中断
斯坦福课程 UE4 C++ ActionRoguelike游戏实例教程 0.绪论 概述 本文章对应课程第十一章 42节.这篇文章会进一步地为AI添加新功能,创建自定义任务,允许AI发射子弹,并且讲解观 ...
- 《RAPL: A Relation-Aware Prototype Learning Approach for Few-Shot Document-Level Relation Extraction》阅读笔记
代码 原文地址 预备知识: 1.什么是元学习(Meta Learning)? 元学习或者叫做"学会学习"(Learning to learn),它是要"学会如何学 ...
- AI 图像自动补全 Uncrop 工具介绍
ClipDrop Uncrop是一款基于AI的图像自动补全工具,由StabilityAI旗下的Clipdrop开发.通过利用StableDiffusionXL开发的算法和深度学习技术,Uncrop可以 ...
- 探究Python源码,终于弄懂了字符串驻留技术
摘要:在本文中,我们将深入研究 Python 的内部实现,并了解 Python 如何使用一种名为字符串驻留(String Interning)的技术,实现解释器的高性能. 每种编程语言为了表现出色,并 ...
- html5鼠标拖动排序及resize实现方案分析及实践
对列表进行拖动排序,尺寸改变.之前一般会使用jQuery-UI.其通过mousedown.mousemove.mouseup这三个事件来实现页面元素被鼠标拖拽的效果.vue-drag-resize v ...
- A/B 实验避坑指南:为什么不建议开 AABB 实验
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 本文将针对日常开设 A/B 实验过程中一个不太合理的使用方法--AABB 实验进行详细的解释,告诉大家为什么不建议 ...
- 火山引擎ByteHouse助力中国地震台网中心,快速构建一站式实时数仓
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,并进入官方交流群 近日,中国地震台网中心与火山引擎达成合作,双方将围绕 ByteHouse 实时数仓展开合作. 中国地震台网中心为中国地震局 ...
- Python Type Hints 从入门到实践
Python 想必大家都已经很熟悉了,甚至关于它有用或者无用的论点大家可能也已经看腻了.但是无论如何,它作为一个将加入高考科目的语言还是有它独到之处的,今天我们就再展开聊聊 Python. Pytho ...