欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

TIDB 安装

程序员文章站 2022-07-13 09:15:24
...

小白版本的安装入门,欢迎新手来参考????

系统初始化(选择59作为中控机)

注意:推荐安装时,不使用 root 用户,而是使用 tidb 用户

  • 1.检查系统

# 检查文件系统

# cat /etc/fstab
/dev/vdb1 /data1 ext4 nodelalloc 0 0

  • 2.免密配置

# 生成秘钥

# useradd tidb
# passwd tidb
# su - tidb

# ssh-****** -t rsa

# 下载 tidb-ansible master

# git clone https://github.com/pingcap/tidb-ansible.git

# 安装 ansible 的依赖

# sudo yum -y install epel-release 

# sudo yum -y install python-pip curl

# cd tidb-ansible/

# sudo pip install -r ./requirements.txt

# ansible --version


# 使用 tidb-ansible 配置秘钥

# vi hosts.ini
[servers]
172.16.10.59
172.16.10.60
172.16.10.61
172.16.10.62
[all:vars]
username = tidb

# 按照顺序输入密码

# ansible-playbook -i hosts.ini create_users.yml -k

注意:这里的互信是看官网的,实际操作是直接在59那台服务器生成公钥,然后将内容复制到每台服务器的 home 目录下 .ssh/ 下的 authorized_keys 文件内。最后的目标是通过中控机可以访问无秘钥登录其他服务器 tidb 账户,每台服务器的 tidb 账户可以通过 sudo su - root 直接切换到 root 用户,这样互信就完成了,下文有检查互信的方法。

  • 3.检查 ntp 是否正常运行

[[email protected] tidb-ansible]$ ntpstat
synchronised to NTP server (85.199.214.100) at stratum 2 
   time correct to within 159 ms
   polling server every 1024 s

注意:这个可以在配置文件里面关闭,主要是为了保证服务器时间统一,正式服务器不可关闭,测试可以。

安装配置

  • 1.配置 inventory.ini

vim inventory.ini

修改内容参考官方

注意:user 改为 tidb 用户,注意下载的 tidb 的版本

  • 2.检查互信

ansible -i inventory.ini all -m shell -a 'whoami'

ansible -i inventory.ini all -m shell -a 'whoami' -b

  • 3.下载 tidb binary

ansible-playbook local_prepare.yml

  • 4.初始化系统环境,修改内核参数

ansible-playbook bootstrap.yml

注意

如果这个地方配置没有通过,如修改 `/home/tidb/wangjun/tidb-ansible/roles/check_system_optional/defaults/main.yml` 里面的限制,注意看报错模块,一般都是在 roles 文件夹下,defaults 文件夹下的 yml 文件中是阈值。

为了提高初始化系统环境的速度,可以修改 io 测试模块中,生成文件的大小,默认是10G。

或者跳过

bootstrap.yml 阶段如何跳过磁盘检测、CPU、内存容量检测

ansible-playbook bootstrap.yml --extra-vars "dev_mode=True"

  • 5.安装

ansible-playbook deploy.yml

  • 6.启动集群

ansible-playbook start.yml

部署完成

注意:

Grafana Dashboard 上的 Report 按钮可用来生成 PDF 文件,此功能依赖 fontconfig 包。如需使用该功能,登录 grafana_servers 机器,用以下命令


sudo yum install fontconfig -y

集群入门使用

  • 1.登录

mysql -uroot -P4000 -h 172.16.10.59

注意:

1.需要接 ip,不然默认 socket 接入是有问题的

2.MySQL 命令可以找一个,上传上去

3.没有初始化密码,注意设置初始密码

  • 2.监控前端

地址:http://172.16.10.59:3000 

默认帐号密码是:admin/admin

注意:如果修改了 admin 的密码,及时修改 inventor.ini 配置文件中的相关配置。

滚动升级

1.滚动升级,不影响业务运行的话,最低的配置为:pd*3 ,tidb*2 ,tikv*3

2.如果集群环境中有 pump / drainer 服务,请先停止 drainer 后滚动升级 (升级 TiDB 时会升级 pump)

  • 自动下载 binary

# 原先的版本

./resources/bin/tidb-server -V



# 删除原来的安装包

rm -rf downloads/



# 修改配置

vim inventory.ini

tidb_version = v1.0.2



# 下载

ansible-playbook local_prepare.yml




# 现在的版本

./resources/bin/tidb-server -V


# 滚动升级所有(可指定升级部分)

ansible-playbook rolling_update.yml



# 更新 Prometheus 配置并重启
ansible-playbook rolling_update_monitor.yml --tags=prometheus

扩容

添加一个 tidb


# 添加新 tidb 的 IP

vim inventory.ini



# 初始化新增节点(多个IP 用逗号隔开,--tags=tidb 参数指定服务,-l 可以接 ip 或者服务的别名,为了 单 node 多 tikv 部署的情况使用)

ansible-playbook bootstrap.yml -l 172.16.10.61



# 部署新增节点
ansible-playbook deploy.yml -l 172.16.10.61



# 启动新节点服务
ansible-playbook start.yml -l 172.16.10.61



# 更新 Prometheus 配置并重启
ansible-playbook rolling_update_monitor.yml --tags=prometheus

添加一个 pd

  • 这里我们将59服务器扩容 pd

  • 安装


# 修改 inventory.ini 配置文件

[pd_servers]

172.16.10.59



# 初始化新增节点

ansible-playbook bootstrap.yml -l 172.16.10.59



# 部署新节点

ansible-playbook deploy.yml -l 172.16.10.59 --tags=pd



# 注意 这里需要上新增 pd 服务器中手动修改配置文件

## 修改 vim scripts/run_pd.sh

### 删除:

--initial-cluster="pd1=http://172.16.10.59:2380,pd2=http://172.16.10.60:2380,pd3=http://172.16.10.61:2380,pd4=http://172.16.10.62:2380" \

### 添加:

--join="http://172.16.10.60:2379" \

### 注意:

1.端口为2379

2.修改 inventory.ini 配置文件时,新加 pd 的 ip 加在最后,因为 run_pd.sh 的脚本中有个name 的属性,里面的名字是 pd+顺序 id 拼接的,如果写的位置不是最后一个,可能会造成这个属性冲突。

## 手动启动

./scripts/start_pd.sh

在中控机上使用 pd-ctl 命令看 member 信息

## 滚动升级,更新所有其他节点记录的pd 信息和相关脚本

ansible-playbook rolling_update.yml

## 更新 Prometheus 配置并重启

ansible-playbook rolling_update_monitor.yml --tags=prometheus

删除59新添的 pd


# 1.使用 pd-ctl 命令查看59的 pd name,并根据 pd name 将其移除pd 集群

./resources/bin/pd-ctl -u http://172.16.10.60:2379 -d member

./resources/bin/pd-ctl -u http://172.16.10.60:2379 -d member delete name pd4



# 2.关闭59上 pd 的服务

ansible-playbook stop.yml -l 172.16.10.59 --tags=pd



# 3.注释掉 inventory.ini 59服务器的 pd 配置

# 4.滚动更新 prometheus

ansible-playbook rolling_update_monitor.yml --tags=prometheus

缩容

剔除61的 tidb


# 关闭 61服务器中的tidb 服务

ansible-playbook stop.yml -l 172.16.10.61 --tags=tidb



# 注释 61服务器

vim inventory.ini

## TiDB Cluster Part

[tidb_servers]

172.16.10.59

172.16.10.60

#172.16.10.61



# 更新 prometheus

ansible-playbook rolling_update_monitor.yml --tags=prometheus

思路:

  • 1.关闭需要剔除的 tidb 服务器

  • 2.注释中控机配置文件中,tidb 模块中的 ip,避免中控机启动集群再次启动

  • 3.剔除的 tidb 物理文件依然在原服务器上

剔除61的 tikv


# 中控机使用 pd-ctl 命令远程剔除

# pd-ctl 命令寻找

[[email protected] tidb-ansible]$ sudo find / -name pd-ctl*

/home/tidb/wangjun/tidb-ansible/resources/bin/pd-ctl

/home/tidb/wangjun/tidb-ansible/scripts/pd-ctl.sh

/home/tidb/wangjun/tidb-ansible/roles/ops/templates/pd-ctl.sh.j2



# 1.查看 pd 中需要剔除 tikv 的 store id

./resources/bin/pd-ctl -u "http://172.16.10.61:2379" -d store



# 2.根据 store id 去剔除 tikv

./resources/bin/pd-ctl -u "http://172.16.10.61:2379" -d store delete 5



# 3.关闭对应的 tikv

ansible-playbook stop.yml -l 172.16.10.61 --tags=tikv



# 4.注释掉 ini 配置文件中的 IP

ansible-playbook rolling_update_monitor.yml --tags=prometheusvim inventory.ini 



# 5.更新掉 prometheus

ansible-playbook rolling_update_monitor.yml --tags=prometheus

思路:

  • 1.使用 pd-ctl 找出需要剔除 tikv 的 store 的 id,并剔除

  • 2.关闭对应 tikv 的服务(单 node 多实例情况下, -l 接 tikv 的别名来关闭 tikv)

  • 3.注释中控机配置文件中,tikv 模块中的 ip,避免中控机启动集群再次启动

  • 4.剔除的 tikv 物理文件依然在原服务器上

再次将61的 tikv 添加到集群


# 删除 tikv 余留的物理文件

ansible-playbook unsafe_cleanup_data.yml -l 172.16.10.61 --tags=tikv

# 发现未生效,直接物理删除 data/ 目录,不删除,无法添加成功



# 按照添加 tidb 的方式,将 tikv 添加回集群,添加成功

tikv 多实例


# 关闭集群

ansible-playbook stop.yml

# 销毁集群

ansible-playbook unsafe_cleanup.yml



# 单机多 tikv 部署

vim inventory.ini

TiKV1-1 ansible_host=172.16.10.60 deploy_dir=/data1/wj_deploy_1 tikv_port=20171 labels="host=tikv1"

TiKV1-2 ansible_host=172.16.10.60 deploy_dir=/data1/wj_deploy_2 tikv_port=20172 labels="host=tikv1"

TiKV2-1 ansible_host=172.16.10.61 deploy_dir=/data1/wj_deploy_1 tikv_port=20171 labels="host=tikv2"

TiKV2-2 ansible_host=172.16.10.61 deploy_dir=/data1/wj_deploy_2 tikv_port=20172 labels="host=tikv2"

TiKV3-1 ansible_host=172.16.10.62 deploy_dir=/data1/wj_deploy_1 tikv_port=20171 labels="host=tikv3"

TiKV3-2 ansible_host=172.16.10.62 deploy_dir=/data1/wj_deploy_2 tikv_port=20172 labels="host=tikv3"

...

[pd_servers:vars]

# location_labels = ["zone","rack","host"]

location_labels = ["host"]

[all:vars]

deploy_dir = /data1/wj_deploy

tidb_version = v2.0.0



# 配置 vim conf/tikv.yml(算法参考官网)

## 1.block-cache-size 配置(内存)

### 配置 rocksdb defaultcf 下的 block-cache-size

block-cache-size: "1024MB"

### 配置 rocksdb writecf 下的 block-cache-size

block-cache-size: "1280MB"

### 配置 rocksdb lockcf 下的 block-cache-size

block-cache-size: "145MB"


### 配置 raftdb defaultcf 下的 block-cache-size

block-cache-size: "145MB"


## 2.concurrency 配置(CPU)
### 配置 readpool 下的 high-concurrency、normal-concurrency 和 low-concurrency 三个参数
high-concurrency: 2
normal-concurrency: 2
low-concurrency: 2

## 3.磁盘配置
### 配置 raftsore 下的 capacity 参数
capacity: "40G"

# 正常部署即可

tidb-binlog 集群搭建(ansible 部署方式)

  • 三组件:

a)binlog 是由 pump 生成,并异步写入到 kafka;

b)Kafka & ZooKeeper:存储 pump 推来的日志,并且给 drainer 读取

kafka 集群部署

  • 参考文件:IP:https://github.com/pingcap/thirdparty-ops/blob/master/kafka-ansible/zh_cn.md

# 中控机下载 kafka-ansible

git clone https://github.com/pingcap/thirdparty-ops.git

cd kafka-ansible



# 配置 inventory.ini (配置内容具体看参考文件)

[zookeeper_servers]
zk1 ansible_host=172.16.10.59 deploy_dir=/home/tidb/wj_zk_deploy myid=1
zk2 ansible_host=172.16.10.60 deploy_dir=/home/tidb/wj_zk_deploy myid=2
zk3 ansible_host=172.16.10.61 deploy_dir=/home/tidb/wj_zk_deploy myid=3
[kafka_servers]
kafka1 ansible_host=172.16.10.59 deploy_dir=/home/tidb/wj_kafka_deploy data_dirs=/data1/kafka_data,/data1/kafka_data_2 kafka_port=9092 id=1

kafka2 ansible_host=172.16.10.60 deploy_dir=/home/tidb/wj_kafka_deploy data_dirs=/data1/kafka_data,/data1/kafka_data_2 kafka_port=9092 id=2

kafka3 ansible_host=172.16.10.61 deploy_dir=/home/tidb/wj_kafka_deploy data_dirs=/data1/kafka_data,/data1/kafka_data_2 kafka_port=9092 id=3


# 开始部署

## 下载需要的包

ansible-playbook -i inventory.ini local_prepare.yml

## 初始化系统环境,修改内核参数

ansible-playbook -i inventory.ini bootstrap.yml --extra-vars "dev_mode=True"

## 安装依赖包

ansible-playbook -i inventory.ini deploy.yml

## 启动服务

ansible-playbook -i inventory.ini start.yml

  • 遇到的问题:

如果发现 kafka 启动失败,日志打印内存不足,可以配置 inventory.ini 中的 kafka_heap_size 大小

kafka监控


# 进入 tidb-ansible 安装目录,修改 inventory.ini 配置

vim inventory.ini

[kafka_exporter_servers]

172.16.10.59



# 更新监控

ansible-playbook rolling_update_monitor.yml

ansible 部署 pump

  • 1.关闭 tidb-server

ansible-playbook -i inventory.ini stop.yml --tags=tidb

  • 2.配置 inventory.ini

enable_binlog = True

zookeeper_addrs = "172.16.10.59:2181,172.16.10.60:2181,172.16.10.61:2181"

kafka_addrs = "172.16.10.59:9092,172.16.10.60:9092,172.16.10.61:9092"

  • 3.更新 tidb 组件

 ansible-playbook -i inventory.ini deploy.yml --tags=tidb

  • 4.启动 tidb 组件

ansible-playbook -i inventory.ini start.yml --tags=tidb

部署 drainer


# 1.解压下载的包

wget http://download.pingcap.org/tidb-binlog-latest-linux-amd64.tar.gz

tar -zxvf tidb-binlog-latest-linux-amd64.tar.gz

cd tidb-binlog-latest-linux-amd64/



# 2.配置配置文件,参考(https://pingcap.com/docs-cn/tools/tidb-binlog-kafka/#tidb-binlog-%E9%83%A8%E7%BD%B2%E6%96%B9%E6%A1%88)

vim drainer.toml



# 3.启动

./bin/drainer -config drainer.toml &

注意:drainer 下游有两种:

1.db-type 配置为 mysql,使用流复制,传输到 mysql 中

2.db-type 配置为 pb,存放到 binlog 日志目录下

注意2:

经过测试,如果同步有错误,比如上游 tidb 创建一个库下游 mysql 已经存在,这样的话 drainer 会重试5次,如果不成功,自动跳过。

如果是 dml 语句,为了避免数据丢失,会一直重试。

监控


# 修改启动脚本

[[email protected] tidb-binlog-latest-linux-amd64]$ cat run_drainer.sh 

#!/bin/bash

set -e

ulimit -n 1000000



DEPLOY_DIR=/home/tidb/wangjun/tidb-binlog-latest-linux-amd64



cd "${DEPLOY_DIR}" || exit 1



# WARNING: This file was auto-generated. Do not edit!

# All your edit might be overwritten!



exec bin/drainer \

        --config=drainer.toml \

        --metrics-addr=172.16.10.59:9091 \

# --metrics-interval = 15 \

PbReader工具部署

解析 binlog 的工具


# 注意配置 drainer 的配置文件,开启 pd 模式

# 下载使用

wget http://download.pingcap.org/pb_reader-latest-linux-amd64.tar.gz

tar -zxvf pb_reader-latest-linux-amd64.tar.gz 

cd pbReader

bin/pbReader -binlog-file=../data.drainer/binlog-0000000000000000-20180615110715

转载于:https://www.jianshu.com/p/d17ced299600