[转帖]tidb集群部署
http://blog.itpub.net/29785807/viewspace-2789852/
一.安装规划
|
1
2
3
4
5
6
|
使用15台服务器5台tidb服务器:每台3个tidb实例+1个pd+1个pump 10台tikv服务器:每台4个tikv实例drainer_servers 安装在第一台tidb机器上grafana_servers 安装在3台中控机alertmanager_servers 安装在3台中控机 |
二.服务器规划
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
业务IP 心跳IP services 主机名 10.10.10.101 10.100.100.101tidb&pd&pump xx-xxtidb-db0110.10.10.10210.100.100.102tidb&pd&pump xx-xxtidb-db0210.10.10.103 10.100.100.103tidb&pd&pump xx-xxtidb-db0310.10.10.104 10.100.100.104tidb&pd&pump xx-xxtidb-db0410.10.10.105 10.100.100.105tidb&pd&pump xx-xxtidb-db0510.10.10.10610.100.100.106tikv xx-xxtikv-db0110.10.10.10710.100.100.107tikv xx-xxtikv-db0210.10.10.10810.100.100.108tikv xx-xxtikv-db0310.10.10.10910.100.100.109tikv xx-xxtikv-db0410.10.10.11010.100.100.110tikv xx-xxtikv-db0510.10.10.111 10.100.100.111 tikv xx-xxtikv-db06 10.10.10.112 10.100.100.112 tikv xx-xxtikv-db07 10.10.10.113 10.100.100.113 tikv xx-xxtikv-db08 10.10.10.114 10.100.100.114 tikv xx-xxtikv-db09 10.10.10.115 10.100.100.115 tikv xx-xxtikv-db10 |
三.安装前配置
|
1
2
3
4
5
6
7
8
9
10
11
|
1.关闭SWAP2.安装numactl工具3.创建data目录4.检查及关闭防火墙5.检查并关闭透明大页6.I/O 调度器7.创建tidb用户8.设置sudo9.配置互信10.TiDB/PD机器挂载数据盘11.安装前再次检查 |
1.关闭SWAP
|
1
2
3
|
检测及关闭系统swap(所有机器)cat /etc/sysctl.conf |grep vm.swappiness检测及关闭系统 swap(所有机器) |
|
1
2
3
4
5
6
7
8
|
echo "vm.min_free_kbytes = 6291456" >> /etc/sysctl.conf echo "vm.swappiness = 0">> /etc/sysctl.confswapoff -a && swapon -asysctl -pvi /etc/fstab删除swap行vi /etc/fstab /dev/mapper/vg_srv-lv_swap swap swap defaults 0 0 --删除 |
2.安装numactl工具
|
1
2
3
4
|
在生产环境中,因为硬件机器配置往往高于需求,为了更合理规划资源,会考虑单机多实例部署TiDB或者TiKV。NUMA 绑核工具的使用,主要为了防止 CPU 资源的争抢,引发性能衰退。登录到目标节点进行安装(以 CentOS Linux release 7.7.1908 (Core) 为例)sudo yum -y install numact |
l 3.创建data目录
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
vgslvcreate -L 2000G -n lv_data vg_srvlvsmkfs.ext4 /dev/vg_srv/lv_datamkdir /dataecho '/dev/mapper/vg_srv-lv_data /data ext4 defaults 0 0' >> /etc/fstab mount -adf -hlvcreate -L 2000G -n lv_data vg_srv Multiple VGs found with the same name: skipping vg_srv Use --select vg_uuid=<uuid> in place of the VG name.vgs VG #PV #LV #SN Attr VSize VFree vg_srv 1 7 0 wz--n- 3.81t <3.46t vg_srv 1 7 0 wz--n- <893.86g 527.66g |
4.检查及关闭防火墙
|
1
2
3
4
5
6
7
8
9
|
检查防火墙状态(以 CentOS Linux release 7.7.1908 (Core) 为例)sudo firewall-cmd --statesudo systemctl status firewalld.service关闭防火墙服务sudo systemctl stop firewalld.service关闭防火墙自动启动服务sudo systemctl disable firewalld.service检查防火墙状态sudo systemctl status firewalld.service |
5.检查并关闭透明大页
检查结果:
15台机器都没关闭透明大页
|
1
2
3
4
5
6
7
8
9
10
|
vim /etc/rc.local touch /var/lock/subsys/localif test -f /sys/kernel/mm/transparent_hugepage/enabled;thenecho never > /sys/kernel/mm/transparent_hugepage/enabledfiif test -f /sys/kernel/mm/transparent_hugepage/defrag;thenecho never > /sys/kernel/mm/transparent_hugepage/defragfi[root@sy-xxtikv-db09 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled[always] madvise never |
|
1
2
3
|
重启主机,检查透明大页# cat /sys/kernel/mm/transparent_hugepage/enabledalways madvise [never] |
6.I/O 调度器
|
1
2
3
4
5
6
7
8
9
|
lsblk将存储介质的I/O调度器设置为noop。对于高速SSD存储介质,内核的I/O调度操作会导致性能损失。将调度器设置为noop后,内核不做任何操作,直接将I/O请求下发给硬件,以获取更好的性能。同时,noop调度器也有较好的普适性。为调整CPU频率的cpufreq模块选用performance模式。将CPU频率固定在其支持的最高运行频率上,不进行动态调节,可获取最佳的性能。执行以下命令查看数据目录所在磁盘的I/O调度器。假设在sdb、sdc两个磁盘上创建了数据目录。 |
|
1
2
3
4
|
cat /sys/block/sda/queue/scheduler[noop] deadline cfqvi /etc/rc.local echo noop > /sys/block/sda/queue/scheduler |
执行以下命令查看cpufreq模块选用的节能策略。
|
1
2
3
4
|
cpupower frequency-info --policy #####确保是performanceanalyzing 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. |
7.创建tidb用户
|
1
2
3
4
|
useradd tidbecho "*****" | passwd --stdin tidb passwd tidb chown -R tidb.tidb /data |
8.设置sudo
执行以下命令,将 tidb ALL=(ALL) NOPASSWD:ALL添加到文件末尾,即配置好sudo免密码。
visudo
tidb ALL=(ALL) NOPASSWD:ALL
9.配置互信
手动配置SSH互信及sudo免密码
中控机和其他机器配置互信
tidb+tikv
以 root 用户依次登录到部署目标机器创建 tidb 用户并设置登录密码。(所有机器)
以 tidb 用户登录到中控机,执行以下命令, 创建 ssh key, 提示 Enter passphrase 时直接回车即可
cd .ssh/
ls
###ssh-keygen -t rsa 不需要在执行,已经有了
以 tidb 用户登录到中控机,执行以下命令。
将IP替换成你的部署目标机器 IP,按提示输入部署目标机器 tidb 用户密码,执行成功后即创建好SSH互信,其他机器同理。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
su - tidbssh-copy-id -i .ssh/id_rsa.pub 10.100.100.101ssh-copy-id -i .ssh/id_rsa.pub 10.100.100.102ssh-copy-id -i .ssh/id_rsa.pub 10.100.100.103ssh-copy-id -i .ssh/id_rsa.pub 10.100.100.104ssh-copy-id -i .ssh/id_rsa.pub 10.100.100.105ssh-copy-id -i .ssh/id_rsa.pub 10.100.100.106ssh-copy-id -i .ssh/id_rsa.pub 10.100.100.107ssh-copy-id -i .ssh/id_rsa.pub 10.100.100.108ssh-copy-id -i .ssh/id_rsa.pub 10.100.100.109ssh-copy-id -i .ssh/id_rsa.pub 10.100.100.110ssh-copy-id -i .ssh/id_rsa.pub 10.100.100.111ssh-copy-id -i .ssh/id_rsa.pub 10.100.100.112ssh-copy-id -i .ssh/id_rsa.pub 10.100.100.113ssh-copy-id -i .ssh/id_rsa.pub 10.100.100.114ssh-copy-id -i .ssh/id_rsa.pub 10.100.100.115 |
互信测试:
以 tidb 用户登录中控机,通过 ssh 的方式登录目标机器 IP。
如果不需要输入密码并登录成功,即表示 SSH 互信配置成功。
sudo测试:
|
1
2
|
以 tidb 用户登录到部署目标机器后,执行以下命令,不需要输入密码并切换到 root 用户,表示 tidb 用户 sudo 免密码配置成功。(所有机器)sudo su - |
10.TiDB/PD机器挂载数据盘
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
tidb:df -hlsblkmkfs.ext4 /dev/sdamkfs.ext4 /dev/nvme1n1mkdir -p /data/tidb-xx/pump/mkdir -p /data/tidb-xx/pdtidb:fs.shmount -aTiKV机器挂载数据盘tikv:df -hlsblkmkfs.ext4 /dev/nvme1n1mkfs.ext4 /dev/nvme2n1mkfs.ext4 /dev/nvme3n1mkfs.ext4 /dev/nvme4n1mkdir -p /data/tidb-xx/tikv1mkdir -p /data/tidb-xx/tikv2mkdir -p /data/tidb-xx/tikv3mkdir -p /data/tidb-xx/tikv4tikv:fs.shmount -a |
挂载tidb磁盘脚本如下:
|
1
2
3
4
5
6
|
cat fs.sh #!/bin/bashA="`lsblk -f | grep nvme1 | awk -F ' ' '{print $3}' `"echo "UUID=$A /data/tidb-xx/pump/ ext4 defaults,nodelalloc,noatime 0 0">> /etc/fstabi="`lsblk -f | grep sda | awk -F ' ' '{print $3}' `"echo "UUID=$i /data/tidb-xx/pd/ ext4 defaults,nodelalloc,noatime 0 0">> /etc/fstab |
挂载tikv磁盘
|
1
2
3
4
5
6
7
8
9
10
11
|
[root@sy-xxtikv-db01 ~]# cat fs.sh #!/bin/bashA="`lsblk -f | grep nvme1 | awk -F ' ' '{print $3}' `"echo "UUID=$A /data/tidb-xx/tikv1 ext4 defaults,nodelalloc,noatime 0 0">> /etc/fstab j="`lsblk -f | grep nvme2 | awk -F ' ' '{print $3}'`"echo "UUID=$j /data/tidb-xx/tikv2 ext4 defaults,nodelalloc,noatime 0 0">> /etc/fstabk="`lsblk -f | grep nvme3 | awk -F ' ' '{print $3}'`"echo "UUID=$k /data/tidb-xx/tikv3 ext4 defaults,nodelalloc,noatime 0 0">> /etc/fstabl="`lsblk -f | grep nvme4 | awk -F ' ' '{print $3}'`"echo "UUID=$l /data/tidb-xx/tikv4 ext4 defaults,nodelalloc,noatime 0 0">> /etc/fstab |
执行以下命令查看磁盘的唯一标识 ID_SERIAL
#udevadm info --name=/dev/sdb | grep ID_SERIAL
# 如果多个磁盘都分配了数据目录,需要多次执行以上命令,记录所有磁盘各自的唯一标识。
11.检查并调整limits.conf
|
1
2
3
4
5
6
|
vi /etc/security/limits.conf#####ADD FOR TIDB##########tidb soft nofile 1000000tidb hard nofile 1000000tidb soft core unlimitedtidb soft stack 10240 |
12.安装前再次检查
tidb检查
|
1
2
3
4
|
systemctl status fierwalld.servicesystemctl status ntpd.servicecpupower frequency-info --policycat /etc/selinux/config |
tikv需检查
|
1
2
3
4
5
6
7
8
9
10
11
12
|
cat /sys/block/nvme1n1/queue/schedulercat /sys/block/nvme2n1/queue/schedulercat /sys/block/nvme3n1/queue/schedulercat /sys/block/nvme4n1/queue/schedulercat /sys/block/nvme1n1/queue/scheduler[none] mq-deadline kyber cat /sys/block/nvme2n1/queue/scheduler[none] mq-deadline kyber cat /sys/block/nvme3n1/queue/scheduler[none] mq-deadline kyber cat /sys/block/nvme4n1/queue/scheduler[none] mq-deadline kyber |
tidb:
|
1
2
|
cat /sys/block/sda/queue/schedulercat /sys/block/nvme1n1/queue/scheduler |
四.部署集群
部署集群(中控机)
1.准备topology_xx_v4.0.12.yaml配置文件
2.开始部署
|
1
2
|
# tiup cluster deploy xxpool v4.0.12-20210427./topology.yamltiup cluster deploy xxpool v4.0.12-20210427 topology_xx_v4.0.12.yaml --user tidb |
注:
v4.0.12-20210427安装包是那个版本就是写那个版本的
如果没有指定 -i 参数,会提示输入远程机器的登录密码,如果 key 包含 passphrase,则会提示输入。
五.参数优化
1.启动集群
tiup cluster start xxpool
2.参数优化
|
1
2
3
4
5
6
7
8
9
10
11
12
|
mysql -u root -h 10.100.100.101 -P 4000 -p *****set @@global.tidb_opt_insubq_to_join_and_agg=1;set @@global.tidb_mem_quota_query=34359738368;set @@global.tidb_enable_table_partition='off';set @@global.tidb_enable_telemetry='0';set @@global.tidb_disable_txn_auto_retry='0';set @@global.tidb_allow_batch_cop='0';set @@global.tidb_multi_statement_mode='1';set @@global.sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';set @@global.tidb_skip_isolation_level_check='1';set @@global.tidb_retry_limit='100';set password for root@'%'=password('*******'); |
[转帖]tidb集群部署的更多相关文章
- Tiup离线安装TIDB集群4.0.16版本
环境:centos7.6 中控机:8.213.8.25(内网) 可用服务器8.213.8.25-8.213.8.29 一.准备 TiUP 离线组件包 方法1:外网下载离线安装包拷贝进内网服务器 在Ti ...
- 部署TiDB集群
架构图 节点规划 120.52.146.213 Control Machine 120.52.146.214 PD1_TiDB1 120.52.146.215 PD2_TiDB2 120.52.146 ...
- Centos7配置TiDB集群
一:各模块属性 模块名称 状态 建议实例数 功能 负载均衡组件 TiDB 无状态 2 接收SQL请求,处理SQL相关逻辑,并通过PB找到存储数据的TiKV地址 LVS.HAProxy.F5 PB 集群 ...
- 在线安装TIDB集群
在线安装TiDB集群 服务器准备 说明:TiDB8需要能够连接外网,以便下载各类安装包 TiDB4非必须,但最好是有一台,因为后续测试Mysql数据同步或者进行性能比较时,都要用到 TiKV最好是采 ...
- TIDB数据集群部署
TIDB 数据库集群 一.TiDB数据介绍 1.1.TiDB数据简介 TiDB 是 PingCAP 公司设计的开源分布式 HTAP (Hybrid Transactional and Analytic ...
- 使用 Docker Compose 快速构建 TiDB 集群
本文档介绍如何在单机上通过 Docker Compose 快速一键部署一套 TiDB 测试集群.Docker Compose 可以通过一个 YAML 文件定义多个容器的应用服务,然后一键启动或停止. ...
- TiDB集群安装主要操作
TiDB集群安装主要操作 参考资料:https://www.cnblogs.com/plyx/archive/2018/12/21/10158615.html 一.TiDB数据简介 TiDB 是 Pi ...
- tidb集群
tidb ansible部署 https://zhuanlan.zhihu.com/p/27308307?refer=newsql 网址:http://www.cnblogs.com/mowei/p/ ...
- openstack高可用集群21-生产环境高可用openstack集群部署记录
第一篇 集群概述 keepalived + haproxy +Rabbitmq集群+MariaDB Galera高可用集群 部署openstack时使用单个控制节点是非常危险的,这样就意味着单个节 ...
- Quartz.net持久化与集群部署开发详解
序言 我前边有几篇文章有介绍过quartz的基本使用语法与类库.但是他的执行计划都是被写在本地的xml文件中.无法做集群部署,我让它看起来脆弱不堪,那是我的罪过. 但是quart.net是经过许多大项 ...
随机推荐
- 人大金仓驱动包kingbasejdbc8.6.0.jar V8驱动jar包
人大金仓驱动包kingbasejdbc8.6.0.jar V8驱动jar包 工作上要将kingbaseV8数据库整合到项目,我在官网找了半天,连个jdbc驱动包下载入口都找不到,简直就是官方文档毫无诚 ...
- Azure Data Factory(十一)Data Flow 的使用解析
一,引言 上一篇文字,我们初步对 Data Flow 有个简单的了解,也就是说可以使用 Data Flow 完成一些复杂的逻辑,如,数据计算,数据筛选,数据清洗,数据整合等操作,那我们今天就结合 Da ...
- JSON字符串中获取一个特定字段的值
第一种 import com.google.gson.JsonObject; import com.google.gson.JsonParser; String json="{\" ...
- 从热爱到深耕,全国Top10开源软件出品人探索“开源云上行”
本文分享自华为云社区<[先锋开发者云上说]从热爱到深耕,全国Top10开源软件出品人探索"开源云上行">,作者:华为云社区精选. <2022-2023 中国开源开 ...
- 连Python都不熟也能跑通AI人脸识别?“隐藏Boss”竟是它!
摘要:先把AI人脸识别跑起来,然后研究它是如何实现的,整个过程中确实收获不少.所谓先跟着做,再跟着学,实践与理论结合,自己感觉有理解了一些基础概念入个门,在此分享一下自己的捣鼓经验. 1.买台小&qu ...
- 盘点华为云GaussDB(for Redis)六大秒级能力
摘要:盘点高斯Redis的秒级能力,包括扩容.备份.删除.启动等. 本文分享自华为云社区<华为云GaussDB(for Redis)揭秘第20期:六大秒级能力盘点>,作者: 高斯Redis ...
- 解密GaussDB(for Influx)时序洞察
摘要:GaussDB(for Influx)是一款基于华为自研的计算存储分离架构,兼容InfluxDB生态的云原生NoSQL时序数据库,提供一站式时序数据存储.分析.展示功能.其中时序洞察提供了针对时 ...
- SimpleDateFormat线程不安全了?这里有5种解决方案
摘要:我们知道SimpleDateFormat是线程不安全,本文会介绍多种解决方案来保证线程安全. 本文分享自华为云社区<java的SimpleDateFormat线程不安全出问题了,虚竹教你多 ...
- 空间数据库基础理论 GIS空间数据处理分析涉及的基本概念
<空间数据库>课程整理汇总,106篇课程,内容太长,学习中,把一些关键点,汇总记下笔记 地理空间 GIS中的地理空间(Geo-spatial)是指经过投影变换后,在笛卡尔坐标系中的地球表层 ...
- Solon:Hello world!
Solon:Hello world! (一)新建一个 maven 空项目 (二)添加 maven 引用 <dependency> <groupId>org.noear</ ...