二、TiDB部署
一、TiDB环境与系统配置检查
参考官方:https://docs.pingcap.com/zh/tidb/stable
注:
在 TiKV 部署目标机器上添加数据盘 EXT4 文件系统挂载参数
生产环境部署,建议使用 EXT4 类型文件系统的 NVME 类型的 SSD 磁盘存储 TiKV 数据文件。这个配置方案为最佳实施方案,其可靠性、安全性、稳定性已经在大量线上场景中得到证实。
注意: 如果你的数据盘已经格式化成 ext4 并挂载了磁盘,可先执行 umount /dev/nvme0n1p1 命令卸载,从编辑 /etc/fstab 文件步骤开始执行,添加挂载参数重新挂载即可。
TIDB初始化:
1. 查看数据盘。
fdisk -l
2. 创建分区。
parted -s -a optimal /dev/sdb mklabel gpt -- mkpart primary ext4 1 -1
3. 格式化文件系统。
mkfs.ext4 /dev/sdb1
4. 查看数据盘分区 UUID。
[root@localhost ~]# lsblk -f NAME FSTYPE LABEL UUID MOUNTPOINT sdb └─sdb1 ext4 e40b45e1-0199-4363-a6cd-a825c5b62fa4 sr0 iso9660 CentOS 7 x86_64 2020-11-04-11-36-43-00 sda ├─sda2 LVM2_member WrMP0Z-sQ6c-QWiI-auwo-9OxO-UTWK-TZUMW2 │ ├─centos-swap swap f62de652-6b88-4c06-8515-68359aaf574c [SWAP] │ └─centos-root xfs 57abdd87-df42-4dd0-84c2-49b183b59d45 / └─sda1 xfs 8bc11052-0911-4794-879d-3c8ea8076ce3 /boo
5. 编辑 /etc/fstab
文件,添加 nodelalloc
挂载参数。
vi /etc/fstab UUID=e40b45e1-0199-4363-a6cd-a825c5b62fa4 /data1 ext4 defaults,nodelalloc,noatime 0 2 # 这里的UUID填写数据盘sdb1
6. 挂载数据盘。
mkdir /data1 && \ mount -a
7. 执行以下命令,如果文件系统为 ext4,并且挂载参数中包含 nodelalloc
,则表示已生效。
[root@localhost ~]# mount -t ext4 /dev/sdb1 on /data1 type ext4 (rw,noatime,nodelalloc)
二、检测及关闭系统 swap
本段介绍 swap 关闭方法。TiDB 运行需要有足够的内存,并且不建议使用 swap 作为内存不足的缓冲,这会降低性能。因此建议永久关闭系统 swap,并且不要使用 swapoff -a
方式关闭,否则重启机器后该操作会失效。
建议执行以下命令关闭系统 swap:
echo "vm.swappiness = 0">> /etc/sysctl.conf swapoff -a && swapon -a sysctl -p
三、检查和配置操作系统优化参数
在生产系统的 TiDB 中,建议对操作系统进行如下的配置优化:
- 关闭透明大页(即 Transparent Huge Pages,缩写为 THP)。数据库的内存访问模式往往是稀疏的而非连续的。当高阶内存碎片化比较严重时,分配 THP 页面会出现较高的延迟。
- 将存储介质的 I/O 调度器设置为 noop。对于高速 SSD 存储介质,内核的 I/O 调度操作会导致性能损失。将调度器设置为 noop 后,内核不做任何操作,直接将 I/O 请求下发给硬件,以获取更好的性能。同时,noop 调度器也有较好的普适性。
- 为调整 CPU 频率的 cpufreq 模块选用 performance 模式。将 CPU 频率固定在其支持的最高运行频率上,不进行动态调节,可获取最佳的性能。
采用如下步骤检查操作系统的当前配置,并配置系统优化参数:
四、配置系统优化参数
方法一:使用 tuned(推荐)
-
执行
tuned-adm list
命令查看当前操作系统的 tuned 策略。
tuned-adm list
Available 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: balanced
Current 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=noop
include=balanced
表示在现有的 balanced 策略基础上添加操作系统优化配置。
应用新的 tuned 策略。
tuned-adm profile balanced-tidb-optimal
执行以下命令验证透明大页的状态。
cat /sys/kernel/mm/transparent_hugepage/enabled always madvise [never]
执行以下命令修改 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
五、在中控机上安装 TiUP 组件
1. 执行如下命令安装 TiUP 工具:
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
2. 重新声明全局环境变量:
source .bash_profile
3. 确认 TiUP 工具是否安装:
which tiup
4. 安装 TiUP cluster 组件
tiup cluster
5. 初始化集群拓扑文件
tiup cluster template > topology.yaml
示例:
[root@localhost ~]# cat topology.yaml global: user: "tidb" ssh_port: 22 deploy_dir: "/data1/tidb-deploy" data_dir: "/data1/tidb-data" server_configs: {} pd_servers: - host: 192.168.8.23 - host: 192.168.8.24 - host: 192.168.8.25 tidb_servers: - host: 192.168.8.23 - host: 192.168.8.24 - host: 192.168.8.25 tikv_servers: - host: 192.168.8.23 - host: 192.168.8.24 - host: 192.168.8.25 monitoring_servers: - host: 192.168.8.25 grafana_servers: - host: 192.168.8.25 alertmanager_servers: - host: 192.168.8.25
6.
tiup cluster check ./topology.yaml --user root [-p] [-i /home/root/.ssh/gcp_rsa] tiup cluster check ./topology.yaml --apply --user root [-p] [-i /home/root/.ssh/gcp_rsa] tiup cluster check ./topology.yaml --user root -p 密码
tiup cluster deploy tidb-test v5.0.0 ./topology.yaml --user root -p 密码
[root@localhost ~]# tiup cluster list Starting component `cluster`: /root/.tiup/components/cluster/v1.5.6/tiup-cluster list Name User Version Path PrivateKey ---- ---- ------- ---- ---------- tidb-test tidb v5.1.0 /root/.tiup/storage/cluster/clusters/tidb-test /root/.tiup/storage/cluster/clusters/tidb-test/ssh/id_rsa
7. 检查部署的 TiDB 集群情况
tiup cluster display tidb-test
8. 启动集群
tiup cluster start tidb-test
9. 使用MySQL登陆(并修改密码)
[root@localhost ~]# mysql -h 192.168.8.23 -P 4000 -u root MySQL [(none)]> SET PASSWORD FOR 'root'@'%' = '123456'; Query OK, 0 rows affected (0.14 sec)
六、署haproxy 用端口号4400 代理 3台 tidb的4000端口测试
1、安装Haproxy依赖包
yum -y install gcc gcc-c++ make pcre-devel bzip2-devel
2、安装配置Haproxy
yum -y install haproxy
3、验证HAProxy 安装是否成功
[root@localhost ~]# which haproxy /usr/sbin/haproxy
4、备份配置文件
[root@bogon haproxy]# pwd /etc/haproxy [root@bogon haproxy]# cp haproxy.cfg haproxy.cfg.bak
5、修改配置文件haproxy.cfg(可以删除所有内容,复制以下内容)
global log 127.0.0.1 local0 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy nbproc 40 daemon stats socket /var/lib/haproxy/stats defaults log global retries 2 timeout connect 2s timeout client 30000s timeout server 30000s listen admin_stats bind 0.0.0.0:8080 mode http option httplog maxconn 10 stats refresh 30s stats uri /haproxy stats realm HAProxy stats auth admin:pingcap123 stats hide-version stats admin if TRUE listen tidb-cluster bind 0.0.0.0:4400 mode tcp balance leastconn server tidb-1 192.168.7.201:4000 check inter 2000 rise 2 fall 3 server tidb-2 192.168.7.202:4000 check inter 2000 rise 2 fall 3 server tidb-3 192.168.7.203:4000 check inter 2000 rise 2 fall 3
6、systemd 启动 HAProxy,默认读取(推荐)
systemctl start haproxy.service
7、systemd 停止 HAProxy(如果使用 systemd 启动)
systemctl stop haproxy.service
8、安装mysql测试
10、tidb相关命令
mysql> select tidb_version(); # 查看tidb版本 +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | tidb_version() | +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Release Version: v5.1.0 Edition: Community Git Commit Hash: 8acd5c88471cb7b4d4c4a8ed73b4d53d6833f13e Git Branch: heads/refs/tags/v5.1.0 UTC Build Time: 2021-06-24 07:10:32 GoVersion: go1.16.4 Race Enabled: false TiKV Min Version: v3.0.0-60965b006877ca7234adaced7890d7b029ed1306 Check Table Before Drop: false | +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in sett
添加登录用户:
create user myadmin@'%' identified by '123456'; GRANT ALL ON *.* TO myadmin@'%'; # 将所有的权限赋予myadmin用户 mysql> show grants; +----------------------------------------------+ | Grants for User | +----------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'myadmin'@'%' | +----------------------------------------------+ 1 row in set create user myuser@'%' identified by '123456'; GRANT select,insert,update,delete on *.* to myuser@'%'; # 讲增删查改命令赋予myuser用户
删除登录用户:
MySQL [(none)]> drop user myuser@'%'; Query OK, 0 rows affected (0.19 sec)
显示登录用户:
MySQL [(none)]> select user,host from mysql.user;
修改普通用户的密码:(使用root用户进行修改)
MySQL [(none)]> set password for myadmin@'%' = password('654321'); # 将myadmin用户的密码修改为654321 Query OK, 0 rows affected (0.20 sec)
表与系统视图
MySQL [(none)]> show databases; # 查看所有数据库 +--------------------+ | Database | +--------------------+ | INFORMATION_SCHEMA | | METRICS_SCHEMA | | PERFORMANCE_SCHEMA | | mysql | | test | +--------------------+ 5 rows in set (0.00 sec)
MySQL [(none)]> use mysql; # 进入mysql库中 Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed MySQL [mysql]> show tables; # 查看mysql库中所有表 +-------------------------+ | Tables_in_mysql | +-------------------------+ | GLOBAL_VARIABLES | | bind_info | | columns_priv | | db | | default_roles | | expr_pushdown_blacklist | | gc_delete_range | | gc_delete_range_done | | global_grants | | global_priv | | help_topic | | opt_rule_blacklist | | role_edges | | schema_index_usage | | stats_buckets | | stats_extended | | stats_feedback | | stats_fm_sketch | | stats_histograms | | stats_meta | | stats_top_n | | tables_priv | | tidb | | user | +-------------------------+ 24 rows in set (0.00 sec)
MySQL [(none)]> show tables from mysql; # 查看mysql库的所有表 +-------------------------+ | Tables_in_mysql | +-------------------------+ | GLOBAL_VARIABLES | | bind_info | | columns_priv | | db | | default_roles | | expr_pushdown_blacklist | | gc_delete_range | | gc_delete_range_done | | global_grants | | global_priv | | help_topic | | opt_rule_blacklist | | role_edges | | schema_index_usage | | stats_buckets | | stats_extended | | stats_feedback | | stats_fm_sketch | | stats_histograms | | stats_meta | | stats_top_n | | tables_priv | | tidb | | user | +-------------------------+ 24 rows in set (0.00 sec)
使用 CREATE DATABASE 语句创建数据库。语法如下:
CREATE DATABASE db_name [options];
CREATE DATABASE IF NOT EXISTS samp_db; 添加 IF NOT EXISTS 可防止发生错误。
DROP DATABASE samp_db;
创建、查看和删除表
使用 CREATE TABLE 语句创建表。语法如下: CREATE TABLE table_name column_name data_type constraint; 例如,要创建一个名为 person 的表,包括编号、名字、生日等字段,可使用以下语句: CREATE TABLE person ( id INT(11), name VARCHAR(255), birthday DATE );
使用 SHOW CREATE 语句查看建表语句,即 DDL。例如:
show PROCESSLIST; #查看系统进程
admin show ddl jobs; #查看ddl
select sleep(3); #查看慢查询
admin show slow top 1
查看权限系统表
MySQL [mysql]> select * from mysql.user\G; *************************** 1. row *************************** Host: % User: root authentication_string: *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 plugin: mysql_native_password Select_priv: Y Insert_priv: Y Update_priv: Y Delete_priv: Y Create_priv: Y Drop_priv: Y Process_priv: Y Grant_priv: Y References_priv: Y Alter_priv: Y Show_db_priv: Y Super_priv: Y Create_tmp_table_priv: Y Lock_tables_priv: Y Execute_priv: Y Create_view_priv: Y Show_view_priv: Y Create_routine_priv: Y Alter_routine_priv: Y Index_priv: Y Create_user_priv: Y Event_priv: Y Trigger_priv: Y Create_role_priv: Y Drop_role_priv: Y Account_locked: N Shutdown_priv: Y Reload_priv: Y FILE_priv: Y Config_priv: Y Create_Tablespace_Priv: Y Repl_slave_priv: Y Repl_client_priv: Y *************************** 2. row *************************** Host: % User: myadmin authentication_string: *2A032F7C5BA932872F0F045E0CF6B53CF702F2C5 plugin: mysql_native_password Select_priv: Y Insert_priv: Y Update_priv: Y Delete_priv: Y Create_priv: Y Drop_priv: Y Process_priv: Y Grant_priv: N References_priv: Y Alter_priv: Y Show_db_priv: Y Super_priv: Y Create_tmp_table_priv: Y Lock_tables_priv: Y Execute_priv: Y Create_view_priv: Y Show_view_priv: Y Create_routine_priv: Y Alter_routine_priv: Y Index_priv: Y Create_user_priv: Y Event_priv: Y Trigger_priv: Y Create_role_priv: Y Drop_role_priv: Y Account_locked: N Shutdown_priv: Y Reload_priv: Y FILE_priv: Y