Centos7通过tiup部署TiDB集群

Centos7通过tiup部署TiDB集群 

TiDB是 PingCAP 公司设计的开源分布式关系型数据库,是一款同时支持在线事务处理OLTP与在线分析处理 HTAP的融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用、实时 HTAP、云原生的分布式数据库、兼容 MySQL 5.7 协议和 MySQL 生态等重要特性。TiDB 适合高可用、强一致要求较高、数据规模较大等各种应用场景。

MySQL 兼容性

TiDB 高度兼容 MySQL 5.7 协议、MySQL 5.7 常用的功能及语法。MySQL 5.7 生态中的系统工具(PHPMyAdmin、Navicat、MySQL Workbench、mysqldump、Mydumper/Myloader)、客户端等均适用于 TiDB。

服务器建议配置

Centos7通过tiup部署TiDB集群_第1张图片

部署服务器实际配置 

Centos7通过tiup部署TiDB集群_第2张图片

磁盘空间要求

Centos7通过tiup部署TiDB集群_第3张图片

 注:生产环境部署,建议使用 EXT4 类型文件系统的 NVME 类型的 SSD 磁盘存储 TiKV 数据文件,但是实际上用其他格式也是可以,这里使用XFS格式部署。

检测及关闭系统 swap

TiDB 运行需要有足够的内存。如果内存不足,不建议使用 swap 作为内存不足的缓冲,因为这会降低性能。建议永久关闭系统 swap。

要永久关闭 swap,可执行以如下命令:

echo "vm.swappiness = 0">> /etc/sysctl.conf
swapoff -a && swapon -a
sysctl -p

关闭防火墙 

# 检查防火墙状态
sudo firewall-cmd --state
sudo systemctl status firewalld.service

# 关闭防火墙服务
sudo systemctl stop firewalld.service

# 关闭启动服务
sudo systemctl disable firewalld.service

# 检查防火墙状态,查看是否已经关闭
sudo systemctl status firewalld.service

安装 NTP 服务

# 检查服务是否已安装
sudo systemctl status ntpd.service

# 如果服务已安装并启用运行状态,返回如下
ntpd.service - Network Time Service
Loaded: loaded (/usr/lib/systemd/system/ntpd.service; disabled; vendor preset: disabled)
Active: active (running) since 一 2017-12-18 13:13:19 CST; 3s ago

# 执行 ntpstat 命令检测是否与 NTP 服务器同步:
ntpstat

# 如果输出 synchronised to NTP server,表示正在与 NTP 服务器正常同步
synchronised to NTP server (85.199.214.101) at stratum 2
time correct to within 91 ms
polling server every 1024 s

# 如果要使 NTP 服务尽快开始同步,执行以下命令:
sudo systemctl stop ntpd.service && \
sudo ntpdate pool.ntp.org && \
sudo systemctl start ntpd.service

# 如果要在 CentOS 7 系统上手动安装 NTP 服务,可执行以下命令:
sudo yum install ntp ntpdate && \
sudo systemctl start ntpd.service && \
sudo systemctl enable ntpd.service

配置 SSH 互信及 sudo 免密码 

具体配置参照博文:Linux通过脚本配置服务器互信和免密登录 进行配置即可

安装 numactl 工具

本段主要介绍如何安装 NUMA 工具。在生产环境中,因为硬件机器配置往往高于需求,为了更合理规划资源,会考虑单机多实例部署 TiDB 或者 TiKV。NUMA 绑核工具的使用,主要为了防止 CPU 资源的争抢,引发性能衰退。

方法 1:登录到目标节点进行安装(以 CentOS Linux release 7.7.1908 (Core) 为例)。

sudo yum -y install numactl

方法 2:通过 tiup cluster exec 在集群上批量安装 NUMA。 

# 执行 tiup cluster exec 命令,以 sudo 权限在 tidb-test 集群所有目标主机上安装 NUMA
tiup cluster exec tidb-test --sudo --command "yum -y install numactl"

注:tidb-test替换为您的TiDB集群名称,您可以执行 tiup cluster exec --help 查看的 tiup cluster exec 命令的说明信息 

安装TiUP及准备部署文件

  1. 下载并安装 TiUP:

    curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
  2. 声明全局环境变量:

    注意:TiUP 安装完成后会提示对应 Shell profile 文件的绝对路径。在执行以下 source 命令前,需要将 ${your_shell_profile} 修改为 Shell profile 文件的实际位置。

    source ${your_shell_profile}
  3. 安装 TiUP 的 cluster 组件:

    tiup cluster
  4. 如果机器已经安装 TiUP cluster,需要更新软件版本:

    tiup update --self && tiup update cluster
  5. 由于模拟多机部署,需要通过 root 用户调大 sshd 服务的连接数限制:

    1. 修改 /etc/ssh/sshd_config 将 MaxSessions 调至 20。

    2. 重启 sshd 服务:

      service sshd restart
  6. 创建并启动集群

    按下面的配置模板,编辑配置文件,命名为 tidb-cluster-deploy.yaml ,其中:

    配置模板如下:

    # # Global variables are applied to all deployments and used as the default value of
    # # the deployments if a specific deployment value is missing.
    global:
     user: "tidb_dba"
     ssh_port: 22
     deploy_dir: "/home/workspace/tidb/tidb-deploy"
     data_dir: "/home/workspace/tidb/tidb-data"
    
    # # Monitored variables are applied to all the machines.
    monitored:
     node_exporter_port: 9100
     blackbox_exporter_port: 9115
    
    server_configs:
     tidb:
       log.slow-threshold: 300
     tikv:
       readpool.storage.use-unified-pool: false
       readpool.coprocessor.use-unified-pool: true
     pd:
       replication.enable-placement-rules: true
       replication.location-labels: ["host"]
     tiflash:
       logger.level: "info"
    
    pd_servers:
     - host: 10.8.111.54
    
    tidb_servers:
     - host: 10.8.111.54
    
    tikv_servers:
     - host: 10.8.111.247
       port: 20160
       status_port: 20180
       config:
         server.labels: { host: "logic-host-1" }
    
     - host: 10.8.111.167
       port: 20161
       status_port: 20181
       config:
         server.labels: { host: "logic-host-2" }
    
     - host: 10.8.111.203
       port: 20162
       status_port: 20182
       config:
         server.labels: { host: "logic-host-3" }
    
    tiflash_servers:
     - host: 10.8.111.75
    
    monitoring_servers:
     - host: 10.8.111.75
       port: 9999
    
    grafana_servers:
     - host: 10.8.111.75
       hostname: 10.28.282.220
       postman: 
    
    • user: "tidb_dba":表示通过 tidb_dba 系统用户(部署会自动创建)来做集群的内部管理,默认使用 22 端口通过 ssh 登录目标机器
    • replication.enable-placement-rules:设置这个 PD 参数来确保 TiFlash 正常运行
    • host:设置为本部署主机的 IP

实施部署

执行集群部署命令:

​tiup cluster deploy   ./ tidb-cluster-deploy.yaml --user root -p

​# 参数  表示设置集群名称
# 参数  表示设置集群版本,例如 v7.1.0。可以通过 tiup list tidb 命令来查看当前支持部署的 TiDB 版本
# 参数 -p 表示在连接目标机器时使用密码登录
# 注意,如果主机通过密钥进行 SSH 认证,请使用 -i 参数指定密钥文件路径,-i 与 -p 不可同时使用。

按照引导,输入”y”及 root 密码,来完成部署:

Do you want to continue? [y/N]: y Input SSH password:

启动集群:

​tiup cluster start 

访问集群:

  • 安装 MySQL 客户端。如果已安装 MySQL 客户端则可跳过这一步骤。

    yum -y install mysql

    访问 TiDB 数据库,密码为空:

    mysql -h 10.0.1.1 -P 4000 -u root

    访问 TiDB 的 Grafana 监控:通过 http://{grafana-ip}:3000 访问集群 Grafana 监控页面,默认用户名和密码均为 admin。访问 TiDB 的 Dashboard:通过 http://{pd-ip}:2379/dashboard 访问集群 TiDB Dashboard 监控页面,默认用户名为 root,密码为空。

执行以下命令确认当前已经部署的集群列表:

tiup cluster list

执行以下命令查看集群的拓扑结构和状态:

tiup cluster display 

部署完毕后可以通过tiup cluster display命令查看拓扑结构 

通过控制面板查看集群状态 

您通过命令查看集群拓扑结构是,可以看见Dashboard URL,浏览器打开此地址,使用服务器账户登录,可以看见如下控制面板界面: 

使用 TiUP 扩容缩容 TiDB 集群

TiDB 集群可以在不中断线上服务的情况下进行扩容和缩容。

本文介绍如何使用 TiUP 扩容缩容集群中的 TiDB、TiKV、PD、TiCDC 或者 TiFlash 节点。如未安装 TiUP,可参考部署文档中的步骤。

扩容 TiDB/PD/TiKV 节点

如果要添加一个 TiDB 节点,IP 地址为 10.0.1.5,可以按照如下步骤进行操作。

注意: 添加 PD 节点和添加 TiDB 节点的步骤类似。添加 TiKV 节点前,建议预先根据集群的负载情况调整 PD 调度参数。

1. 编写扩容拓扑配置

在 scale-out.yml 文件添加扩容拓扑配置:

vi scale-out.yml

tidb_servers:
  - host: 10.0.1.5
    ssh_port: 22
    port: 4000
    status_port: 10080
    deploy_dir: /tidb-deploy/tidb-4000
    log_dir: /tidb-deploy/tidb-4000/log

TiKV 配置文件参考:

tikv_servers:
  - host: 10.0.1.5
    ssh_port: 22
    port: 20160
    status_port: 20180
    deploy_dir: /tidb-deploy/tikv-20160
    data_dir: /tidb-data/tikv-20160
    log_dir: /tidb-deploy/tikv-20160/log

PD 配置文件参考:

pd_servers:
  - host: 10.0.1.5
    ssh_port: 22
    name: pd-1
    client_port: 2379
    peer_port: 2380
    deploy_dir: /tidb-deploy/pd-2379
    data_dir: /tidb-data/pd-2379
    log_dir: /tidb-deploy/pd-2379/log

可以使用 tiup cluster edit-config  查看当前集群的配置信息,因为其中的 global 和 server_configs 参数配置默认会被 scale-out.yml 继承,因此也会在 scale-out.yml 中生效。

2. 执行扩容命令

执行 scale-out 命令前,先使用 check 及 check --apply 命令,检查和自动修复集群存在的潜在风险:

注意: 针对 scale-out 命令的检查功能在 tiup cluster v1.9.3 及后续版本中支持,请操作前先升级 tiup cluster 版本。

(1)检查集群存在的潜在风险:

tiup cluster check  scale-out.yml --cluster --user root [-p] [-i /home/root/.ssh/gcp_rsa]

(2)自动修复集群存在的潜在风险:

tiup cluster check  scale-out.yml --cluster --apply --user root [-p] [-i /home/root/.ssh/gcp_rsa]

(3)执行 scale-out 命令扩容 TiDB 集群:

tiup cluster scale-out  scale-out.yml [-p] [-i /home/root/.ssh/gcp_rsa]

以上操作示例中:

  • 扩容配置文件为 scale-out.yml
  • --user root 表示通过 root 用户登录到目标主机完成集群部署,该用户需要有 ssh 到目标机器的权限,并且在目标机器有 sudo 权限。也可以用其他有 ssh 和 sudo 权限的用户完成部署。
  • [-i] 及 [-p] 为可选项,如果已经配置免密登录目标机,则不需填写。否则选择其一即可,[-i] 为可登录到目标机的 root 用户(或 --user 指定的其他用户)的私钥,也可使用 [-p] 交互式输入该用户的密码。

预期日志结尾输出 Scaled cluster `` out successfully 信息,表示扩容操作成功。

3. 检查集群状态

tiup cluster display 

打开浏览器访问监控平台 http://10.0.1.5:3000,监控整个集群和新增节点的状态。


扩容 TiFlash 节点

如果要添加一个 TiFlash 节点,其 IP 地址为 10.0.1.4,可以按照如下步骤进行操作。

在原有 TiDB 集群上新增 TiFlash 组件需要注意:

  1. 首先确认当前 TiDB 的版本支持 TiFlash,否则需要先升级 TiDB 集群至 v5.0 以上版本。
  2. 执行 tiup ctl:v pd -u http://: config set enable-placement-rules true 命令,以开启 PD 的 Placement Rules 功能。或通过 pd-ctl 执行对应的命令。

1. 添加节点信息到 scale-out.yml 文件

编写 scale-out.yml 文件,添加该 TiFlash 节点信息(目前只支持 ip,不支持域名):

tiflash_servers:
  - host: 10.0.1.4

2. 运行扩容命令

tiup cluster scale-out  scale-out.yml

注意: 此处假设当前执行命令的用户和新增的机器打通了互信,如果不满足已打通互信的条件,需要通过 -p 来输入新机器的密码,或通过 -i 指定私钥文件。

3. 查看集群状态

tiup cluster display 

打开浏览器访问监控平台 http://10.0.1.5:3000,监控整个集群和新增节点的状态。


扩容 TiCDC 节点

如果要添加 TiCDC 节点,IP 地址为 10.0.1.3、10.0.1.4,可以按照如下步骤进行操作。

1. 添加节点信息到 scale-out.yml 文件

编写 scale-out.yml 文件:

cdc_servers:
  - host: 10.0.1.3
    gc-ttl: 86400
    data_dir: /tidb-data/cdc-8300
  - host: 10.0.1.4
    gc-ttl: 86400
    data_dir: /tidb-data/cdc-8300

2. 运行扩容命令

tiup cluster scale-out  scale-out.yml

注意: 此处假设当前执行命令的用户和新增的机器打通了互信,如果不满足已打通互信的条件,需要通过 -p 来输入新机器的密码,或通过 -i 指定私钥文件。

3. 查看集群状态

tiup cluster display 

打开浏览器访问监控平台 http://10.0.1.5:3000,监控整个集群和新增节点的状态。


缩容 TiDB/PD/TiKV 节点

如果要移除 IP 地址为 10.0.1.5 的一个 TiKV 节点,可以按照如下步骤进行操作。

注意

  • 移除 TiDB、PD 节点和移除 TiKV 节点的步骤类似。
  • 由于 TiKV、TiFlash 和 TiDB Binlog 组件是异步下线的,且下线过程耗时较长,所以 TiUP 对 TiKV、TiFlash 和 TiDB Binlog 组件做了特殊处理,详情参考下线特殊处理。

注意: TiKV 中的 PD Client 会缓存 PD 节点的列表。当前版本的 TiKV 有定期自动更新 PD 节点的机制,可以降低 TiKV 缓存的 PD 节点列表过旧这一问题出现的概率。但你应尽量避免在扩容新 PD 后直接一次性缩容所有扩容前就已经存在的 PD 节点。如果需要,请确保在下线所有之前存在的 PD 节点前将 PD 的 leader 切换至新扩容的 PD 节点。

1. 查看节点 ID 信息

tiup cluster display 

2. 执行缩容操作

tiup cluster scale-in  --node 10.0.1.5:20160

其中 --node 参数为需要下线节点的 ID。

预期输出 Scaled cluster  in successfully 信息,表示缩容操作成功。

3. 检查集群状态

下线需要一定时间,下线节点的状态变为 Tombstone 就说明下线成功。

执行如下命令检查节点是否下线成功:

tiup cluster display 

打开浏览器访问监控平台 http://10.0.1.5:3000,监控整个集群的状态。


缩容 TiFlash 节点

如果要缩容 IP 地址为 10.0.1.4 的一个 TiFlash 节点,可以按照如下步骤进行操作。

1. 根据 TiFlash 剩余节点数调整数据表的副本数

  1. 查询是否有数据表的 TiFlash 副本数大于缩容后的 TiFlash 节点数。tobe_left_nodes 表示缩容后的 TiFlash 节点数。如果查询结果为空,可以开始执行缩容。如果查询结果不为空,则需要修改相关表的 TiFlash 副本数。

    SELECT * FROM information_schema.tiflash_replica WHERE REPLICA_COUNT > 'tobe_left_nodes';
  2. 对所有 TiFlash 副本数大于缩容后的 TiFlash 节点数的表执行以下语句,new_replica_num 必须小于等于 tobe_left_nodes

    ALTER TABLE . SET tiflash replica 'new_replica_num';
  3. 重新执行步骤 1,确保没有数据表的 TiFlash 副本数大于缩容后的 TiFlash 节点数。

2. 执行缩容操作

接下来,请任选下列方案其一进行缩容。

方案一:通过 TiUP 缩容 TiFlash 节点

  1. 通过以下命令确定需要下线的节点名称:

    tiup cluster display 
  2. 执行 scale-in 命令来下线节点,假设步骤 1 中获得该节点名为 10.0.1.4:9000

    tiup cluster scale-in  --node 10.0.1.4:9000

方案二:手动缩容 TiFlash 节点

在特殊情况下(比如需要强制下线节点),或者 TiUP 操作失败的情况下,可以使用以下方法手动下线 TiFlash 节点。

  1. 使用 pd-ctl 的 store 命令在 PD 中查看该 TiFlash 节点对应的 store id。

    • 在 pd-ctl(tidb-ansible 目录下的 resources/bin 包含对应的二进制文件)中输入 store 命令。

    • 若使用 TiUP 部署,可以调用以下命令代替 pd-ctl

      tiup ctl:v pd -u http://: store

      注意:如果集群中有多个 PD 实例,只需在以上命令中指定一个活跃 PD 实例的 IP:端口即可。

  2. 在 pd-ctl 中下线该 TiFlash 节点。

    • 在 pd-ctl 中输入 store delete ,其中  为上一步查到的该 TiFlash 节点对应的 store id。

    • 若通过 TiUP 部署,可以调用以下命令代替 pd-ctl

      tiup ctl:v pd -u http://: store delete 

      注意,如果集群中有多个 PD 实例,只需在以上命令中指定一个活跃 PD 实例的 IP:端口即可。

  3. 等待该 TiFlash 节点对应的 store 消失或者 state_name 变成 Tombstone 再关闭 TiFlash 进程。

  4. 手动删除 TiFlash 的数据文件,具体位置可查看在集群拓扑配置文件中 TiFlash 配置部分下的 data_dir 目录。

  5. 从 TiUP 拓扑信息中删除已经下线的 TiFlash 节点信息:

    tiup cluster scale-in  --node : --force

    注意:如果在集群中所有的 TiFlash 节点停止运行之前,没有取消所有同步到 TiFlash 的表,则需要手动在 PD 中清除同步规则,否则无法成功完成 TiFlash 节点的下线。

手动在 PD 中清除同步规则的步骤如下:

  1. 查询当前 PD 实例中所有与 TiFlash 相关的数据同步规则。

    curl http://:/pd/api/v1/config/rules/group/tiflash
    [
      {
        "group_id": "tiflash",
        "id": "table-45-r",
        "override": true,
        "start_key": "7480000000000000FF2D5F720000000000FA",
        "end_key": "7480000000000000FF2E00000000000000F8",
        "role": "learner",
        "count": 1,
        "label_constraints": [
          {
            "key": "engine",
            "op": "in",
            "values": [
              "tiflash"
            ]
          }
        ]
      }
    ]
  2. 删除所有与 TiFlash 相关的数据同步规则。以 id 为 table-45-r 的规则为例,通过以下命令可以删除该规则。

    curl -v -X DELETE http://:/pd/api/v1/config/rule/tiflash/table-45-r

3. 查看集群状态

tiup cluster display 

打开浏览器访问监控平台 http://10.0.1.5:3000,监控整个集群的状态。


缩容 TiCDC 节点

如果要缩容 IP 地址为 10.0.1.4 的一个 TiCDC 节点,可以按照如下步骤进行操作。

1. 下线该 TiCDC 节点

tiup cluster scale-in  --node 10.0.1.4:8300

2. 查看集群状态

tiup cluster display 

打开浏览器访问监控平台 http://10.0.1.5:3000,监控整个集群的状态。

你可能感兴趣的:(tidb,运维,数据库)