TiDB的搭建与维护过程
TiDB的搭建与维护过程
背景
总结一下TiDB的搭建以及简单维护过程.
目标: 简单快速的创建TiDB数据库,以及进行备份恢复等工作.
TiDB 简介
TiDB(全称:Ti Distributed Database)是一款开源的分布式数据库系统,
由PingCAP公司开发。它是一种基于分布式架构的新型关系数据库,
融合了传统关系数据库的ACID特性和分布式数据库的可扩展性、高可用性和分布式事务特性。
TiDB以MySQL协议为基础,与MySQL兼容,可以无缝替代传统的关系型数据库。
它的最大不同是它的存储和计算部分是分离的,存储节点称为TiKV,计算节点称为TiDB。
TiKV是以分布式的方式将数据存储在多个节点上,而TiDB负责存储计划的解析与执行。
这种架构使得TiDB具备了良好的水平扩展性和高并发处理能力。
TiDB拥有强大的分布式特性,支持数据的自动分片与迁移,
可以根据负载自动扩容与缩容,从而实现了无需停机的横向扩展。
它还支持跨数据中心的数据复制,保证了数据的高可用性和容灾能力。
此外,TiDB还具备分布式事务的支持,可以提供全局的事务一致性。
除了以上特性,TiDB还集成了一些高级功能,
如分布式查询优化、在线数据扩容、自动故障转移等,以满足复杂的业务需求。
总之,TiDB是一个具备分布式特性、高可用性和水平扩展能力的开源分布式数据库系统,
为用户提供了一种全新的数据库解决方案。
环境准备
1. 机器名
2. ssh互信
3. /etc/hosts
4. ulimit配置
5. selinux设置
5. 防火墙设置
6. 其他设置
7. 关闭透明大页
8. 修改IO调度器
9. 创建用户/ssh互信
10.挂载磁盘等.
11.内核参数优化
部分环境准备内容
1. 用户相关
useradd tidb
passwd tidb
visudo
tidb ALL=(ALL) NOPASSWD: ALL
ssh-keygen
ssh-copy-id tidb@tidb01
su - tidb
ssh-copy-id tidb@tidb01
2. 部分设置
关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
临时关闭
setenforce 0
查看状态
getenforce
ulimit 的设置
vi /etc/security/limits.conf
tidb hard nproc 65536
tidb soft nproc 65536
tidb soft nofile 1000000
tidb hard nofile 1000000
tidb soft stack 32768
tidb hard stack 32768
临时设置
ulimit -HSn 65536
检查
ulimit -a
内核参数相关
vim /etc/sysctl.conf
kernel.sysrq=0
net.ipv4.ip_forward=0
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.default.send_redirects=0
net.ipv4.conf.all.accept_source_route=0
net.ipv4.conf.default.accept_source_route=0
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.default.accept_redirects=0
net.ipv4.conf.all.secure_redirects=0
net.ipv4.conf.default.secure_redirects=0
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.icmp_ignore_bogus_error_responses=1
net.ipv4.conf.all.rp_filter=1
net.ipv4.conf.default.rp_filter=1
net.ipv4.tcp_syncookies=1
kernel.dmesg_restrict=1
net.ipv6.conf.all.accept_redirects=0
net.ipv6.conf.default.accept_redirects=0
net.ipv4.tcp_syncookies=0
vm.swappiness=0
vm.vfs_cache_pressure=200
vm.dirty_background_ratio=5
vm.dirty_ratio=10
vm.dirty_expire_centisecs=1500
vm.dirty_writeback_centisecs=300
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.ip_local_port_range = 2000 65000
net.core.somaxconn = 32768
net.ipv4.tcp_max_syn_backlog = 4096
文件系统相关
关闭swap
swapoff -a
永久关闭swap
vi /etc/fstab
删除 swap一行.
挂载其他硬盘
mkdir -p {/data1,/data2,/data3}
初始化卷
fdisk -l |grep "/dev"
查看为挂载的硬盘
然后执行
fdisk /dev/vdb 等磁盘初始化
选择 n 新建分区. P 分区. w写入就可以.
lsblk 查看带挂载的信息
mkfs.ext4 /dev/vdb1
mkfs.ext4 /dev/vdc1
mkfs.ext4 /dev/vdd1
开机自动挂载的设置
vim /etc/fstab中新增加
/dev/vdb1 /data1 ext4 defaults,noatime,nodiratime,nodelalloc 0 0
/dev/vdc1 /data2 ext4 defaults,noatime,nodiratime,nodelalloc 0 0
/dev/vdd1 /data3 ext4 defaults,noatime,nodiratime,nodelalloc 0 0
修改一下文件属主:
chown tidb:tidb /data1 -R
chown tidb:tidb /data2 -R
chown tidb:tidb /data3 -R
文件调度器与透明大页
修改磁盘调度器模式
注意 需要改 /etc/rc.d/rc.local 可执行权限
chmod 700 /etc/rc.d/rc.local
cat /sys/block/vda/queue/scheduler
永久设置
关闭透明大页
vi /etc/rc.d/rc.local
if test -f /sys/kernel/mm/transparent_hugepage/enabled;then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag;then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
echo none > /sys/block/vda/queue/scheduler
echo none > /sys/block/vdb/queue/scheduler
echo none > /sys/block/vdc/queue/scheduler
echo none > /sys/block/vdd/queue/scheduler
# 可以将 echo none 也添加进来 none 是centos8 的叫法
查看方式
cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/block/vda/queue/scheduler
# 需要重启后验证
安装部分软件
yum install numactl sysstat ntp -y
关闭防火墙
systemctl disable firewalld && systemctl stop firewalld
systemctl disable cockpit.socket && systemctl stop cockpit.socket
ntpdate ntp.aliyun.com
crontab -e
1 */4 * * * ntpdate ntp.aliyun.com
systemctl enable --now crond
检查项目合计
systemctl status firewalld
cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/block/vda/queue/scheduler
ulimit -a
getenforce
安装过程
上传安装包到 一台机器
比如我使用的版本是 7.2 第一步安装软件
cd tidb-community-toolkit-v7.2.0-linux-amd64
执行命令:
./local_install.sh
然后进行处理一下:
source /root/.bash_profile
# 注意离线安装的话 需要 toolkit和server 放到一起不然会提示缺少很多component
# 在线与离线安装的命令基本上一样.
# 最大的不同点是 mirror 是本地的文件,还是外部的地址.
配置文件
global:
user: "tidb"
ssh_port: 22
deploy_dir: "/deploy/tidb"
data_dir: "/data1"
server_configs:
pd:
replication.enable-placement-rules: true
pd_servers:
- host: 172.16.39.101
- host: 172.16.39.102
- host: 172.16.39.103
tidb_servers:
- host: 172.16.39.101
- host: 172.16.39.102
- host: 172.16.39.103
tikv_servers:
- host: 172.16.39.101
- host: 172.16.39.102
- host: 172.16.39.103
tiflash_servers:
- host: 172.16.39.103
data_dir: /data2,/data3
cdc_servers:
- host: 172.16.39.101
- host: 172.16.39.102
- host: 172.16.39.103
monitoring_servers:
- host: 172.16.39.103
grafana_servers:
- host: 172.16.39.103
alertmanager_servers:
- host: 172.16.39.103
在线安装
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
安装 tiup
source /root/.bash_profile
tiup mirror show
安装 cluster
tiup install cluster
升级到最新
tiup update --self && tiup update cluster
tiup update --all 升级所有.
执行一下检查
tiup cluster check ./tidb_cluster.yaml --user tidb -i /home/tidb/.ssh/id_rsa
查看 tidb的版本:
tiup list tidb
进行安装: 最新的稳定是 7.2.0 20230629.
tiup cluster deploy erptidb v7.2.0 ./tidb_cluster.yaml --user tidb -i /home/tidb/.ssh/id_rsa
启动命令为:
tiup cluster start erptidb --init
建立本地的 仓库的方法
tiup mirror clone tidb-community-server-7.2.0-linux-amd64 7.2.0 --os=linux --arch=amd64
arm的话 可以直接使用.
tiup mirror clone tidb-community-server-7.2.0-linux-amd64 7.2.0 --os=linux --arch=arm64
设置镜像的路径:
tiup mirror set /shared_data/tiup
tiup mirror set https://tiup-mirror.example.com/
默认监控信息
http://172.16.39.102:2379/dashboard
默认用户 root 密码为空
http://172.16.39.103:3000/
默认用户 admin 密码 admin
登录数据库以及修改密码:
mysql -u root -p -P 4000 -h 172.16.39.101
默认是空密码 回车就可以登录.
show databases;
set password for 'root'@'%' = 'Test20131127' ;
flush privileges ;
tiup的部分运维操作
tiup cluster list
# 查看集群列表
tiup cluster start $cluster_name
# 启动集群
tiup cluster start ${cluster-name} -R pd
# 单独启动组件
tiup cluster start $cluster_name -N 1.2.3.4:2379,1.2.3.5:2379
# 单独重启某几台机器上面的特定组件.
tiup cluster display $cluster-name
# 查看集群状态
tiup cluster stop $cluster-name
# 关闭集群
tiup cluster stop ${cluster-name} -N 1.2.3.4:4000,1.2.3.5:4000
# 关闭tidb组件 注意 4000 也是 mysql客户端使用的端口.
tiup cluster clean ${cluster-name} --all
# 清理所有的数据
TiDB快速处理参数硬件参数的方法
useradd tidb
echo Test20131127 | passwd --stdin tidb
sed -i '/tidb/d' /etc/sudoers
echo "tidb ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
sed -i '/^tidb/d' /etc/security/limits.conf
echo "tidb hard nproc 65536
tidb soft nproc 65536
tidb soft nofile 1000000
tidb hard nofile 1000000
tidb soft stack 32768
tidb hard stack 32768" >> /etc/security/limits.conf
scp /etc/sysctl.conf /etc/sysctl.conf_$(date +%Y%m%d%H%M)
cat > /etc/sysctl.conf <<EOF
kernel.sysrq=0
net.ipv4.ip_forward=1
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.default.send_redirects=0
net.ipv4.conf.all.accept_source_route=0
net.ipv4.conf.default.accept_source_route=0
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.default.accept_redirects=0
net.ipv4.conf.all.secure_redirects=0
net.ipv4.conf.default.secure_redirects=0
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.icmp_ignore_bogus_error_responses=1
net.ipv4.conf.all.rp_filter=1
net.ipv4.conf.default.rp_filter=1
net.ipv4.tcp_syncookies=1
kernel.dmesg_restrict=1
net.ipv6.conf.all.accept_redirects=0
net.ipv6.conf.default.accept_redirects=0
net.ipv4.tcp_syncookies=0
vm.swappiness=0
vm.vfs_cache_pressure=200
vm.dirty_background_ratio=5
vm.dirty_ratio=10
vm.dirty_expire_centisecs=1500
vm.dirty_writeback_centisecs=300
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.ip_local_port_range = 2000 65000
net.core.somaxconn = 32768
net.ipv4.tcp_max_syn_backlog = 4096
vm.max_map_count=262144
EOF
sysctl -p
cat > /etc/systemd/system/cpupower.service <<EOF
[Unit]
Description=CPU powersave
[Service]
Type=oneshot
ExecStart=/usr/bin/cpupower -c all frequency-set -g performance
[Install]
WantedBy=multi-user.target
EOF
systemctl enable --now cpupower
swapoff -a
scp /etc/fstab /etc/fstab_$(date +%Y%m%d%H%M)
sed -i '/swap/d' /etc/fstab
# 需要注意这个命令一定要注意安全 必须测试完再重启, 先备份文件
sed -i '/scheduler/d' /etc/rc.d/rc.local
sed -i '/transparent_hugepage/d' /etc/rc.d/rc.local
echo "echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo none > /sys/block/vda/queue/scheduler
echo none > /sys/block/vdb/queue/scheduler
echo none > /sys/block/vdc/queue/scheduler " > /etc/rc.d/rc.local
chmod 777 /etc/rc.d/rc.local
systemctl disable firewalld && systemctl stop firewalld
systemctl disable cockpit.socket && systemctl stop cockpit.socket
yum install -y ntpdate
cat >/etc/cron.d/ntpdate <<EOF
1 */4 * * * ntpdate ntp.aliyun.com
EOF
systemctl enable --now crond
创建时建议手工介入的脚本
挂载新的硬盘
mkdir /data01 /data02
fdisk /dev/vdb
fdisk /dev/vdc
mkfs.ext4 /dev/vdb1
mkfs.ext4 /dev/vdc1
然后挂载新的硬盘
# 方式2
mkdir /data01 /data02
parted /dev/vdc mklabel gpt
parted /dev/vdc mkpart primary ext4 2048s 100%
parted /dev/vdb mklabel gpt
parted /dev/vdb mkpart primary ext4 2048s 100%
mkfs.ext4 /dev/vdb1
mkfs.ext4 /dev/vdc1
echo "/dev/vdb1 /data01 ext4 defaults,noatime,nodiratime,nodelalloc 0 0
/dev/vdc1 /data02 ext4 defaults,noatime,nodiratime,nodelalloc 0 0" >> /etc/fstab
注意可以给将目录廷加上对应的用户权限
chown tidb:tidb /data01 -R
chown tidb:tidb /data02 -R
参数优化部分-需要根据配置单独的配置进行优化
server_configs:
tidb:
log.file.max-days: 1
log.level: error
performace:
max-procs: 4
server-memory-quota: 4G
allow-expression-index: true
tikv:
log.file.max-days: 1
log.level: error
readpool.unified.max-thread-count: 8
storage.block-cache.capacity: 3G
pd:
replication.enable-placement-rules: true
tidb_dashboard: {}
tiflash:
performance.max-procs: 4
tiflash-learner: {}
pump: {}
drainer: {}
cdc: {}
kvcdc: {}
grafana: {}
其他配置
SET GLOBAL tidb_ignore_prepared_cache_close_stmt=on;
SET GLOBAL tidb_enable_fast_analyze=1 ;
SET GLOBAL tidb_rc_read_check_ts=on ;
SET config pd `replication.max-replicas`=1;
SET config tikv `txn-local-latches`=false;
set config tikv `raftstore.apply-pool-size` = 16 ;
set config tikv `raftstore.store-pool-size` = 16 ;
SET GLOBAL tidb_auto_analyze_start_time='01:00 +0000' ;
SET GLOBAL tidb_auto_analyze_end_time='03:00 +0000' ;
SET config tikv `log.level` = 'CRITICAL';
SET config pd `log.level` = 'error';
SET GLOBAL sql_mode='NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
SET GLOBAL tidb_server_memory_limit = "8GB";
SET GLOBAL tidb_mem_quota_query = 1<< 30;
SET GLOBAL tidb_multi_statement_mode='ON' ;
SET GLOBAL tidb_enable_tiflash_read_for_write_stmt=ON;
set GLOBAL tidb_max_tiflash_threads = 4 ;
set @@global.tidb_disable_txn_auto_retry = 0;
set @@global.tidb_retry_limit = 10;
set GLOBAL tidb_partition_prune_mode = `dynamic`;
set global tidb_enable_noop_functions=1 ;
set global sql_require_primary_key=off;
# 注意以下参数与分区表冲突
set GLOBAL tidb_scatter_region=true ;
下载与安装之二
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
/root/.bash_profile
tiup cluster check /deploy/tidb_cluster.yaml --user tidb -i /home/tidb/.ssh/id_rsa
tiup cluster deploy erptidb v6.5.3 /deploy/tidb_cluster.yaml --user tidb -i /home/tidb/.ssh/id_rsa
# 启动命令为:
tiup cluster start erptidb --init
使用mysql登录并且修改密码
alter user root@'%' identified by 'SomePassword' ;
tiup install br:v6.5.3 安装备份恢复软件
tiup install ctl:v6.5.3
增加环境变量 便于后续处理
cat > /etc/profile.d/tidb.sh <<EOF
export PATH=$PATH:/root/.tiup/components/br/v6.5.3:/root/.tiup/components/ctl/v6.5.3
EOF
source /etc/profile.d/tidb.sh
备份恢复数据库
备份
now=`date +%Y%m%d%H`
export AWS_ACCESS_KEY_ID=minioadmin
export AWS_SECRET_ACCESS_KEY=minioadmin
ssh root@192.168.255.65 "mkdir -p /data/minio/data/tidb25574${now}"
time /root/.tiup/components/br/v7.2.0/br backup full -f '*.*' -f '!information_schema.*' -f '!emetrics_schema.*' --pd "192.168.254.72:2379" --storage "s3://tidb25574${now}" --s3.endpoint "http://192.168.255.65:9000" --send-credentials-to-tikv=true --log-file backupfull.log
恢复 可以单个数据库, 单个表回复, 也可以完整恢复
注意恢复时 数据库建议是空的.
export AWS_ACCESS_KEY_ID=minioadmin
export AWS_SECRET_ACCESS_KEY=minioadmin
/root/.tiup/components/br/v7.2.0/br restore db --db ERPDATA_ZZ_DEV_0001 --pd "192.168.254.72:2379" --storage "s3://tidb255742023100823" --s3.endpoint "http://192.168.255.65:9000" --send-credentials-to-tikv=true --log-file restore
计划任务备份与处理
crontab -e
1 23 * * * /deploy/br
清理方式
find /minio/data -maxdepth 1 ! -path "/minio/data/.minio.sys" -mtime +5 -exec rm -rf {} \;
设置计划任务:
1 4 * * * /deploy/diskclean
TiDB的搭建与维护过程的更多相关文章
- mybatis学习笔记(五) -- maven+spring+mybatis从零开始搭建整合详细过程(附demo和搭建过程遇到的问题解决方法)
文章介绍结构一览 一.使用maven创建web项目 1.新建maven项目 2.修改jre版本 3.修改Project Facts,生成WebContent文件夾 4.将WebContent下的两个文 ...
- 深入理解Fabric环境搭建的详细过程
博主之前的文章都是教大家怎么快速的搭建一个Fabric的环境,但是其中大量的工作都隐藏到了官方的脚本中,并不方便大家深入理解其中的过程,所以博主这里就将其中的过程一步步分解,方便大家! 前面的准备工作 ...
- mybatis学习笔记(六) -- maven+spring+mybatis从零开始搭建整合详细过程(下)
继续 mybatis学习笔记(五) -- maven+spring+mybatis从零开始搭建整合详细过程(上) 五.使用监听器启动Spring容器 1.修改pom.xml文件,添加Spring-we ...
- 深入理解Fabric环境搭建的详细过程(转)
前面的准备工作我就不用多说了,也就是各种软件和开发环境的安装,安装好以后,我们git clone下来最新的代码,并切换到v1.0.0,并且下载好我们需要使用的docker镜像,也就是到步骤6,接下来我 ...
- git的本质是资源库和版本(资源)目录的维护过程
仓库的本质: 资源+索引. 对git而言,添加到暂存区的过程是,将单个资源的修改副本保存到资源库,同时维护暂存区目录的过程. git的本质是资源库和版本目录的维护过程. 一.要素 1.资源 2.副本 ...
- vue-cli3.0 脚手架搭建项目的过程详解
1.安装vue-cli 3.0 ? 1 2 3 npm install -g @vue/cli # or yarn global add @vue/cli 安装成功后查看版本:vue -V(大写的V) ...
- Nginx搭建反向代理服务器过程详解
一.反向代理:Web服务器的“经纪人” 1.1 反向代理初印象 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从 ...
- Nginx 搭建反向代理服务器过程详解
1.1 反向代理初印象 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet ...
- CentOS7使用yum详细搭建zabbix3.2过程
本文引用于:http://blog.csdn.net/s3275492383/article/details/62417210 一.准备搭建环境: 1.系统:CentOS7 2.默认有使用linux服 ...
- Docker 企业级镜像仓库 Harbor 的搭建与维护
目录 一.什么是 Harbor 二.Harbor 安装 2.1.Harbor 安装环境 2.2.Harbor安装 2.3 配置HTTPS 三.Harbor 的使用 3.1.登录Harbor并使用 3. ...
随机推荐
- openstack云基础架构
openstack搭建及基本配置 节点servera: 配置好yum后 yum -y update 更新yum仓库 安装openstack yum -y install openstack-packs ...
- MySQL进阶篇:详解存储引擎InnoDB
本篇基础环境是使用navicat 12和Mysql8.0 MySQL进阶篇:第一章_一.二_存储引擎特点_InnoDB 1.1 存储引擎特点 1.1.1 InnoDB 1). 介绍 InnoDB是一种 ...
- C++篇:第九章_字符串_知识点大全
C++篇为本人学C++时所做笔记(特别是疑难杂点),全是硬货,虽然看着枯燥但会让你收益颇丰,可用作学习C++的一大利器 九.字符串 可以用[ ]进行下标访问 使用string类需将头文件包含在程序中, ...
- GaussDB(DWS)集群中寻找节点CPU占用高的语句
摘要:本文主要通过实例讲解如何通过gs_cpuwatcher.sh 脚本寻找CPU占用高语句. 本文分享自华为云社区<GaussDB(DWS) gs_cpuwatcher.sh 脚本如何寻找CP ...
- Ubuntu 安装 MySQL 5.7
一.安装MySQL 1. 删除Mysql 数据库 sudo apt autoremove --purge mysql-server-* sudo apt remove mysql-server sud ...
- Java FTP操作
pom引用: <dependency> <groupId>commons-net</groupId> <artifactId>commons-net&l ...
- vmware中 centos 突然不能联网,ens33丢失,见了鬼了..........
本人笔记本上vmware中centos允许一直很稳定,今天启动centos准备docker打包,结果发现不能联网了!!! ifconfig一下,发现ens33没了,见鬼了吧! 于是一通vmware虚拟 ...
- 【Boost】Windows 下个人在配置 Boost 踩到的坑以及解决方案
要编译的 Boost 版本:1.82.0 假设 Boost 的根目录为 ${boost_root}$ 如果不想编译可以使用博主编译后的Boost:https://pan.baidu.com/s/1s2 ...
- #1241: Oil Deposits(八向搜索 + 并查集)
Oil Deposits Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
- L3-013 非常弹的球 (30 分) (math)
刚上高一的森森为了学好物理,买了一个"非常弹"的球.虽然说是非常弹的球,其实也就是一般的弹力球而已.森森玩了一会儿弹力球后突然想到,假如他在地上用力弹球,球最远能弹到多远去呢?他不 ...