TIDB 集群无感知扩缩容

1.前言

  • 在之前的博文,分别介绍了 "如何部署 TIDB 集群" "如何升级 TIDB 集群"。今天将会介绍下,如何对已经搭建好的 TIDB 进行扩缩容。比如,当存储成了集群的瓶颈,我们可能会想扩容 TIKV ; 计算资源成了瓶颈,我们可能会想扩容 TIDB ...
  • 一个优秀的集群,扩缩容理应对用户是无感知
  • 今天使用的集群拓扑结构是:一台服务器 (172.24.77.181) 上装有 pd、tidb、monitor,三台服务器 (172.24.77.182、172.24.77.178、172.24.77.180) 上分别装有 tikv。
  • 新购入一台服务器 (172.24.77.187) ,用于实验扩缩容

2.配置新机器

  • 进入集群主控机中
# ssh 
ssh tidb 

# 切换到 tidb 用户
su - tidb

# 进入到 tidb-ansible 目录中
cd tidb-ansible-v3.0.1/
  • 把新服务器加入到 hosts 文件中
# 修改 hosts.ini 文件,在 [servers] 下加入新 IP
vim hosts.ini 

# 为新服务创建用户
ansible-playbook -i hosts.ini create_users.yml -u root -k 

// 交互时输入新服务的root密码
  • 为新服务器安装依赖程序
# ssh 
ssh 172.24.77.187

# ntp 服务
sudo yum install ntp ntpdate -y

# 启动 ntp 服务
sudo systemctl start ntpd.service
sudo systemctl enable ntpd.service

# 查看 ntp 服务状态
sudo systemctl status ntpd.service

3.动态扩容 TIKV

  • 配置节点、修改配置
# 在主控机的 tidb-ansible 目录下修改 inventory.ini 文件
# 在 [tikv_servers] 和 [monitored_servers] 下加入新机器 IP
vim inventory.ini

# 引导程序(-l 后跟新机器 IP,如果由多个 IP,则以逗号分隔)
ansible-playbook bootstrap.yml -l 172.24.77.187

# 向新服务器部署程序
ansible-playbook deploy.yml -l 172.24.77.187

# 启动新的 tikv 节点
ansible-playbook start.yml -l 172.24.77.187

# 更新普罗米修斯监控服务
ansible-playbook rolling_update_monitor.yml --tags=prometheus
  • 在监控界面可以看到 TIKV 的节点数从 3 变成了 4
  • 还可以发现 region 已经开始往新机器上复制了

4.动态缩容 TIKV

# 通过 pd-ctl 来查看当前所有 TiKV 节点的信息(172.24.77.181 这个是 PD 的 IP)
./resources/bin/pd-ctl -u "http://172.24.77.181:2379" -d store

# 通过上一步的操作找到需要下线的 TIKV 的 ID(这里是 84)
./resources/bin/pd-ctl -u "http://172.24.77.181:2379" -d store delete 84

# 停止已下线的 TIKV 的服务
ansible-playbook stop.yml -l 172.24.77.187

# 去掉 tikv 这个节点,删除 [tikv_servers] 和 [monitored_servers] 下面已下线的tikv IP
vim inventory.ini

# 更新普罗米修斯监控
ansible-playbook rolling_update_monitor.yml --tags=prometheus
  • 在监控页面上可以看到 tikv 的节点数从 4 变成了 3
  • 还可以看到已经下线 tikv 中的 region 在不断往其他机器迁移

5.动态扩容 TIDB

# 在主控机的 tidb-ansible 目录下修改 inventory.ini 文件
# 在 [tidb_servers] 和 [monitored_servers] 下加入新机器 IP
vim inventory.ini

# 引导程序(-l 后跟新机器 IP,如果由多个 IP,则以逗号分隔)
ansible-playbook bootstrap.yml-l 172.24.77.187 

# 向新服务器部署程序
ansible-playbook deploy.yml -l 172.24.77.187

# 启动新的 tidb 节点
ansible-playbook start.yml -l 172.24.77.187

# 更新普罗米修斯监控服务
ansible-playbook rolling_update_monitor.yml --tags=prometheus
  • 在监控页面上可以看到 tidb 的节点数从 1 变成了 2

6.动态缩容 TIDB

  • TiDB 是一个无状态的服务,这也就意味着我们能直接添加和删除 TiDB。相对于 TIKV  会简单一些。
# 停止新加入的 tidb 节点
ansible-playbook stop.yml -l 172.24.77.187

# 编辑 inventory.ini 文件,移除节点信息
vim inventory.ini

# 更新普罗米修斯监控服务
ansible-playbook rolling_update_monitor.yml --tags=prometheus
  • 查看监控页面可以看到 tidb 节点从 2 变成了 1

7.总结

  • TiDB 集群可以在不影响线上服务的情况下动态进行扩容和缩容。
  • 动态添加一个新的 TiKV 服务非常容易,只需要在新的机器上启动一个 TiKV 服务,不需要其他特殊操作。 新启动的 TiKV 服务会自动注册到现有集群的 PD 中,PD 会自动做负载均衡,逐步地把一部分数据迁移到新的TiKV 服务中,从而降低现有 TiKV 服务的压力。
  • 安全地删除(下线)一个 TiKV 服务需要先告诉 PD,这样 PD 可以先把这个 TiKV 服务上面的数据迁移到其他 TiKV 服务上,保证数据有足够的副本数。
  • TiDB 是一个无状态的服务,这也就意味着我们能直接添加和删除 TiDB。

End. 👻

Show Comments