写点什么

离线部署系列文章之一:TiDBv5.3.0 集群部署 & 源码部署 Haproxy v2.5.0

  • 2022 年 8 月 19 日
    北京
  • 本文字数:14458 字

    阅读完需:约 47 分钟

作者: OnTheRoad 原文来源:https://tidb.net/blog/48ba5d91


本文档的部署路线图为:


  1. 离线部署 TiDB v5.3.0(TiDB*3、PD*3、TiKV*3);

  2. 源码部署 Haproxy v2.5.0

  3. 离线升级 TiDB v5.3.0 至 TiDB v5.4.2;

  4. 缩扩容 TiDB Server、PD

  5. 扩缩容 TiKV、TiFlash

  6. 部署 TiSpark(TiSpark*3

  7. 离线升级 TiDB v5.4.2 至 TiDB v6.1

1. 离线部署

1.1. 拓扑规划


其中,192.168.3.221 作为中控机,离线部署TiUP工具TiDB离线镜像包以及ToolKit镜像包。另如未特殊说明,后续操作均在中控机(192.168.3.221)由root用户执行。

1.2. 端口开放

1.3. 主机配置

1.3.1. 配置本地 YUM

  1. 系统镜像挂载


如果是光盘 ISO 文件,可通过mount -o loop /home/hhrs/CentOS-7.9-x86_64-dvd.iso /mnt/yum挂载。


  1. 配置本地 repo 源

  2. 生成 YUM 缓存

1.3.2. ssh 互信及免密登录

中控机(192.168.3.221)创建密钥。设置 root 用户互信,免密登录各节点。


  1. 生成密钥及密钥分发

  2. 测试免密登陆


输出如下内容,说明免密登陆设置成功。


>>> 192.168.3.221 Start LoginFri Aug 12 20:44:03 CST 2022>>> 192.168.3.222 Start LoginFri Aug 12 20:44:03 CST 2022>>> 192.168.3.223 Start LoginFri Aug 12 20:44:03 CST 2022>>> 192.168.3.224 Start LoginFri Aug 12 20:44:03 CST 2022>>> 192.168.3.225 Start LoginFri Aug 12 20:44:04 CST 2022>>> 192.168.3.226 Start LoginFri Aug 12 20:44:04 CST 2022
复制代码

1.3.3. TiKV 数据盘优化

每个 TiKV 节点都要操作,本文档以 /dev/sdb 为数据盘,进行优化。


  1. 分区格式化

  2. 查看分区的 UUID


这里 /dev/sdb1 的 UUID 为 49e00d02-2f5b-4b05-8e0e-ac2f524a97ae


[root@localhost ~]# lsblk -fNAME            FSTYPE      LABEL           UUID                                   MOUNTPOINTsda                                                                                ├─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
复制代码


  1. 分区挂载将数据盘分区/dev/sdb1的挂载信息追加到 /etc/fstab 文件中,注意添加 nodelalloc 挂载参数。

1.3.4. 关闭 Swap

中控机(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 里的数据。

1.3.5. 禁用 SElinux

  1. 批量关闭各主机 SELinux

  2. 验证关闭是否生效


输出如下内容,说明禁用成功。


>>> 192.168.3.221Disabled>>> 192.168.3.222Disabled>>> 192.168.3.223Disabled>>> 192.168.3.224Disabled>>> 192.168.3.225Disabled>>> 192.168.3.226Disabled
复制代码

1.3.6. 禁用防火墙

  1. 查看防火墙状态

  2. 关闭防火墙


各主机的预期输出如下:


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)
复制代码

1.3.7. 时钟同步

  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
复制代码


  1. 时钟同步


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 定时任务中。

1.3.8. 系统优化

以下操作,在所有节点上由root执行。


  1. 关闭透明大页( Transparent Huge Pages)


需使其返回值为never


  1. 优化 IO 调度假设数据盘为/sdb,需修改调度为noop


查看数据盘分区的唯一标识 ID_SERIAL


~]# udevadm info --name=/dev/sdb | grep ID_SERIALE: ID_SERIAL=0QEMU_QEMU_HARDDISK_drive-scsi1E: ID_SERIAL_SHORT=drive-scsi1
复制代码


  1. CPU 节能策略The governor "powersave"表示 cpufreq 的节能策略使用 powersave,需要调整为 performance 策略。如果是虚拟机或者云主机,则不需要调整,命令输出通常为 Unable to determine current policy

1.3.8.1. 使用 tuned(推荐)

以下操作,在所有节点上由root用户执行。


  1. 查看当前 tuned 策略

  2. 创建新的 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
复制代码


  1. 应用新的策略

  2. 验证优化结果


注意若 tuned 关闭 THP 不生效,可通过如下方式关闭:

  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} “echo \“fs.file-max = 1000000\” >> /etc/sysctl.conf” ssh root@{node_ip} “echo \“net.ipv4.tcp_tw_recycle = 0\” >> /etc/sysctl.conf” ssh root@{node_ip} “echo \“vm.overcommit_memory = 1\” >> /etc/sysctl.conf” ssh root@${node_ip} “sysctl -p” done


### 1.3.9. 用户创建及资源限制

以下操作,在中控机(`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} “useradd tidb && passwd tidb” done


tidb用户密码`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} “echo \“tidb soft 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” done


#### 1.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} “echo \“tidb ALL=(ALL) NOPASSWD: ALL\” >> /etc/sudoers” done


tidb用户登录各目标节点,确认执行`sudo - root`无需输入密码,即表示添加`sudo免密`成功。

#### 1.3.9.4. tidb 免密登录

`tidb`用户登录中控机(`192.168.3.221`)执行:

1. 为`tidb`用户创建密钥,并分发密钥


~] ssh-keygen -t rsa~] ssh-copy-id tidb@192.168.3.222~] ssh-copy-id tidb@192.168.3.224~] ssh-copy-id tidb@192.168.3.226


2. 验证`tidb`免密登录


~]$ iduid=1000(tidb) gid=1000(tidb) groups=1000(tidb) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023


~]{node_ip}” ssh tidb@${node_ip} “date” done



### 1.3.10. 安装numactl

复制代码


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} “yum -y install numactl” done



## 1.4. 准备离线镜像包
可直接在tidb官网下载TiDB Server离线镜像包,或根据需要利用打包工具自助打包离线镜像包。
### 1.4.1. 方式一:下载 TiDB server 离线镜像包(包含 TiUP 离线组件包)
将离线镜像包上传至中控机(`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



### 1.4.2. 方式二:手动打包离线镜像包
在可以上网的主机,执行如下步骤,进行离线镜像的打包。
1. 安装 TiUP 工具:

复制代码


curl –proto ‘=https’ –tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | shsource .bash_profilewhich tiup



2. 用 TiUP 制作离线镜像

复制代码


tiup mirror clone tidb-community-server-{version} –os=linux –arch=amd64tar czvf tidb-community-server-{version}-linux-amd64



此时,生成的 tidb-community-server-${version}-linux-amd64.tar.gz 就是一个独立的离线环境包。
#### 1.4.2.1. 调整离线包内容
1. 可通过参数指定具体的组件和版本等信息,获得不完整的离线镜像。

复制代码


~] tar czvf tiup-custom-mirror-v1.7.0.tar.gz tiup-custom-mirror-v1.7.0



将定制的离线包上传至离线的中控机
2. 在隔离环境的中控机上,查看当前使用的离线镜像路径。

复制代码


~]$ tiup mirror show/home/tidb/tidb-community-server-v5.3.0-linux-amd64



如果提示 show 命令不存在,可能当前使用的是较老版本的 TiUP。此时可以通过查看 $HOME/.tiup/tiup.toml 获得正在使用的镜像地址。将此镜像地址记录下来,后续步骤中将以变量 ${base\_mirror} 指代此镜像地址。
4. 将不完整的离线镜像合并到已有的离线镜像中:

复制代码

将当前离线镜像中的 keys 目录复制到 $HOME/.tiup 目录中:

cp -r HOME/.tiup/

使用 TiUP 命令将不完整的离线镜像合并到当前使用的镜像中:

tiup mirror merge tiup-custom-mirror-v1.7.0



通过`tiup list` 命令检查执行结果
## 1.5. 离线部署TiDB集群
### 1.5.1. 部署TiUP组件
tidb用户进行TiUP组件部署

复制代码


~]$ iduid=1000(tidb) gid=1000(tidb) groups=1000(tidb) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023


~] lltotal 1942000-rw-r–r–. 1 tidb tidb 1988601700 Nov 29 2021 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_profile



local\_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`。
### 1.5.2. 准备拓扑文件
1. 过滤掉拓扑模板的空白行及注释行,生成拓扑配置`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: 9115pd_servers: - host: 10.0.1.11 - host: 10.0.1.12 - host: 10.0.1.13tidb_servers: - host: 10.0.1.14 - host: 10.0.1.15 - host: 10.0.1.16tikv_servers: - host: 10.0.1.17 - host: 10.0.1.18 - host: 10.0.1.19tiflash_servers: - host: 10.0.1.20 - host: 10.0.1.21monitoring_servers: - host: 10.0.1.22grafana_servers: - host: 10.0.1.22alertmanager_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: 9115pd_servers: - host: 192.168.3.221 - host: 192.168.3.222 - host: 192.168.3.223tidb_servers: - host: 192.168.3.221 - host: 192.168.3.222 - host: 192.168.3.223tikv_servers: - host: 192.168.3.224 - host: 192.168.3.225 - host: 192.168.3.226monitoring_servers: - host: 192.168.3.221grafana_servers: - host: 192.168.3.221alertmanager_servers: - host: 192.168.3.221



### 1.5.3. 环境校验
1. 环境检查
生产环境,需确保所有检查项都为pass。以下命令在中控机(`192.168.3.221`)执行。

复制代码


~]$ iduid=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.2009192.168.3.223 cpu-cores Pass number of CPU cores / threads: 4192.168.3.223 memory Pass memory size is 4096MB192.168.3.223 selinux Fail SELinux is not disabled192.168.3.223 thp Fail THP is enabled, please disable it for best performance192.168.3.223 command Pass numactl: policy: default192.168.3.224 os-version Pass OS is CentOS Linux 7 (Core) 7.9.2009192.168.3.224 cpu-cores Pass number of CPU cores / threads: 4192.168.3.224 memory Pass memory size is 4096MB192.168.3.224 selinux Fail SELinux is not disabled192.168.3.224 thp Fail THP is enabled, please disable it for best performance192.168.3.224 command Pass numactl: policy: default192.168.3.225 os-version Pass OS is CentOS Linux 7 (Core) 7.9.2009192.168.3.225 cpu-cores Pass number of CPU cores / threads: 4192.168.3.225 memory Pass memory size is 4096MB192.168.3.225 selinux Fail SELinux is not disabled192.168.3.225 thp Fail THP is enabled, please disable it for best performance192.168.3.225 command Pass numactl: policy: default192.168.3.226 os-version Pass OS is CentOS Linux 7 (Core) 7.9.2009192.168.3.226 cpu-cores Pass number of CPU cores / threads: 4192.168.3.226 memory Pass memory size is 4096MB192.168.3.226 selinux Fail SELinux is not disabled192.168.3.226 thp Fail THP is enabled, please disable it for best performance192.168.3.226 command Pass numactl: policy: default192.168.3.221 os-version Pass OS is CentOS Linux 7 (Core) 7.9.2009192.168.3.221 cpu-cores Pass number of CPU cores / threads: 4192.168.3.221 memory Pass memory size is 4096MB192.168.3.221 selinux Fail SELinux is not disabled192.168.3.221 thp Fail THP is enabled, please disable it for best performance192.168.3.221 command Pass numactl: policy: default192.168.3.222 os-version Pass OS is CentOS Linux 7 (Core) 7.9.2009192.168.3.222 cpu-cores Pass number of CPU cores / threads: 4192.168.3.222 memory Pass memory size is 4096MB192.168.3.222 selinux Fail SELinux is not disabled192.168.3.222 thp Fail THP is enabled, please disable it for best performance192.168.3.222 command Pass numactl: policy: default



- 环境自动修复

复制代码


~]$ tiup cluster check ./topology.yaml –apply –user root



若无无法自动修复,则参照前面章节内容,逐个手动修复。
### 1.5.4. 集群部署
在中控机(`192.168.3.221`)执行。

复制代码


~]$ iduid=1000(tidb) gid=1000(tidb) groups=1000(tidb)


~]$ tiup cluster deploy kruidb-cluster v5.3.0 ./topology.yaml –user tidbStarting 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 … DonePlease confirm your topology:Cluster type: tidbCluster name: kruidb-clusterCluster version: v5.3.0Role Host Ports OS/Arch Directories—- —- —– ——- ———–pd 192.168.3.221 23792380 linux/x86_64 /tidb-deploy/pd-2379,/tidb-data/pd-2379pd 192.168.3.222 23792380 linux/x86_64 /tidb-deploy/pd-2379,/tidb-data/pd-2379pd 192.168.3.223 23792380 linux/x86_64 /tidb-deploy/pd-2379,/tidb-data/pd-2379tikv 192.168.3.224 2016020180 linux/x86_64 /tidb-deploy/tikv-20160,/tidb-data/tikv-20160tikv 192.168.3.225 2016020180 linux/x86_64 /tidb-deploy/tikv-20160,/tidb-data/tikv-20160tikv 192.168.3.226 2016020180 linux/x86_64 /tidb-deploy/tikv-20160,/tidb-data/tikv-20160tidb 192.168.3.221 400010080 linux/x86_64 /tidb-deploy/tidb-4000tidb 192.168.3.222 400010080 linux/x86_64 /tidb-deploy/tidb-4000tidb 192.168.3.223 400010080 linux/x86_64 /tidb-deploy/tidb-4000prometheus 192.168.3.221 9090 linux/x86_64 /tidb-deploy/prometheus-9090,/tidb-data/prometheus-9090grafana 192.168.3.221 3000 linux/x86_64 /tidb-deploy/grafana-3000alertmanager 192.168.3.221 90939094 linux/x86_64 /tidb-deploy/alertmanager-9093,/tidb-data/alertmanager-9093Attention:

  • If the topology is not what you expected, check your yaml file.

  • 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 successEnable 192.168.3.224 successEnable 192.168.3.225 successEnable 192.168.3.222 successCluster kruidb-cluster deployed successfully, you can start it with command: tiup cluster start kruidb-cluster


~]$ tiup cluster start kruidb-cluster


…+ [ Serial ] - UpdateTopology: cluster=kruidb-clusterStarted cluster kruidb-cluster successfully



可通过 `tiup cluster start kruidb-cluster --init` 在初始化集群时,为`root`用户生成随机密码(只显示一次)。省略 `--init` 参数,则为`root`用户指定空密码。
## 1.7. 检查TiDB集群
### 1.7.1. 查看集群
在中控机(`192.168.3.221`)执行。

复制代码


~]$ tiup cluster listStarting component cluster: /home/tidb/.tiup/components/cluster/v1.7.0/tiup-cluster listName 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-clusterStarting component cluster: /home/tidb/.tiup/components/cluster/v1.7.0/tiup-cluster display kruidb-clusterCluster type: tidbCluster name: kruidb-clusterCluster version: v5.3.0Deploy user: tidbSSH type: builtinDashboard URL: http://192.168.3.222:2379/dashboardID Role Host Ports OS/Arch Status Data Dir Deploy Dir




192.168.3.221:9093 alertmanager 192.168.3.221 90939094 linux/x86_64 Up /tidb-data/alertmanager-9093 /tidb-deploy/alertmanager-9093192.168.3.221:3000 grafana 192.168.3.221 3000 linux/x86_64 Up - /tidb-deploy/grafana-3000192.168.3.221:2379 pd 192.168.3.221 23792380 linux/x86_64 Up /tidb-data/pd-2379 /tidb-deploy/pd-2379192.168.3.222:2379 pd 192.168.3.222 23792380 linux/x86_64 Up|UI /tidb-data/pd-2379 /tidb-deploy/pd-2379192.168.3.223:2379 pd 192.168.3.223 23792380 linux/x86_64 Up|L /tidb-data/pd-2379 /tidb-deploy/pd-2379192.168.3.221:9090 prometheus 192.168.3.221 9090 linux/x86_64 Up /tidb-data/prometheus-9090 /tidb-deploy/prometheus-9090192.168.3.221:4000 tidb 192.168.3.221 400010080 linux/x86_64 Up - /tidb-deploy/tidb-4000192.168.3.222:4000 tidb 192.168.3.222 400010080 linux/x86_64 Up - /tidb-deploy/tidb-4000192.168.3.223:4000 tidb 192.168.3.223 400010080 linux/x86_64 Up - /tidb-deploy/tidb-4000192.168.3.224:20160 tikv 192.168.3.224 2016020180 linux/x86_64 Up /tidb-data/tikv-20160 /tidb-deploy/tikv-20160192.168.3.225:20160 tikv 192.168.3.225 2016020180 linux/x86_64 Up /tidb-data/tikv-20160 /tidb-deploy/tikv-20160192.168.3.226:20160 tikv 192.168.3.226 2016020180 linux/x86_64 Up /tidb-data/tikv-20160 /tidb-deploy/tikv-20160



### 1.7.2. 检查集群配置
在中控机(`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: amd64monitored: 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/logtidb_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



# 2. Haproxy高可用与连接数据库
将`haproxy`部署于`192.168.3.221`节点
## 2.1. 依赖包安装

复制代码


~]# yum -y install epel-release gcc systemd-devel


Installed: epel-release.noarch 0:7-11 gcc.x86_64 0:4.8.5-44.el7 systemd-devel.x86_64 0:219-78.el7_9.5


Dependency Installed: cpp.x86_64 0:4.8.5-44.el7 glibc-devel.x86_64 0:2.17-326.el7_9 glibc-headers.x86_64 0:2.17-326.el7_9 kernel-headers.x86_64 0:3.10.0-1160.71.1.el7


libmpc.x86_64 0:1.0.1-3.el7 mpfr.x86_64 0:3.1.1-4.el7


Complete!



## 2.2. 安装Haproxy
1. 下载源码包

复制代码


~]# wget https://github.com/haproxy/haproxy/archive/refs/tags/v2.5.0.zip~]# unzip v2.5.0



2. 编译安装

复制代码


~]# 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



3. 安装后配置

复制代码


~]# 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



## 2.3. 配置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 -cConfiguration file is valid



## 2.4. 启停Haproxy

复制代码


~]# /usr/local/haproxy/bin/haproxy -f haproxy.cfg



### 2.4.1. 设置开机自启

复制代码


~]# cp /root/haproxy-2.5.0/examples/haproxy.init /etc/init.d/haproxy~]# chmod +x /etc/init.d/haproxy~]# ln -s /usr/local/haproxy/bin/haproxy /usr/sbin/~]# chkconfig –add haproxy~]# chkconfig haproxy on~]# systemctl enable haproxyhaproxy.service is not a native service, redirecting to /sbin/chkconfig.Executing /sbin/chkconfig haproxy on




复制代码


~]# systemctl restart haproxy~]# systemctl status haproxy~]# systemctl start haproxy~]# systemctl stop haproxy



## 2.5. 安装mysql客户端

复制代码


~]# wget https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm~]# rpm -ivh mysql80-community-release-el7-6.noarch.rpm~]# rpm –import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022~]# yum makecache~]# yum install -y mysql



## 2.6. 连接 TiDB
### 2.6.1. 直连tidb
tidb默认用户root,密码为空。

复制代码


~]# mysql -P4000 -uroot -h 192.168.3.222Welcome 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)



### 2.6.2. 通过 haproxy 连接

复制代码


~]# mysql -P13390 -uroot -h 192.168.3.221



## 2.7. 用户管理
### 2.7.1. 修改密码

复制代码


~]# mysql -P13390 -uroot -h 192.168.3.221mysql> CREATE USER ‘admin’@‘%’ IDENTIFIED BY ‘admin’;mysql> GRANT ALL PRIVILEGES ON . TO ‘admin’@‘%’ WITH GRANT OPTION;mysql> ALTER USER ‘root’@‘%’ IDENTIFIED BY ‘root’;mysql> FLUSH PRIVILEGES;



### 2.7.2. 限制用户登陆IP
创建用户时,通过在host中应用标识符`%`或`_`,可以达到限制IP连接数据库的目的。
> 1. `%`表示匹配多个字符。>> - ‘admin’@’%'表示admin用户可以从任意主机,连接数据库服务器;> - ‘admin’@'192.168.3.%'表示admin用户可以从192.168.3.x网段的主机,连接数据库服务器>> 2. `_`表示匹配一个字符。>> - ‘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>
### 2.7.3. 忘记密码
修改配置文件,在 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 进程。


发布于: 刚刚阅读数: 2
用户头像

TiDB 社区官网:https://tidb.net/ 2021.12.15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
离线部署系列文章之一:TiDBv5.3.0集群部署&源码部署 Haproxy v2.5.0_实践案例_TiDB 社区干货传送门_InfoQ写作社区