合 在不同主机安装TiDB集群
其它内容可以参考:
- 【DB宝54】NewSQL数据库之TiDB简介 :https://www.dbaup.com/dbbao54newsqlshujukuzhitidbjianjie.html
- 【DB宝57】使用Docker-Compose快速部署TiDB集群环境:https://www.dbaup.com/dbbao57shiyongdocker-composekuaisubushutidbjiqunhuanjing.html
- 使用TiUP快速部署TiDB上手环境(在同一个主机上安装TiDB集群–使用TiUP Playground方式):https://www.dbaup.com/shiyongtiupkuaisubushutidbshangshouhuanjing.html
- 在同一个主机上安装集群(非TiUP Playground方式):https://www.dbaup.com/zaitongyigezhujishanganzhuangjiqunfeitiup-playgroundfangshi.html
参考:https://docs.pingcap.com/zh/tidb/stable/hardware-and-software-requirements
环境规划
具体配置如下所示:
主机名 | IP | 端口 | 主机映射端口 | 作用 |
---|---|---|---|---|
lhrpd1 | 172.16.6.11 | 2379/2380 | 22311 | PD1 |
lhrpd2 | 172.16.6.12 | 2379/2380 | 22312 | PD2 |
lhrpd3 | 172.16.6.13 | 2379/2380 | 22313 | PD3 |
lhrtikv1 | 172.16.6.14 | 20160/20180 | TiKV1 | |
lhrtikv2 | 172.16.6.15 | 20160/20180 | TiKV2 | |
lhrtikv3 | 172.16.6.16 | 20160/20180 | TiKV3 | |
lhrtidb1 | 172.16.6.17 | 4000/10080 | 24000 | TiDB1 |
lhrtidb2 | 172.16.6.18 | 4001/10081 | 24001 | TiDB2 |
lhrtiflash1 | 172.16.6.21 | TiFlash1 | ||
lhrtiflash2 | 172.16.6.22 | TiFlash2 | ||
lhrticdc1 | 172.16.6.23 | 8300 | TiCDC1 | |
lhrticdc2 | 172.16.6.24 | 8300 | TiCDC2 | |
lhrtidbmonitor | 172.16.6.25 | 9090,3000,9093/9094 | 39090,33000,3399,3400 | Prometheus + Grafana + Alertmanager + 中控机 + HAProxy |
环境申请
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | docker network create --subnet=172.16.6.0/16 lhrtidb-network docker network inspect lhrtidb-network docker rm -f lhrpd1 lhrpd2 lhrpd3 lhrtidb1 lhrtidb2 lhrtikv1 lhrtikv2 lhrtikv3 lhrtiflash1 lhrtiflash2 lhrticdc1 lhrticdc2 lhrtidbmonitor # 申请PD docker run -d --name lhrpd1 -h lhrpd1 \ --net=lhrtidb-network --ip 172.16.6.11 \ -p 22311:2379 -p 23389:3389 \ -v /sys/fs/cgroup:/sys/fs/cgroup \ --privileged=true lhrbest/lhrcentos76:8.5 \ /usr/sbin/init docker run -d --name lhrpd2 -h lhrpd2 \ --net=lhrtidb-network --ip 172.16.6.12 \ -p 22312:2379 -p 23390:3389 \ -v /sys/fs/cgroup:/sys/fs/cgroup \ --privileged=true lhrbest/lhrcentos76:8.5 \ /usr/sbin/init docker run -d --name lhrpd3 -h lhrpd3 \ --net=lhrtidb-network --ip 172.16.6.13 \ -p 22313:2379 -p 23391:3389 \ -v /sys/fs/cgroup:/sys/fs/cgroup \ --privileged=true lhrbest/lhrcentos76:8.5 \ /usr/sbin/init # 申请TiKV docker run -d --name lhrtikv1 -h lhrtikv1 \ --net=lhrtidb-network --ip 172.16.6.14 \ -v /sys/fs/cgroup:/sys/fs/cgroup \ --privileged=true lhrbest/lhrcentos76:8.5 \ /usr/sbin/init docker run -d --name lhrtikv2 -h lhrtikv2 \ --net=lhrtidb-network --ip 172.16.6.15 \ -v /sys/fs/cgroup:/sys/fs/cgroup \ --privileged=true lhrbest/lhrcentos76:8.5 \ /usr/sbin/init docker run -d --name lhrtikv3 -h lhrtikv3 \ --net=lhrtidb-network --ip 172.16.6.16 \ -v /sys/fs/cgroup:/sys/fs/cgroup \ --privileged=true lhrbest/lhrcentos76:8.5 \ /usr/sbin/init # 申请TiDB docker run -d --name lhrtidb1 -h lhrtidb1 \ --net=lhrtidb-network --ip 172.16.6.17 \ -p 24000:4000 \ -v /sys/fs/cgroup:/sys/fs/cgroup \ --privileged=true lhrbest/lhrcentos76:8.5 \ /usr/sbin/init docker run -d --name lhrtidb2 -h lhrtidb2 \ --net=lhrtidb-network --ip 172.16.6.18 \ -p 24001:4000 \ -v /sys/fs/cgroup:/sys/fs/cgroup \ --privileged=true lhrbest/lhrcentos76:8.5 \ /usr/sbin/init # 申请TiFLash docker run -d --name lhrtiflash1 -h lhrtiflash1 \ --net=lhrtidb-network --ip 172.16.6.21 \ -v /sys/fs/cgroup:/sys/fs/cgroup \ --privileged=true lhrbest/lhrcentos76:8.5 \ /usr/sbin/init docker run -d --name lhrtiflash2 -h lhrtiflash2 \ --net=lhrtidb-network --ip 172.16.6.22 \ -v /sys/fs/cgroup:/sys/fs/cgroup \ --privileged=true lhrbest/lhrcentos76:8.5 \ /usr/sbin/init # 申请TiCDC docker run -d --name lhrticdc1 -h lhrticdc1 \ --net=lhrtidb-network --ip 172.16.6.23 \ -v /sys/fs/cgroup:/sys/fs/cgroup \ --privileged=true lhrbest/lhrcentos76:8.5 \ /usr/sbin/init docker run -d --name lhrticdc2 -h lhrticdc2 \ --net=lhrtidb-network --ip 172.16.6.24 \ -v /sys/fs/cgroup:/sys/fs/cgroup \ --privileged=true lhrbest/lhrcentos76:8.5 \ /usr/sbin/init # 申请中控机 docker run -d --name lhrtidbmonitor -h lhrtidbmonitor \ --net=lhrtidb-network --ip 172.16.6.25 \ -p 3399-3400:3399-3400 -p 39090:9090 -p 33000:3000 -p 33389:3389 \ -v /sys/fs/cgroup:/sys/fs/cgroup \ --privileged=true lhrbest/lhrcentos76:8.5 \ /usr/sbin/init # docker network connect bridge lhrtidbmonitor docker exec -it lhrtidbmonitor bash |
环境配置
配置NTP
TiDB 是一套分布式数据库系统,需要节点间保证时间的同步,从而确保 ACID 模型的事务线性一致性。目前解决授时的普遍方案是采用 NTP 服务,可以通过互联网中的 pool.ntp.org
授时服务来保证节点的时间同步,也可以使用离线环境自己搭建的 NTP 服务来解决授时。
这里以“172.16.6.25”为时间服务器,其它几台OBServer同步该机器的时间:
1 2 3 4 | yum install ntp ntpdate -y ntpq -4p ntpstat timedatectl |
修改“172.16.6.25”为时间服务器/etc/ntp.conf
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | # For more information about this file, see the man pages # ntp.conf(5), ntp_acc(5), ntp_auth(5), ntp_clock(5), ntp_misc(5), ntp_mon(5). driftfile /var/lib/ntp/drift #新增:日志目录 logfile /var/log/ntpd.log # Permit time synchronization with our time source, but do not # permit the source to query or modify the service on this system. restrict default nomodify notrap nopeer noquery # Permit all access over the loopback interface. This could # be tightened as well, but to do so would effect some of # the administrative functions. restrict 127.0.0.1 restrict ::1 #新增:这一行的含义是授权172.72.8.0网段上的所有机器可以从这台机器上查询和同步时间. restrict 172.72.8.0 mask 255.255.255.0 nomodify notrap # Hosts on local network are less restricted. #restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap # Use public servers from the pool.ntp.org project. # Please consider joining the pool (http://www.pool.ntp.org/join.html). #server 0.centos.pool.ntp.org iburst #server 1.centos.pool.ntp.org iburst #server 2.centos.pool.ntp.org iburst #server 3.centos.pool.ntp.org iburst #新增:时间服务器列表. server 0.cn.pool.ntp.org iburst server 1.cn.pool.ntp.org iburst server 2.cn.pool.ntp.org iburst server 3.cn.pool.ntp.org iburst #新增:当外部时间不可用时,使用本地时间 server 127.0.0.1 iburst fudge 127.0.0.1 stratum 10 #broadcast 192.168.1.255 autokey # broadcast server #broadcastclient # broadcast client #broadcast 224.0.1.1 autokey # multicast server #multicastclient 224.0.1.1 # multicast client #manycastserver 239.255.254.254 # manycast server #manycastclient 239.255.254.254 autokey # manycast client # Enable public key cryptography. #crypto includefile /etc/ntp/crypto/pw # Key file containing the keys and key identifiers used when operating # with symmetric key cryptography. keys /etc/ntp/keys # Specify the key identifiers which are trusted. #trustedkey 4 8 42 # Specify the key identifier to use with the ntpdc utility. #requestkey 8 # Specify the key identifier to use with the ntpq utility. #controlkey 8 # Enable writing of statistics records. #statistics clockstats cryptostats loopstats peerstats # Disable the monitoring facility to prevent amplification attacks using ntpdc # monlist command when default restrict does not include the noquery flag. See # CVE-2013-5211 for more details. # Note: Monitoring will not be disabled with the limited restriction flag. disable monitor |
配置开机启动:
1 2 3 4 5 6 7 8 9 10 | systemctl enable ntpd systemctl is-enabled ntpd ntpdate -u 1.cn.pool.ntp.org systemctl restart ntpd [root@lhrobproxy /]# ntpstat synchronised to NTP server (84.16.73.33) at stratum 2 time correct to within 98 ms polling server every 64 s |
其它客户端,修改“/etc/ntp.conf”,注释server开头的行,并添加如下行:
1 2 3 4 5 6 7 | server 172.16.6.25 restrict 172.16.6.25 nomodify notrap noquery server 127.0.0.1 fudge 127.0.0.1 stratum 10 |
配置开机启动:
1 2 | systemctl enable ntpd systemctl restart ntpd |
客户端配置自动同步:
1 2 | crontab -e * * * * * /usr/sbin/ntpdate -u 172.16.6.25 & > /dev/null |
检查和配置操作系统优化参数
在生产系统的 TiDB 中,建议对操作系统进行如下的配置优化:
- 关闭透明大页(即 Transparent Huge Pages,缩写为 THP)。数据库的内存访问模式往往是稀疏的而非连续的。当高阶内存碎片化比较严重时,分配 THP 页面会出现较高的延迟。
- 将存储介质的 I/O 调度器设置为 noop。对于高速 SSD 存储介质,内核的 I/O 调度操作会导致性能损失。将调度器设置为 noop 后,内核不做任何操作,直接将 I/O 请求下发给硬件,以获取更好的性能。同时,noop 调度器也有较好的普适性。
- 为调整 CPU 频率的 cpufreq 模块选用 performance 模式。将 CPU 频率固定在其支持的最高运行频率上,不进行动态调节,可获取最佳的性能。
1 2 3 | cat /sys/kernel/mm/transparent_hugepage/enabled cat /sys/block/sd[bc]/queue/scheduler cpupower frequency-info --policy |
内核参数修改
所有目标主机都配置:
1 2 3 4 5 6 7 8 9 10 11 | echo "fs.file-max = 1000000">> /etc/sysctl.conf echo "net.core.somaxconn = 32768">> /etc/sysctl.conf echo "vm.overcommit_memory = 1">> /etc/sysctl.conf sysctl -p cat << EOF >>/etc/security/limits.conf tidb soft nofile 1000000 tidb hard nofile 1000000 tidb soft stack 32768 tidb hard stack 32768 EOF |
创建用户及 sudo 免密码
所有目标主机都配置:
1 2 3 4 5 | useradd tidb echo "tidb:lhr" | chpasswd echo "tidb ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers |
设置无密码SSH登陆
可以使用rac上的sshUserSetup.sh快速配置,只在中控机lhrtidbmonitor上运行:
1 | sh sshUserSetup.sh -user tidb -hosts "lhrpd1 lhrpd2 lhrpd3 lhrtikv1 lhrtikv2 lhrtikv3 lhrtidb1 lhrtidb2 lhrtiflash1 lhrtiflash2 lhrticdc1 lhrticdc2 lhrtidbmonitor" -advanced exverify -confirm |
安装集群
参考:https://docs.pingcap.com/zh/tidb/stable/production-deployment-using-tiup