黄东旭解析 TiDB 的核心优势
1254
2023-04-11
本文档的部署路线图为:
离线部署 TiDB v5.3.0(TiDB*3、PD*3、TiKV*3);
源码部署 Haproxy v2.5.0
离线升级 TiDB v5.3.0 至 TiDB v5.4.2;
缩扩容 TiDB Server、PD
扩缩容 TiKV、TiFlash
部署 TiSpark(TiSpark*3)
离线升级 TiDB v5.4.2 至 TiDB v6.1
其中,192.168.3.221作为中控机,离线部署TiUP工具、TiDB离线镜像包以及ToolKit镜像包。另如未特殊说明,后续操作均在中控机(192.168.3.221)由root用户执行。
系统镜像挂载
~]# mkdir -p /mnt/yum ~]# mount -o loop /dev/cdrom /mnt/yum如果是光盘ISO文件,可通过mount -o loop /home/hhrs/CentOS-7.9-x86_64-dvd.iso /mnt/yum挂载。
配置本地 repo 源
~]# cat > /etc/yum.repos.d/local.repo << EOF [Packages] name=Redhat Enterprise Linux 7.9 baseurl=file:///mnt/yum/ enabled=1 gpgcheck=0 gpgkey=file:///mnt/yum/RPM-GPG-KEY-redhat-release EOF生成 YUM 缓存
~]# yum clean all ~]# yum makecache中控机(192.168.3.221)创建密钥。设置root用户互信,免密登录各节点。
生成密钥及密钥分发
~]# ssh-keygen -t rsa ~]# ssh-copy-id root@192.168.3.221 ~]# ssh-copy-id root@192.168.3.222 ~]# ssh-copy-id root@192.168.3.223 ~]# ssh-copy-id root@192.168.3.224 ~]# ssh-copy-id root@192.168.3.225 ~]# ssh-copy-id root@192.168.3.226测试免密登陆
for node_ip in 192.168.3.221 192.168.3.222 192.168.3.223 192.168.3.224 192.168.3.225 192.168.3.226 do echo ">>> ${node_ip} Start Login" ssh root@${node_ip} "date" done输出如下内容,说明免密登陆设置成功。
>>> 192.168.3.221 Start Login Fri Aug 12 20:44:03 CST 2022 >>> 192.168.3.222 Start Login Fri Aug 12 20:44:03 CST 2022 >>> 192.168.3.223 Start Login Fri Aug 12 20:44:03 CST 2022 >>> 192.168.3.224 Start Login Fri Aug 12 20:44:03 CST 2022 >>> 192.168.3.225 Start Login Fri Aug 12 20:44:04 CST 2022 >>> 192.168.3.226 Start Login Fri Aug 12 20:44:04 CST 2022每个TiKV节点都要操作,本文档以 /dev/sdb 为数据盘,进行优化。
分区格式化
~]# fdisk -l Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors ~]# parted -s -a optimal /dev/sdb mklabel gpt -- mkpart primary ext4 1 -1 [root@localhost ~]# mkfs.ext4 /dev/sdb1 mke2fs 1.42.9 (28-Dec-2013) Discarding device blocks: done Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 1310720 inodes, 5242368 blocks 262118 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=2153775104 160 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done查看分区的UUID
这里 /dev/sdb1 的 UUID 为 49e00d02-2f5b-4b05-8e0e-ac2f524a97ae
[root@localhost ~]# lsblk -f NAME FSTYPE LABEL UUID MOUNTPOINT sda ├─sda1 ext4 8e0e85e5-fa82-4f2b-a871-26733d6d2995 /boot └─sda2 LVM2_member KKs6SL-IzU3-62b3-KXZd-a2GR-1tvQ-icleoe └─centos-root ext4 91645e3c-486c-4bd3-8663-aa425bf8d89d / sdb └─sdb1 ext4 49e00d02-2f5b-4b05-8e0e-ac2f524a97ae sr0 iso9660 CentOS 7 x86_64 2020-11-04-11-36-43-00分区挂载将数据盘分区/dev/sdb1的挂载信息追加到 /etc/fstab 文件中,注意添加 nodelalloc 挂载参数。
~]# echo "UUID=49e00d02-2f5b-4b05-8e0e-ac2f524a97ae /tidb-data ext4 defaults,nodelalloc,noatime 0 2" >> /etc/fstab ~]# mkdir /tidb-data && mount /tidb-data ~]# mount -t ext4 /dev/mapper/centos-root on / type ext4 (rw,relatime,seclabel,data=ordered) /dev/sda1 on /boot type ext4 (rw,relatime,seclabel,data=ordered) /dev/sdb1 on /tidb-data type ext4 (rw,noatime,seclabel,nodelalloc,data=ordered)中控机(192.168.3.221)root用户执行。因已设置免密登陆,因此可通过如下命令可批量关闭各主机的Swap。
for node_ip in 192.168.3.221 192.168.3.222 192.168.3.223 192.168.3.224 192.168.3.225 192.168.3.226 do echo ">>> ${node_ip}" ssh root@${node_ip} "echo \"vm.swappiness = 0\">> /etc/sysctl.conf" ssh root@${node_ip} "swapoff -a && swapon -a" ssh root@${node_ip} "sysctl -p" done一起执行 swapoff -a 和 swapon -a 命令是为了刷新 swap,将 swap 里的数据转储回内存,并清空 swap 里的数据。
批量关闭各主机SELinux
for node_ip in 192.168.3.221 192.168.3.222 192.168.3.223 192.168.3.224 192.168.3.225 192.168.3.226 do echo ">>> ${node_ip}" ssh root@${node_ip} "setenforce 0" ssh root@${node_ip} "sed -i s#SELINUX=enforcing#SELINUX=disabled#g /etc/selinux/config" ssh root@${node_ip} "sed -i s/^SELINUX=.*/SELINUX=disabled/ /etc/selinux/config" done验证关闭是否生效
for node_ip in 192.168.3.221 192.168.3.222 192.168.3.223 192.168.3.224 192.168.3.225 192.168.3.226 do echo ">>> ${node_ip}" ssh root@${node_ip} "getenforce" done输出如下内容,说明禁用成功。
>>> 192.168.3.221 Disabled >>> 192.168.3.222 Disabled >>> 192.168.3.223 Disabled >>> 192.168.3.224 Disabled >>> 192.168.3.225 Disabled >>> 192.168.3.226 Disabled查看防火墙状态
for node_ip in 192.168.3.221 192.168.3.222 192.168.3.223 192.168.3.224 192.168.3.225 192.168.3.226 do echo ">>> ${node_ip}" ssh root@${node_ip} "firewall-cmd --state" ssh root@${node_ip} "systemctl status firewalld.service" done关闭防火墙
for node_ip in 192.168.3.221 192.168.3.222 192.168.3.223 192.168.3.224 192.168.3.225 192.168.3.226 do echo ">>> ${node_ip}" ssh root@${node_ip} "systemctl stop firewalld.service" ssh root@${node_ip} "systemctl disable firewalld.service" done各主机的预期输出如下:
not running ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: inactive (dead) Docs: man:firewalld(1)确认时区
将时区调整为东八区北京时间
for node_ip in 192.168.3.221 192.168.3.222 192.168.3.223 192.168.3.224 192.168.3.225 192.168.3.226 do echo ">>> ${node_ip}" ssh root@${node_ip} "cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime" done验证时区,各主机预期的时区输出为星期 月份 日 时间 CST 年份,如Fri Aug 12 21:01:34 CST 2022。
for node_ip in 192.168.3.221 192.168.3.222 192.168.3.223 192.168.3.224 192.168.3.225 192.168.3.226 do echo ">>> ${node_ip}" ssh root@${node_ip} "date" done时钟同步
TiDB 是一套分布式数据库系统,需要节点间保证时间的同步,从而确保 ACID 模型的事务线性一致性。可以通过互联网中的 pool.ntp.org 授时服务来保证节点的时间同步,也可以使用离线环境自己搭建的 NTP 服务来解决授时。
这里以向外网pool.ntp.org时间服务器同步为例,内网NTP服务器同理,只需将pool.ntp.org替换为您的NTP服务器主机的IP即可。
for node_ip in 192.168.3.221 192.168.3.222 192.168.3.223 192.168.3.224 192.168.3.225 192.168.3.226 do echo ">>> ${node_ip}" ssh root@${node_ip} "yum install ntp ntpdate" ssh root@${node_ip} "ntpdate pool.ntp.org" ssh root@${node_ip} "systemctl start ntpd.service" ssh root@${node_ip} "systemctl enable ntpd.service" done也可将ntpdate pool.ntp.org时钟同步命令加入各主机crond定时任务中。
以下操作,在所有节点上由root执行。
关闭透明大页( Transparent Huge Pages)
~]# cat /sys/kernel/mm/transparent_hugepage/enabled [always] madvise never需使其返回值为never
优化IO调度假设数据盘为/sdb,需修改调度为noop
~]# cat /sys/block/sdb/queue/scheduler noop [deadline] cfq查看数据盘分区的唯一标识 ID_SERIAL。
~]# udevadm info --name=/dev/sdb | grep ID_SERIAL E: ID_SERIAL=0QEMU_QEMU_HARDDISK_drive-scsi1 E: ID_SERIAL_SHORT=drive-scsi1CPU节能策略The governor "powersave"表示 cpufreq 的节能策略使用 powersave,需要调整为 performance 策略。如果是虚拟机或者云主机,则不需要调整,命令输出通常为 Unable to determine current policy。
~]# cpupower frequency-info --policy analyzing CPU 0: current policy: frequency should be within 1.20 GHz and 3.10 GHz. The governor "powersave" may decide which speed to use within this range.1.3.8.1. 使用 tuned(推荐)以下操作,在所有节点上由root用户执行。
查看当前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: virtual-guest创建新的tuned策略
在当前的tuned策略balanced基础上,追加新的策略。
~]# 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=0QEMU_QEMU_HARDDISK_drive-scsi1) elevator=noop多个磁盘的ID_SERIAL用竖线分割,如:
[disk] devices_udev_regex=(ID_SERIAL=0QEMU_QEMU_HARDDISK_drive-scsi1)|(ID_SERIAL=36d0946606d79f90025f3e09a0c1f9e81) elevator=noop应用新的策略
~]# tuned-adm profile balanced-tidb-optimal验证优化结果
cat /sys/kernel/mm/transparent_hugepage/enabled && \ cat /sys/block/sdb/queue/scheduler && \ cpupower frequency-info --policy注意若tuned关闭THP不生效,可通过如下方式关闭:
查看默认启动内核
~]# grubby --default-kernel /boot/vmlinuz-3.10.0-1160.71.1.el7.x86_64追加关闭THP参数
~]# grubby --args="transparent_hugepage=never" --update-kernel /boot/vmlinuz-3.10.0-1160.71.1.el7.x86_64 ~]# grubby --info /boot/vmlinuz-3.10.0-1160.71.1.el7.x86_64 index=0 kernel=/boot/vmlinuz-3.10.0-1160.71.1.el7.x86_64 args="ro crashkernel=auto spectre_v2=retpoline rd.lvm.lv=centos/root rhgb quiet LANG=en_US.UTF-8 >transparent_hugepage=never" root=/dev/mapper/centos-root initrd=/boot/initramfs-3.10.0-1160.71.1.el7.x86_64.img title=CentOS Linux (3.10.0-1160.71.1.el7.x86_64) 7 (Core)立即关闭THP
~]# echo never > /sys/kernel/mm/transparent_hugepage/enabled ~]# echo never > /sys/kernel/mm/transparent_hugepage/defrag1.3.8.2. 内核优化中控机(192.168.3.221)由用户root执行。
for node_ip in 192.168.3.221 192.168.3.222 192.168.3.223 192.168.3.224 192.168.3.225 192.168.3.226 do echo ">>> ${node_ip}" ssh root@${node_ip} "echo \"fs.file-max = 1000000\" >> /etc/sysctl.conf" ssh root@${node_ip} "echo \"net.core.somaxconn = 32768\" >> /etc/sysctl.conf" ssh root@${node_ip} "echo \"net.ipv4.tcp_tw_recycle = 0\" >> /etc/sysctl.conf" ssh root@${node_ip} "echo \"net.ipv4.tcp_syncookies = 0\" >> /etc/sysctl.conf" ssh root@${node_ip} "echo \"vm.overcommit_memory = 1\" >> /etc/sysctl.conf" ssh root@${node_ip} "sysctl -p" done以下操作,在中控机(192.168.3.221)由用户root执行。
1.3.9.1. 创建用户for node_ip in 192.168.3.221 192.168.3.222 192.168.3.223 192.168.3.224 192.168.3.225 192.168.3.226 do echo ">>> ${node_ip}" ssh root@${node_ip} "useradd tidb && passwd tidb" donetidb用户密码tidb123
1.3.9.2. 资源限制for node_ip in 192.168.3.221 192.168.3.222 192.168.3.223 192.168.3.224 192.168.3.225 192.168.3.226 do echo ">>> ${node_ip}" ssh root@${node_ip} "echo \"tidb soft nofile 1000000\" >> /etc/security/limits.conf" ssh root@${node_ip} "echo \"tidb hard nofile 1000000\" >> /etc/security/limits.conf" ssh root@${node_ip} "echo \"tidb soft stack 32768\" >> /etc/security/limits.conf" ssh root@${node_ip} "echo \"tidb hard stack 32768\" >> /etc/security/limits.conf" done1.3.9.3. sudo权限为 tidb 用户增加免密 sudo 权限
for node_ip in 192.168.3.221 192.168.3.222 192.168.3.223 192.168.3.224 192.168.3.225 192.168.3.226 do echo ">>> ${node_ip}" ssh root@${node_ip} "echo \"tidb ALL=(ALL) NOPASSWD: ALL\" >> /etc/sudoers" donetidb用户登录各目标节点,确认执行sudo - root无需输入密码,即表示添加sudo免密成功。
1.3.9.4. tidb 免密登录tidb用户登录中控机(192.168.3.221)执行:
为tidb用户创建密钥,并分发密钥
~]$ id uid=1000(tidb) gid=1000(tidb) groups=1000(tidb) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 ~]$ ssh-keygen -t rsa ~]$ ssh-copy-id tidb@192.168.3.221 ~]$ ssh-copy-id tidb@192.168.3.222 ~]$ ssh-copy-id tidb@192.168.3.223 ~]$ ssh-copy-id tidb@192.168.3.224 ~]$ ssh-copy-id tidb@192.168.3.225 ~]$ ssh-copy-id tidb@192.168.3.226验证tidb免密登录
~]$ id uid=1000(tidb) gid=1000(tidb) groups=1000(tidb) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 ~]$ for node_ip in 192.168.3.221 192.168.3.222 192.168.3.223 192.168.3.224 192.168.3.225 192.168.3.226 do echo ">>> ${node_ip}" ssh tidb@${node_ip} "date" done可直接在tidb官网下载TiDB Server离线镜像包,或根据需要利用打包工具自助打包离线镜像包。
将离线镜像包上传至中控机(192.168.3.221)
https://pingcap.com/zh/product#SelectProduct
wget https://download.pingcap.org/tidb-community-server-v5.3.0-linux-amd64.tar.gz在可以上网的主机,执行如下步骤,进行离线镜像的打包。
安装 TiUP 工具:
curl --proto =https --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh source .bash_profile which tiup用 TiUP 制作离线镜像
tiup mirror clone tidb-community-server-${version}-linux-amd64 ${version} --os=linux --arch=amd64 tar czvf tidb-community-server-${version}-linux-amd64.tar.gz tidb-community-server-${version}-linux-amd64此时,生成的 tidb-community-server-${version}-linux-amd64.tar.gz 就是一个独立的离线环境包。
1.4.2.1. 调整离线包内容可通过参数指定具体的组件和版本等信息,获得不完整的离线镜像。
~]$ tiup mirror clone tiup-custom-mirror-v1.7.0 --tiup v1.7.0 --cluster v1.7.0 ~]$ tar czvf tiup-custom-mirror-v1.7.0.tar.gz tiup-custom-mirror-v1.7.0将定制的离线包上传至离线的中控机
在隔离环境的中控机上,查看当前使用的离线镜像路径。
~]$ tiup mirror show /home/tidb/tidb-community-server-v5.3.0-linux-amd64如果提示 show 命令不存在,可能当前使用的是较老版本的 TiUP。此时可以通过查看 $HOME/.tiup/tiup.toml 获得正在使用的镜像地址。将此镜像地址记录下来,后续步骤中将以变量 ${base_mirror} 指代此镜像地址。
将不完整的离线镜像合并到已有的离线镜像中:
# 将当前离线镜像中的 keys 目录复制到 $HOME/.tiup 目录中: cp -r ${base_mirror}/keys $HOME/.tiup/ # 使用 TiUP 命令将不完整的离线镜像合并到当前使用的镜像中: tiup mirror merge tiup-custom-mirror-v1.7.0通过tiup list 命令检查执行结果
tidb用户进行TiUP组件部署
~]$ id uid=1000(tidb) gid=1000(tidb) groups=1000(tidb) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 ~]$ sudo chown tidb:tidb tidb-community-server-v5.3.0-linux-amd64.tar.gz ~]$ ll total 1942000 -rw-r--r--. 1 tidb tidb 1988601700 Nov 29 2021 tidb-community-server-v5.3.0-linux-amd64.tar.gz ~]$ tar -xzvf tidb-community-server-v5.3.0-linux-amd64.tar.gz ~]$ sh tidb-community-server-v5.3.0-linux-amd64/local_install.sh ~]$ source /home/tidb/.bash_profilelocal_install.sh 脚本会自动执行 tiup mirror set tidb-community-server-v5.3.0-linux-amd64 命令将当前镜像地址设置为 tidb-community-server-v5.3.0-linux-amd64。
若需将镜像切换到其他目录,可以通过手动执行 tiup mirror set <TiDB离线镜像包目录> 进行切换。如果需要切换到在线环境,可执行 tiup mirror set https://tiup-mirrors.pingcap.com。
过滤掉拓扑模板的空白行及注释行,生成拓扑配置topology.yaml
~]$ tiup cluster template |grep -Ev ^\s*#|^$ > topology.yaml‘^\s*#’ 匹配注释行;
‘^$’ 匹配空白行
-E 表示匹配多个条件。多个条件通过 | 分隔。
生成的默认拓扑配置如下:
global: user: "tidb" ssh_port: 22 deploy_dir: "/tidb-deploy" data_dir: "/tidb-data" arch: "amd64" monitored: node_exporter_port: 9100 blackbox_exporter_port: 9115 pd_servers: - host: 10.0.1.11 - host: 10.0.1.12 - host: 10.0.1.13 tidb_servers: - host: 10.0.1.14 - host: 10.0.1.15 - host: 10.0.1.16 tikv_servers: - host: 10.0.1.17 - host: 10.0.1.18 - host: 10.0.1.19 tiflash_servers: - host: 10.0.1.20 - host: 10.0.1.21 monitoring_servers: - host: 10.0.1.22 grafana_servers: - host: 10.0.1.22 alertmanager_servers: - host: 10.0.1.22根据实际环境,修改配置文件。
global: user: "tidb" ssh_port: 22 deploy_dir: "/tidb-deploy" data_dir: "/tidb-data" arch: "amd64" monitored: node_exporter_port: 9100 blackbox_exporter_port: 9115 pd_servers: - host: 192.168.3.221 - host: 192.168.3.222 - host: 192.168.3.223 tidb_servers: - host: 192.168.3.221 - host: 192.168.3.222 - host: 192.168.3.223 tikv_servers: - host: 192.168.3.224 - host: 192.168.3.225 - host: 192.168.3.226 monitoring_servers: - host: 192.168.3.221 grafana_servers: - host: 192.168.3.221 alertmanager_servers: - host: 192.168.3.221环境检查
生产环境,需确保所有检查项都为pass。以下命令在中控机(192.168.3.221)执行。
~]$ id uid=1000(tidb) gid=1000(tidb) groups=1000(tidb) ~]$ tiup cluster check ./topology.yaml --user tidb ... Node Check Result Message ---- ----- ------ ------- 192.168.3.223 os-version Pass OS is CentOS Linux 7 (Core) 7.9.2009 192.168.3.223 cpu-cores Pass number of CPU cores / threads: 4 192.168.3.223 memory Pass memory size is 4096MB 192.168.3.223 selinux Fail SELinux is not disabled 192.168.3.223 thp Fail THP is enabled, please disable it for best performance 192.168.3.223 command Pass numactl: policy: default 192.168.3.224 os-version Pass OS is CentOS Linux 7 (Core) 7.9.2009 192.168.3.224 cpu-cores Pass number of CPU cores / threads: 4 192.168.3.224 memory Pass memory size is 4096MB 192.168.3.224 selinux Fail SELinux is not disabled 192.168.3.224 thp Fail THP is enabled, please disable it for best performance 192.168.3.224 command Pass numactl: policy: default 192.168.3.225 os-version Pass OS is CentOS Linux 7 (Core) 7.9.2009 192.168.3.225 cpu-cores Pass number of CPU cores / threads: 4 192.168.3.225 memory Pass memory size is 4096MB 192.168.3.225 selinux Fail SELinux is not disabled 192.168.3.225 thp Fail THP is enabled, please disable it for best performance 192.168.3.225 command Pass numactl: policy: default 192.168.3.226 os-version Pass OS is CentOS Linux 7 (Core) 7.9.2009 192.168.3.226 cpu-cores Pass number of CPU cores / threads: 4 192.168.3.226 memory Pass memory size is 4096MB 192.168.3.226 selinux Fail SELinux is not disabled 192.168.3.226 thp Fail THP is enabled, please disable it for best performance 192.168.3.226 command Pass numactl: policy: default 192.168.3.221 os-version Pass OS is CentOS Linux 7 (Core) 7.9.2009 192.168.3.221 cpu-cores Pass number of CPU cores / threads: 4 192.168.3.221 memory Pass memory size is 4096MB 192.168.3.221 selinux Fail SELinux is not disabled 192.168.3.221 thp Fail THP is enabled, please disable it for best performance 192.168.3.221 command Pass numactl: policy: default 192.168.3.222 os-version Pass OS is CentOS Linux 7 (Core) 7.9.2009 192.168.3.222 cpu-cores Pass number of CPU cores / threads: 4 192.168.3.222 memory Pass memory size is 4096MB 192.168.3.222 selinux Fail SELinux is not disabled 192.168.3.222 thp Fail THP is enabled, please disable it for best performance 192.168.3.222 command Pass numactl: policy: default环境自动修复
~]$ tiup cluster check ./topology.yaml --apply --user root若无无法自动修复,则参照前面章节内容,逐个手动修复。
在中控机(192.168.3.221)执行。
~]$ id uid=1000(tidb) gid=1000(tidb) groups=1000(tidb) ~]$ tiup cluster deploy kruidb-cluster v5.3.0 ./topology.yaml --user tidb Starting component `cluster`: /home/tidb/.tiup/components/cluster/v1.7.0/tiup-cluster deploy kruidb-cluster v5.3.0 ./topology.yaml --user tidb + Detect CPU Arch + Detect CPU Arch - Detecting node 192.168.3.221 ... Done - Detecting node 192.168.3.222 ... Done - Detecting node 192.168.3.223 ... Done - Detecting node 192.168.3.224 ... Done - Detecting node 192.168.3.225 ... Done - Detecting node 192.168.3.226 ... Done Please confirm your topology: Cluster type: tidb Cluster name: kruidb-cluster Cluster version: v5.3.0 Role Host Ports OS/Arch Directories ---- ---- ----- ------- ----------- pd 192.168.3.221 2379/2380 linux/x86_64 /tidb-deploy/pd-2379,/tidb-data/pd-2379 pd 192.168.3.222 2379/2380 linux/x86_64 /tidb-deploy/pd-2379,/tidb-data/pd-2379 pd 192.168.3.223 2379/2380 linux/x86_64 /tidb-deploy/pd-2379,/tidb-data/pd-2379 tikv 192.168.3.224 20160/20180 linux/x86_64 /tidb-deploy/tikv-20160,/tidb-data/tikv-20160 tikv 192.168.3.225 20160/20180 linux/x86_64 /tidb-deploy/tikv-20160,/tidb-data/tikv-20160 tikv 192.168.3.226 20160/20180 linux/x86_64 /tidb-deploy/tikv-20160,/tidb-data/tikv-20160 tidb 192.168.3.221 4000/10080 linux/x86_64 /tidb-deploy/tidb-4000 tidb 192.168.3.222 4000/10080 linux/x86_64 /tidb-deploy/tidb-4000 tidb 192.168.3.223 4000/10080 linux/x86_64 /tidb-deploy/tidb-4000 prometheus 192.168.3.221 9090 linux/x86_64 /tidb-deploy/prometheus-9090,/tidb-data/prometheus-9090 grafana 192.168.3.221 3000 linux/x86_64 /tidb-deploy/grafana-3000 alertmanager 192.168.3.221 9093/9094 linux/x86_64 /tidb-deploy/alertmanager-9093,/tidb-data/alertmanager-9093 Attention: 1. If the topology is not what you expected, check your yaml file. 2. Please confirm there is no port/directory conflicts in same host. Do you want to continue? [y/N]: (default=N) y ... Enable 192.168.3.226 success Enable 192.168.3.224 success Enable 192.168.3.225 success Enable 192.168.3.222 success Cluster `kruidb-cluster` deployed successfully, you can start it with command: `tiup cluster start kruidb-cluster`在中控机(192.168.3.221)执行。
~]$ tiup cluster start kruidb-cluster ... + [ Serial ] - UpdateTopology: cluster=kruidb-cluster Started cluster `kruidb-cluster` successfully可通过 tiup cluster start kruidb-cluster --init 在初始化集群时,为root用户生成随机密码(只显示一次)。省略 --init 参数,则为root用户指定空密码。
在中控机(192.168.3.221)执行。
~]$ tiup cluster list Starting component `cluster`: /home/tidb/.tiup/components/cluster/v1.7.0/tiup-cluster list Name User Version Path PrivateKey ---- ---- ------- ---- ---------- kruidb-cluster tidb v5.3.0 /home/tidb/.tiup/storage/cluster/clusters/kruidb-cluster /home/tidb/.tiup/storage/cluster/clusters/kruidb-cluster/ssh/id_rsa~]$ tiup cluster display kruidb-cluster Starting component `cluster`: /home/tidb/.tiup/components/cluster/v1.7.0/tiup-cluster display kruidb-cluster Cluster type: tidb Cluster name: kruidb-cluster Cluster version: v5.3.0 Deploy user: tidb SSH type: builtin Dashboard URL: http://192.168.3.222:2379/dashboard ID Role Host Ports OS/Arch Status Data Dir Deploy Dir -- ---- ---- ----- ------- ------ -------- ---------- 192.168.3.221:9093 alertmanager 192.168.3.221 9093/9094 linux/x86_64 Up /tidb-data/alertmanager-9093 /tidb-deploy/alertmanager-9093 192.168.3.221:3000 grafana 192.168.3.221 3000 linux/x86_64 Up - /tidb-deploy/grafana-3000 192.168.3.221:2379 pd 192.168.3.221 2379/2380 linux/x86_64 Up /tidb-data/pd-2379 /tidb-deploy/pd-2379 192.168.3.222:2379 pd 192.168.3.222 2379/2380 linux/x86_64 Up|UI /tidb-data/pd-2379 /tidb-deploy/pd-2379 192.168.3.223:2379 pd 192.168.3.223 2379/2380 linux/x86_64 Up|L /tidb-data/pd-2379 /tidb-deploy/pd-2379 192.168.3.221:9090 prometheus 192.168.3.221 9090 linux/x86_64 Up /tidb-data/prometheus-9090 /tidb-deploy/prometheus-9090 192.168.3.221:4000 tidb 192.168.3.221 4000/10080 linux/x86_64 Up - /tidb-deploy/tidb-4000 192.168.3.222:4000 tidb 192.168.3.222 4000/10080 linux/x86_64 Up - /tidb-deploy/tidb-4000 192.168.3.223:4000 tidb 192.168.3.223 4000/10080 linux/x86_64 Up - /tidb-deploy/tidb-4000 192.168.3.224:20160 tikv 192.168.3.224 20160/20180 linux/x86_64 Up /tidb-data/tikv-20160 /tidb-deploy/tikv-20160 192.168.3.225:20160 tikv 192.168.3.225 20160/20180 linux/x86_64 Up /tidb-data/tikv-20160 /tidb-deploy/tikv-20160 192.168.3.226:20160 tikv 192.168.3.226 20160/20180 linux/x86_64 Up /tidb-data/tikv-20160 /tidb-deploy/tikv-20160在中控机(192.168.3.221)执行。
可通过tiup cluster edit-config <集群名>修改集群运行的配置信息,该命令会自动收集各节点的配置项。
~]$ tiup cluster edit-config kruidb-cluster global: user: tidb ssh_port: 22 ssh_type: builtin deploy_dir: /tidb-deploy data_dir: /tidb-data os: linux arch: amd64 monitored: node_exporter_port: 9100 blackbox_exporter_port: 9115 deploy_dir: /tidb-deploy/monitor-9100 data_dir: /tidb-data/monitor-9100 log_dir: /tidb-deploy/monitor-9100/log tidb_servers: - host: 192.168.3.221 ssh_port: 22 port: 4000 status_port: 10080 deploy_dir: /tidb-deploy/tidb-4000 log_dir: /tidb-deploy/tidb-4000/log arch: amd64 os: linux - host: 192.168.3.222 ssh_port: 22 port: 4000 status_port: 10080 deploy_dir: /tidb-deploy/tidb-4000 log_dir: /tidb-deploy/tidb-4000/log arch: amd64 os: linux - host: 192.168.3.223 ssh_port: 22 port: 4000 status_port: 10080 deploy_dir: /tidb-deploy/tidb-4000 ... grafana_servers: - host: 192.168.3.221 ssh_port: 22 port: 3000 deploy_dir: /tidb-deploy/grafana-3000 arch: amd64 os: linux username: admin password: admin anonymous_enable: false root_url: "" domain: "" alertmanager_servers: - host: 192.168.3.221 ssh_port: 22 web_port: 9093 cluster_port: 9094 deploy_dir: /tidb-deploy/alertmanager-9093 data_dir: /tidb-data/alertmanager-9093 log_dir: /tidb-deploy/alertmanager-9093/log arch: amd64 os: linux将haproxy部署于192.168.3.221节点
下载源码包
~]# wget https://github.com/haproxy/haproxy/archive/refs/tags/v2.5.0.zip ~]# unzip v2.5.0编译安装
~]# cd haproxy-2.5.0 ~]# make clean ~]# make -j 8 TARGET=linux-glibc USE_THREAD=1 ~]# make PREFIX=/usr/local/haproxy_v2.5.0 SBINDIR=/usr/local/haproxy_v2.5.0/bin install安装后配置
~]# ln -s /usr/local/haproxy_v2.5.0 /usr/local/haproxy ~]# echo export PATH=/usr/local/haproxy/bin:$PATH >> /etc/profile ~]# source /etc/profile ~]# which haproxy /usr/local/haproxy/bin/haproxy通过YUM安装,会生成配置模板,也可根据实际场景自定义如下配置项:
global # 全局配置。 log 127.0.0.1 local2 # 定义全局的 syslog 服务器,最多可以定义两个。 chroot /var/lib/haproxy # 更改当前目录并为启动进程设置超级用户权限,从而提高安全性。 pidfile /var/run/haproxy.pid # 将 HAProxy 进程的 PID 写入 pidfile。 maxconn 4096 # 单个 HAProxy 进程可接受的最大并发连接数,等价于命令行参数 "-n"。 nbthread 48 # 最大线程数。线程数的上限与 CPU 数量相同。 user haproxy # 同 UID 参数。 group haproxy # 同 GID 参数,建议使用专用用户组。 daemon # 让 HAProxy 以守护进程的方式工作于后台,等同于命令行参数“-D”的功能。当然,也可以在命令行中用“-db”参数将其禁用。 stats socket /var/lib/haproxy/stats mode 600 level admin # 统计信息保存位置。 defaults # 默认配置。 log global # 日志继承全局配置段的设置。 retries 2 # 向上游服务器尝试连接的最大次数,超过此值便认为后端服务器不可用。 timeout connect 2s # HAProxy 与后端服务器连接超时时间。如果在同一个局域网内,可设置成较短的时间。 timeout client 30000s # 客户端与 HAProxy 连接后,数据传输完毕,即非活动连接的超时时间。 timeout server 30000s # 服务器端非活动连接的超时时间。 listen admin_stats # frontend 和 backend 的组合体,此监控组的名称可按需进行自定义。 bind 0.0.0.0:8080 # 监听端口。 mode http # 监控运行的模式,此处为 `http` 模式。 option httplog # 开始启用记录 HTTP 请求的日志功能。 maxconn 10 # 最大并发连接数。 stats refresh 30s # 每隔 30 秒自动刷新监控页面。 stats uri /haproxy # 监控页面的 URL。 stats realm HAProxy # 监控页面的提示信息。 stats auth admin:pingcap123 # 监控页面的用户和密码,可设置多个用户名。 stats hide-version # 隐藏监控页面上的 HAProxy 版本信息。 stats admin if TRUE # 手工启用或禁用后端服务器(HAProxy 1.4.9 及之后版本开始支持)。 listen tidb-cluster # 配置 database 负载均衡。 bind 0.0.0.0:13390 # 浮动 IP 和 监听端口,修改默认端口3390为13390 mode tcp # HAProxy 要使用第 4 层的传输层。 balance leastconn # 连接数最少的服务器优先接收连接。`leastconn` 建议用于长会话服务,例如 LDAP、SQL、TSE 等,而不是短会话协议,如 HTTP。该算法是动态的,对于启动慢的服务器,服务器权重会在运行中作调整。 server tidb-1 192.168.3.221:4000 check inter 2000 rise 2 fall 3 # 检测 4000 端口,检测频率为每 2000 毫秒一次。如果 2 次检测为成功,则认为服务器可用;如果 3 次检测为失败,则认为服务器不可用。 server tidb-2 192.168.3.222:4000 check inter 2000 rise 2 fall 3 server tidb-3 192.168.3.223:4000 check inter 2000 rise 2 fall 3将配置文件保存为/etc/haproxy/haproxy.cfg,验证配置文件正确性。
~]# mkdir -p /var/lib/haproxy ~]# /usr/local/haproxy/bin/haproxy -f haproxy.cfg -c Configuration file is validtidb默认用户root,密码为空。
~]# mysql -P4000 -uroot -h 192.168.3.222 Welcome to the MySQL monitor. Commands end with ; or \g. ...... Type help; or \h for help. Type \c to clear the current input statement. mysql> show databases; +--------------------+ | Database | +--------------------+ | INFORMATION_SCHEMA | | METRICS_SCHEMA | | PERFORMANCE_SCHEMA | | mysql | | test | +--------------------+ 8 rows in set (0.00 sec)创建用户时,通过在host中应用标识符%或_,可以达到限制IP连接数据库的目的。
%表示匹配多个字符。
‘admin’@’%表示admin用户可以从任意主机,连接数据库服务器;
‘admin’@192.168.3.%表示admin用户可以从192.168.3.x网段的主机,连接数据库服务器
_表示匹配一个字符。
‘admin’@192.168.3.1_表示admin用户可以从IP为192.168.3.10~192.168.3.19的主机,连接数据库服务器
‘admin’@192.168.3._4’表示admin用户可以从IP为192.168.3.14/24/34/44/54/64/74/84/94的主机,连接数据库服务器
关于TiDB用户权限管理,可参考官方文档https://docs.pingcap.com/zh/tidb/stable/privilege-management#%E6%9D%83%E9%99%90%E7%AE%A1%E7%90%86
修改配置文件,在 security 部分添加 skip-grant-table:
[security] skip-grant-table = true使用修改之后的配置启动 TiDB,然后使用 root 登录后修改密码:
~]# mysql -h 127.0.0.1 -P 4000 -u root设置 skip-grant-table 之后,启动 TiDB 进程会增加操作系统用户检查,只有操作系统的 root 用户才能启动 TiDB 进程。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。