tidb叢集部署
###敏感資料已刪除###
一.安裝規劃
使用15臺伺服器 5臺tidb伺服器:每臺3個tidb例項+1個pd+1個pump 10臺tikv伺服器:每臺4個tikv例項 drainer_servers 安裝在第一臺tidb機器上 grafana_servers 安裝在3臺中控機 alertmanager_servers 安裝在3臺中控機
二.伺服器規劃
業務IP 心跳IP services 主機名 10.10.10.101 10.100.100.101tidb&pd&pump xx-xxtidb-db01 10.10.10.10210.100.100.102tidb&pd&pump xx-xxtidb-db02 10.10.10.103 10.100.100.103tidb&pd&pump xx-xxtidb-db03 10.10.10.104 10.100.100.104tidb&pd&pump xx-xxtidb-db04 10.10.10.105 10.100.100.105tidb&pd&pump xx-xxtidb-db05 10.10.10.10610.100.100.106tikv xx-xxtikv-db01 10.10.10.10710.100.100.107tikv xx-xxtikv-db02 10.10.10.10810.100.100.108tikv xx-xxtikv-db03 10.10.10.10910.100.100.109tikv xx-xxtikv-db04 10.10.10.11010.100.100.110tikv xx-xxtikv-db05 10.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.關閉SWAP 2.安裝numactl工具 3.建立data目錄 4.檢查及關閉防火牆 5.檢查並關閉透明大頁 6.I/O 排程器 7.建立tidb使用者 8.設定sudo 9.配置互信 10.TiDB/PD機器掛載資料盤 11.安裝前再次檢查
1.關閉SWAP
檢測及關閉系統swap(所有機器) cat /etc/sysctl.conf |grep vm.swappiness 檢測及關閉系統 swap(所有機器)
echo "vm.min_free_kbytes = 6291456" >> /etc/sysctl.conf echo "vm.swappiness = 0">> /etc/sysctl.conf swapoff -a && swapon -a sysctl -p vi /etc/fstab 刪除swap行 vi /etc/fstab /dev/mapper/vg_srv-lv_swap swap swap defaults 0 0 --刪除
2.安裝numactl工具
在生產環境中,因為硬體機器配置往往高於需求,為了更合理規劃資源,會考慮單機多例項部署TiDB或者TiKV。 NUMA 綁核工具的使用,主要為了防止 CPU 資源的爭搶,引發效能衰退。 登入到目標節點進行安裝(以 CentOS Linux release 7.7.1908 (Core) 為例) sudo yum -y install numact
l 3.建立data目錄
vgs lvcreate -L 2000G -n lv_data vg_srv lvs mkfs.ext4 /dev/vg_srv/lv_data mkdir /data echo '/dev/mapper/vg_srv-lv_data /data ext4 defaults 0 0' >> /etc/fstab mount -a df -h lvcreate -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.檢查及關閉防火牆
檢查防火牆狀態(以 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
5.檢查並關閉透明大頁
檢查結果:
15臺機器都沒關閉透明大頁
vim /etc/rc.local touch /var/lock/subsys/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 [root@sy-xxtikv-db09 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled [always] madvise never
重啟主機,檢查透明大頁 # cat /sys/kernel/mm/transparent_hugepage/enabled always madvise [never]
6.I/O 排程器
lsblk 將儲存介質的I/O排程器設定為noop。 對於高速SSD儲存介質,核心的I/O排程操作會導致效能損失。 將排程器設定為noop後,核心不做任何操作,直接將I/O請求下發給硬體,以獲取更好的效能。 同時,noop排程器也有較好的普適性。 為調整CPU頻率的cpufreq模組選用performance模式。 將CPU頻率固定在其支援的最高執行頻率上,不進行動態調節,可獲取最佳的效能。 執行以下命令檢視資料目錄所在磁碟的I/O排程器。 假設在sdb、sdc兩個磁碟上建立了資料目錄。
cat /sys/block/sda/queue/scheduler [noop] deadline cfq vi /etc/rc.local echo noop > /sys/block/sda/queue/scheduler
執行以下命令檢視cpufreq模組選用的節能策略。
cpupower frequency-info --policy #####確保是performance analyzing 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使用者
useradd tidb echo "*****" | 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互信,其他機器同理。
su - tidb ssh-copy-id -i .ssh/id_rsa.pub 10.100.100.101 ssh-copy-id -i .ssh/id_rsa.pub 10.100.100.102 ssh-copy-id -i .ssh/id_rsa.pub 10.100.100.103 ssh-copy-id -i .ssh/id_rsa.pub 10.100.100.104 ssh-copy-id -i .ssh/id_rsa.pub 10.100.100.105 ssh-copy-id -i .ssh/id_rsa.pub 10.100.100.106 ssh-copy-id -i .ssh/id_rsa.pub 10.100.100.107 ssh-copy-id -i .ssh/id_rsa.pub 10.100.100.108 ssh-copy-id -i .ssh/id_rsa.pub 10.100.100.109 ssh-copy-id -i .ssh/id_rsa.pub 10.100.100.110 ssh-copy-id -i .ssh/id_rsa.pub 10.100.100.111 ssh-copy-id -i .ssh/id_rsa.pub 10.100.100.112 ssh-copy-id -i .ssh/id_rsa.pub 10.100.100.113 ssh-copy-id -i .ssh/id_rsa.pub 10.100.100.114 ssh-copy-id -i .ssh/id_rsa.pub 10.100.100.115
互信測試:
以 tidb 使用者登入中控機,透過 ssh 的方式登入目標機器 IP。
如果不需要輸入密碼並登入成功,即表示 SSH 互信配置成功。
sudo測試:
以 tidb 使用者登入到部署目標機器後,執行以下命令,不需要輸入密碼並切換到 root 使用者,表示 tidb 使用者 sudo 免密碼配置成功。(所有機器) sudo su -
10.TiDB/PD機器掛載資料盤
tidb: df -h lsblk mkfs.ext4 /dev/sda mkfs.ext4 /dev/nvme1n1 mkdir -p /data/tidb-xx/pump/ mkdir -p /data/tidb-xx/pd tidb: fs.sh mount -a TiKV機器掛載資料盤 tikv: df -h lsblk mkfs.ext4 /dev/nvme1n1 mkfs.ext4 /dev/nvme2n1 mkfs.ext4 /dev/nvme3n1 mkfs.ext4 /dev/nvme4n1 mkdir -p /data/tidb-xx/tikv1 mkdir -p /data/tidb-xx/tikv2 mkdir -p /data/tidb-xx/tikv3 mkdir -p /data/tidb-xx/tikv4 tikv: fs.sh mount -a
掛載tidb磁碟指令碼如下:
cat fs.sh #!/bin/bash A="`lsblk -f | grep nvme1 | awk -F ' ' '{print $3}' `" echo "UUID=$A /data/tidb-xx/pump/ ext4 defaults,nodelalloc,noatime 0 0">> /etc/fstab i="`lsblk -f | grep sda | awk -F ' ' '{print $3}' `" echo "UUID=$i /data/tidb-xx/pd/ ext4 defaults,nodelalloc,noatime 0 0">> /etc/fstab
掛載tikv磁碟
[root@sy-xxtikv-db01 ~]# cat fs.sh #!/bin/bash A="`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/fstab k="`lsblk -f | grep nvme3 | awk -F ' ' '{print $3}'`" echo "UUID=$k /data/tidb-xx/tikv3 ext4 defaults,nodelalloc,noatime 0 0">> /etc/fstab l="`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
vi /etc/security/limits.conf #####ADD FOR TIDB########## tidb soft nofile 1000000 tidb hard nofile 1000000 tidb soft core unlimited tidb soft stack 10240
12.安裝前再次檢查
tidb檢查
systemctl status fierwalld.service systemctl status ntpd.service cpupower frequency-info --policy cat /etc/selinux/config
tikv需檢查
cat /sys/block/nvme1n1/queue/scheduler cat /sys/block/nvme2n1/queue/scheduler cat /sys/block/nvme3n1/queue/scheduler cat /sys/block/nvme4n1/queue/scheduler cat /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:
cat /sys/block/sda/queue/scheduler cat /sys/block/nvme1n1/queue/scheduler
四.部署叢集
部署叢集(中控機)
1.準備topology_xx_v4.0.12.yaml配置檔案
2.開始部署
# tiup cluster deploy xxpool v4.0.12-20210427./topology.yaml tiup 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.引數最佳化
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('*******');
#####chenjuchao 20210901 14:30#####
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29785807/viewspace-2789852/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 從零部署TiDB叢集TiDB
- TiDB小型叢集部署實踐TiDB
- 部署分片叢集
- Tidb 運維--叢集檢視的使用TiDB運維
- docker部署mysql叢集DockerMySql
- Docker部署ElasticSearch叢集DockerElasticsearch
- tidb之dm叢集同步異常處理TiDB
- 管理 ES 叢集:集常見的叢集部署方式
- Redis Cluster叢集模式部署Redis模式
- 二、Linux部署RabbitMQ叢集LinuxMQ
- jmeter 叢集容器化部署JMeter
- 使用docker部署hadoop叢集DockerHadoop
- redis叢集之主從複製叢集的原理和部署Redis
- 基於Ubuntu部署企業級kubernetes叢集---k8s叢集容部署UbuntuK8S
- Redis Cluster叢集模式部署XRedis模式
- 拆除kubeadm部署的Kubernetes 叢集
- Kubernetes部署叢集Mysql服務MySql
- Windows Server上部署IoTdb 叢集WindowsServer
- 使用 Ansible 快速部署 HBase 叢集
- Linux部署hadoop2.7.7叢集LinuxHadoop
- CentOS部署ElasticSearch7.6.1叢集CentOSElasticsearch
- 在 Azure 上部署 Kubernetes 叢集
- 在kubernetes上部署consul叢集
- Redis 4.0叢集環境部署Redis
- TiDB叢集安裝TiDB
- redis叢集之分片叢集的原理和常用代理環境部署Redis
- 【Linux合集】單機部署zk叢集Linux
- 【Redis叢集實戰】Redis Cluster 部署Redis
- KubeSphere 部署 Kafka 叢集實戰指南Kafka
- 將 .NET Aspire 部署到 Kubernetes 叢集
- 在 Azure 中部署 Kubernetes 容器叢集
- TDengine 叢集 多機器docker 部署Docker
- 基於containerd 部署 kubernetes 1.28叢集AI
- 部署spark2.2叢集(standalone模式)Spark模式
- 部署Spark2.2叢集(on Yarn模式)SparkYarn模式
- Ansible部署K8s叢集K8S
- ansible快速部署cassandra3叢集
- kubeadm部署K8S叢集K8S