zoukankan      html  css  js  c++  java
  • tidb集群部署

    tidb集群部署

    原创 国内数据库 作者:chenoracle 时间:2021-09-01 14:50:44  136  0

    ###敏感数据已删除###

    一.安装规划

    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-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
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    1.关闭SWAP
    2.安装numactl工具
    3.创建data目录
    4.检查及关闭防火墙
    5.检查并关闭透明大页
    6.I/O 调度器
    7.创建tidb用户
    8.设置sudo
    9.配置互信
    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.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工具

    1
    2
    3
    4
    在生产环境中,因为硬件机器配置往往高于需求,为了更合理规划资源,会考虑单机多实例部署TiDB或者TiKV。
    NUMA 绑核工具的使用,主要为了防止 CPU 资源的争抢,引发性能衰退。
    登录到目标节点进行安装(以 CentOS Linux release 7.7.1908 (Core) 为例)
    sudo yum -y install numact

    3.创建data目录

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    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.检查及关闭防火墙

    1
    2
    3
    4
    5
    6
    7
    8
    9
    检查防火墙状态(以 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台机器都没关闭透明大页

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    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
    1
    2
    3
    重启主机,检查透明大页
    # cat /sys/kernel/mm/transparent_hugepage/enabled
    always 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 cfq
    vi /etc/rc.local 
    echo noop > /sys/block/sda/queue/scheduler

    执行以下命令查看cpufreq模块选用的节能策略。

    1
    2
    3
    4
    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用户

    1
    2
    3
    4
    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互信,其他机器同理。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    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测试:

    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 -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磁盘脚本如下:

    1
    2
    3
    4
    5
    6
    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磁盘

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [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

    1
    2
    3
    4
    5
    6
    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检查

    1
    2
    3
    4
    systemctl status fierwalld.service
    systemctl status ntpd.service
    cpupower frequency-info --policy
    cat /etc/selinux/config

    tikv需检查

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    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:

    1
    2
    cat /sys/block/sda/queue/scheduler
    cat /sys/block/nvme1n1/queue/scheduler

    四.部署集群

    部署集群(中控机)

    1.准备topology_xx_v4.0.12.yaml配置文件

    2.开始部署

    1
    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.参数优化

    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('*******');
  • 相关阅读:
    字符串与Json操作
    默认让IE用最高文档模式浏览网页
    MVC中简单的文件下载代码
    2017年1月22日
    JDK环境变量设置
    如何实现windows命令提示符的tab补全
    win7热点设置
    为什么小米5不能适配win7
    各种错误锦集
    插头DP
  • 原文地址:https://www.cnblogs.com/yaoyangding/p/15217825.html
Copyright © 2011-2022 走看看