二、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 中,建议对操作系统进行如下的配置优化:

  1. 关闭透明大页(即 Transparent Huge Pages,缩写为 THP)。数据库的内存访问模式往往是稀疏的而非连续的。当高阶内存碎片化比较严重时,分配 THP 页面会出现较高的延迟。
  2. 将存储介质的 I/O 调度器设置为 noop。对于高速 SSD 存储介质,内核的 I/O 调度操作会导致性能损失。将调度器设置为 noop 后,内核不做任何操作,直接将 I/O 请求下发给硬件,以获取更好的性能。同时,noop 调度器也有较好的普适性。
  3. 为调整 CPU 频率的 cpufreq 模块选用 performance 模式。将 CPU 频率固定在其支持的最高运行频率上,不进行动态调节,可获取最佳的性能。

采用如下步骤检查操作系统的当前配置,并配置系统优化参数:

 

四、配置系统优化参数

方法一:使用 tuned(推荐)

  1. 执行 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. 执行 deploy 命令前,先使用 checkcheck --apply 命令,检查和自动修复集群存在的潜在风险:

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 密码

 

执行 deploy 命令部署 TiDB 集群:

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];
例如,要创建一个名为 samp_db 的数据库,可使用以下语句:
CREATE DATABASE IF NOT EXISTS samp_db;
添加 IF NOT EXISTS 可防止发生错误。
使用 DROP DATABASE 语句删除数据库。例如:
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

  

 

posted @ 2021-09-16 10:23  被遗忘的记忆  阅读(477)  评论(0编辑  收藏  举报