TIDB 安装

作者: 我只是一个小白 | 来源:发表于2018-07-18 13:57 被阅读82次

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

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

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

    • 1.检查系统
    
    # 检查文件系统
    
    # cat /etc/fstab
    /dev/vdb1 /data1 ext4 nodelalloc 0 0
    
    
    • 2.免密配置
    
    # 生成秘钥
    
    # useradd tidb
    # passwd tidb
    # su - tidb
    
    # ssh-keygen -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 是否正常运行
    
    [tidb@ip-172-16-10-59 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 命令寻找
    
    [tidb@ip-172-16-10-59 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 语句,为了避免数据丢失,会一直重试。

    监控

    
    # 修改启动脚本
    
    [tidb@ip-172-16-10-59 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
    
    

    相关文章

      网友评论

        本文标题:TIDB 安装

        本文链接:https://www.haomeiwen.com/subject/hiyopftx.html