PCTA DAY2笔记

之前有看到群里有小伙伴需要老师的课件,PCTA考试时候的学习笔记,基本是照着视频当了4小时的速记员,没有什么总结,按需自取,又是一个不支持TOC的markdown编辑器,sad

[TOC]

TIDB 安装部署及集群管理

TIDB网络端口信息

组件 默认端口 说明
TIDB 4000 应用及DBA工具访问通信端口
TIDB 10080 TIDB状态信息上报通信端口
TIKV 20160 TIKV通信端口
PD 2379 提供TIDB和PD通信端口
PD 2380 PD集群节点间通信端口
Pump 8250 Pump通信端口
Drainer 8249 Drainer通信端口
Prometheus 9090 Prometheus服务通信端口
Pushgateway 9091 TIDB,TIKV,PD监控聚合和上报端口
Node_exporter 9100 TIDB集群每个节点的系统信息上报通信端口
Blackbox_exporter 9115 Blackbox_exporter通信端口,用于TIDB集群端口监控
Grafana 3000 Web监控服务对外服务和客户端访问端口
Grafana 8686 grafana_collector通信端口,用于将Dashboard导出为PDF格式
Kafka_exporter 9308 Kafka_exporter通信端口,用于监控binlog kafka集群

tidb-ansible

主要部分 说明
yml文件 主要的playbook剧本
conf目录 配置文件
group_vars目录 端口配置等
inventory.ini文件 主要的配置文件,指定操作主机
resource和download目录 binary包
scripts目录 监控相关json文件,初始化后,会生成一些运维脚本
roles目录 角色相关任务和自定义变量|

tidb-ansible 主要功能

  • TIDB集群部署 bootstrap.yml/local_prepare.yml/deploy.yml
  • TIDB集群启停 start.yml/stop.yml
  • TIDB集群扩缩容
  • TIDB集群升级组件版本 rolling_update.yml/rolling_update_monitor.yml
  • TIDB集群数据清理 unsafe_cleanup_data.yml
  • TIDB集群销毁 unsafe_cleanup.yml
  • TIDB周边工具(PD control,TIKV control等)

ansible-Playbook命令格式

hosts.ini 中的所有主机将CPU频率设置为高性能模式

$ ansible -i hosts.ini all -m shell -a "cpupower frequency-set --governor performance" -u tidb -b 

-i hosts.ini --指定执行操作hosts配置文件 all --hosts.ini下所有主机 -m --执行的"shell"模块 -a --执行shell模块参数 -u --执行的用户 -b --进行的sudo操作

下载TIDB集群binary介质

$ ansible-playbook local_prepare.yml

滚动升级TIDB

$ ansible-playbook rolling_update.yml --tags=tidb

–tags --指定执行tidb任务

$ ansible-playbook bootstrap.yml -l 192.168.0.1 192.168.0.2

-l --指定执行主机范围,可以IP或者别名(tikv多实例中的别名)

ansible在线部署

部署前准备工作

中控机tidb-ansible节点部署工作

  • 安装系统依赖包
    • epel-release
    • git
    • curl
    • sshpass
  • 创建tidb用户
    • tidb.tidb 用户/用户组
    • /home/tidb 家目录
    • sudo 权限
    • 生成ssh key
  • TiDB-Ansible部署
    • git下载tidb-ansible介质
    • 通过pip安装 tidb-ansible依赖软件包括ansible,软件list在tidb-ansible/requirments.txt
    • 配置目标主机ssh互信及sudo规则,NTP服务,CPUfreq,文件系统的创建。

inventory.ini

  • inventory.ini是playbook重要的参数配置文件,tidb-ansible中的inventory.ini的配置主要是和集群相关配置,比如各个组件的主机组配置,部署目录位置,以及ansible运行权限配置等。具体信息参考官档。
  • tidb,tikv,pd的参数文件放在./tidb-ansible/conf/下,如果不需要特殊配置,ansible会根据这个参数文件模版在目标主机上生成对应的toml格式的配置文件,会存储在${deploy_dir}/conf下面,建议后期通过tidb-ansible维护配置文件的参数修改,对集群的统一化管理有很大帮助。

部署任务

  • 确认tidb-ansible/inventory.ini中ansible_user=tidb
  • 验证所有目标主机tidb用户ssh互信已经sudo免密配置成功
  • 执行local_prepare.yml,联网下载TiDB binary到中控机
  • 初始化系统环境,检查硬件配置,修改内核参数以及创建deploy_dirbootstrap.yml
  • 部署TiDB集群deploy.yml
  • 启动TiDB集群start.yml
  • 验证集群可以正常连接 mysql -u root -h IP -P 4000
  • Grafana dashboard监控平台登录

ansible离线部署

部署前准备工作

  • 下载机:开放外网访问,系统版本CentOS7.3以上,用于下载相关安装包
    • 系统依赖离线安装包(pip/sshpass)
    • Ansible 2.5离线安装包
    • tidb-ansible安装包
    • 通过tidb-ansible的local_prepare.yml下载TiDB集群的二进制包
  • 中控机以及集群主机配置以及部署前准备工作参照ansible在线部署需求
    • ssh互信以及sudo免密工作
    • NTP服务
    • CPUfreq
    • 数据盘文件系统ext4
    • inventory.ini配置

部署工作

  • 参照ansible在线部署任务操作,不需要再进行local_prepare.yml操作
  • 注意一些附加功能需要单独下载离线安装进行部署,比如Grafana Dashboard的font离线安装包
  • 需要下载MySQL client 进行集群的功能测试

TiDB日常管理

工具和日志

  • Tools
    • PD control
    • TiKV control
    • TiDB control
  • Logs
    • TiDB log (慢查询,冲突语句日志)
    • TiKV log
    • PD log
    • ansible log

参数修改

  • slow log 单独输出到slow.log文件中,并设置slow-query小于200ms 输出,使用ansible完成。
1. 修改enable_slow_query_log,slow-threshold参数
	a ./tidb-ansible/inventory.ini修改`enable_slow_query_log`为True
	b ./tidb-ansible/conf/tidb.toml修改 `slow-threshold`为200(默认为ms)
2.rolling_update.yml 生效参数
	a ansible-playbook rolling_update.yml  --tags=tidb
3.tidb 节点验证是否生成tidb_slow_query.log
	a ls -lart ${deploy_dir}/tidb_slow_query.log

集群扩缩容

Ansible扩缩容

  • TiDB/TiKV 扩容
    • 编辑 inventory.ini配置扩容节点信息
    • bootstrap.yml进行节点的初始化
    • deploy.yml部署节点
    • 启动新节点
    • 更新prometheus配置重新启动
  • TiDB缩容
    • 停掉缩容节点tidb-server
    • 删除inventory.ini缩容TiDB配置信息
    • 更新prometheus配置重新启动
    • 打开grafana验证集群状态http://grafana-server-IP:3000
  • TiKV缩容
    • PD control从集群中移除缩容节点
    • 使用grafana或者PD control验证tikv移除成功
    • 停掉缩容节点tikv-server
    • 删除inventory.ini缩容TiKV配置信息
    • 更新prometheus配置重新启动
    • 打开grafana验证集群状态http://grafana-server-IP:3000
  • PD扩容
    • 编辑inventory.ini配置扩容节点信息
    • bootstrap.yml进行节点的初始化
    • deploy.yml部署节点
    • 登录新增的PD节点,编辑启动脚本${deploy_dir}/scripts/run_pd.sh
    • rolling_update.yml滚动升级整个集群
    • 更新Prometheus配置重新启动
    • 打开grafana验证集群状态http://grafana-server-IP:3000
  • PD缩容
    • PD control从集群中移除缩容节点
    • 使用grafana或者PD control验证PD移除成功
    • 停掉缩容节点PD
    • 删除inventory.ini缩容PD配置信息
    • rolling_update.yml滚动升级整个集群
    • 更新Prometheus配置重新启动
    • 打开grafana验证集群状态http://grafana-server-IP:3000

PD control扩缩容

  • PD扩容
    • 动态添加节点,部署完成PD节点,通过pd-server完成新节点的增加
 ./bin/pd-server --name=pd4\   ##pd名称
			  --client-urls="http://host4:2379"\   ## pdclient访问端口   
			  --peer-urls="http://host4:2380"\     ##pd输入端口
			  --join="http://host1:2379"           ##当前集群任意pd的client访问端口
  • TiKV扩容
    • 新部署TiKV节点服务启动后会自动注册进集群,PD会进行自动负载均衡操作,均衡TiKV压力
  • PD control交互模式
    • ${deploy_dir}/bin/pd-ctl -u http://pd-ip:2379
  • PD缩容
    • >>member ##当前pd节点信息
    • >>member delete pd-n ##删除pd节点
  • TiKV缩容
    • >>store ##当前tikv节点信息
    • >>store delete tikv-id ##删除tikv节点
    • >>store 1 ##查看tikv-1信息
  • TiDB扩缩容
    • TiDB无状态服务,可以直接添加/删除TiDB节点,注意如果是proxy负载均衡,需要更新proxy配置。
  • PD动态迁移
    • 如果要迁移现有PD节点到新机器上,可以先在新机器上添加节点,再把旧的机器上的节点删除,迁移过程中应一个节点一个节点逐个迁移,每完成一个步骤可以先查看一下当前的所有节点信息来进行确认
  • TiKV动态迁移
    • 迁移TiKV服务也是通过先在新的机器上添加节点,然后把旧的机器上的节点下线完成。迁移过程中可以先把新集群的机器全部加入到已有的集群中,然后再把旧的节点一个一个下线。可以通过查看正在下线的节点的状态信息来确定这个节点是否已经完成下线,确认完成以后再下线下一个节点。

集群升级

  • TiDB集群升级可以通过ansible完成在线升级

tidb-ansible升级

  • 部分TiDB需要升级tidb-ansible,tidb-ansible根据TiDB的大版本的变化会进行迭代,例如TiDB release 1升级到TiDB release2,需要从Git上下载新的release 2.0版本。

TiDB集群二进制包下载

  • 手动下载
    • 通过wget在http://download.pincap.ora下载指定的版本
    • 解压二进制tar包后,将二进制包替换./tidb-ansible/resouce/bin下的二进制文件。
  • 自动下载
    • 在inventory.ini调整tidb-versions至相应版本
    • 删除原有的./tidb-ansible/downloads目录
    • 通过local.prepare.yml进行二进制包文件下载
  • 滚动升级TiDB
    • 通过rolling_update.yml完成PD、TiKV、TiDB升级,如果需要单独升级某个组件,可以通过参数tags完成
    • 最后升级监控rolling_update_monitor.yml。
2赞

非常感谢 @lemontree8801的认真总结与分享,为大家学习和及时沉淀作出了很好的示范,也为大家提供了重要的学习要点参考!!:100: