10 现网如何修改 TiDB,TiKV,PD 的 port
荣毅龙 2020 年 3 月 10 日
一、背景 / 目的
因为机房网络调整,需要更改 TiDB,TiKV,PD 实例端口信息
二、相关概念及原理解释
修改端口信息前,需要和网络规划保持一致,并且避免端口冲突的问题
三、操作前 Check 项
-
端口预留,检查端口是否被占用,当前是否可用等
netstat -anp |grep 端口号(如 tikv_port、tikv_status_port)
-
检查集群当前的状态,是否正常,可通过监控或者
pd-ctl
查看
监控面板:查看cluster-overview → service port status
服务是否正常
pd-ctl:执行health
显示集群健康信息
四、注意事项
- tidb和tikv调整端口时,需要重启,会影响正在运行的业务,最好可以在业务停止或者低峰期进行操作
- 调整端口会也影响到告警信息,如果有其他告警对接,可能也需要调整配置
五、集群拓扑信息
组件 | 机器 IP:端口 | 目标机器 IP:端口 | 数量 |
---|---|---|---|
TiDB | 172.16.4.242 tidb_port=4807 tidb_status_port=11793 172.16.4.243 tidb_port=4807 tidb_status_port=11793 |
172.16.4.242 tidb_port=4807 tidb_status_port=11793 172.16.4.243 tidb_port=4817 tidb_status_port=12793 |
2 |
PD | 172.16.4.243 pd_client_port=12779 pd_peer_port=2787 172.16.4.242 pd_client_port=12779 pd_peer_port=2787 172.16.4.240 pd_client_port=12779 pd_peer_port=2787 |
172.16.4.243 pd_client_port=12779 pd_peer_port=2787 172.16.4.242 pd_client_port=12779 pd_peer_port=2787 172.16.4.240 pd_client_port=12779 pd_peer_port=2787 |
3 |
TiKV | 172.16.4.239 tikv_port=27173 tikv_status_port=27193 172.16.4.240 tikv_port=27173 tikv_status_port=27193 tikv1-1 ansible_host=172.16.4.238 tikv_port=27173 tikv_status_port=27193 labels=“host=tikv1” tikv1-2 ansible_host=172.16.4.238 tikv_port=27174 tikv_status_port=27194 deploy_dir=/home/tidb/deploy2_3.0.7 labels=“host=tikv2” |
172.16.4.239 tikv_port=27173 tikv_status_port=27193 172.16.4.240 tikv_port=27273 tikv_status_port=27293 tikv1-1 ansible_host=172.16.4.238 tikv_port=27173 tikv_status_port=27193 labels=“host=tikv1” tikv1-2 ansible_host=172.16.4.238 tikv_port=27174 tikv_status_port=27194 deploy_dir=/home/tidb/deploy2_3.0.7 labels=“host=tikv2” |
3 |
六、操作中的关键步骤
6.1 修改 tidb 实例端口 tidb_port 和 tidb_status_port
以 172.16.4.243 服务器 tidb_port 端口从 4807 修改为 4817,tidb_status_port 端口从 11793 修改为 12793 为例
-
在ansible中控机上使用tidb用户,停止需要修改的服务器上的tidb-server服务
su - tidb cd <ansible_deploy> ansible-playbook stop.yml -l 172.16.4.243 -t tidb
-
在中控机上修改 inventory.ini 文件
# TiDB Cluster Part [tidb_servers] 172.16.4.243 tidb_port=4817 tidb_status_port=12793 172.16.4.242 tidb_port=4807 tidb_status_port=11793
-
在tidb服务器 172.16.4.243 上,使用root用户修改/etc/systemd/system/目录下文件名tidb-4807.service 为 tidb-4817.service
cd /etc/systemd/system/ mv tidb-4807.service tidb-4817.service
-
在tidb服务器 172.16.4.243 上,使用 tidb 用户修改 <deploy_dir>/scripts 目录下文件run_tidb.sh , start_tidb.sh , stop_tidb.sh 将原端口修改为目标端口
su - tidb cd <deploy_dir>/scripts vi run_tidb.sh --------------------------- #!/bin/bash set -e ulimit -n 1000000 # WARNING: This file was auto-generated. Do not edit! # All your edit might be overwritten! DEPLOY_DIR=/home/tidb/deploy_3.0.7 cd "${DEPLOY_DIR}" || exit 1 export TZ=Asia/Shanghai exec bin/tidb-server \ -P 4817 \ --status="12793" \ --advertise-address="172.16.4.243" \ --path="172.16.4.243:12779,172.16.4.242:12779,172.16.4.240:12779" \ --config=conf/tidb.toml \ --log-slow-query="/home/tidb/deploy_3.0.7/log/tidb_slow_query.log" \ --log-file="/home/tidb/deploy_3.0.7/log/tidb.log" 2>> "/home/tidb/deploy_3.0.7/log/tidb_stderr.log" --------------------------- vi start_tidb.sh --------------------------- #!/bin/bash set -e # WARNING: This file was auto-generated. Do not edit! # All your edit might be overwritten! sudo systemctl start tidb-4817.service --------------------------- vi stop_tidb.sh --------------------------- #!/bin/bash set -e # WARNING: This file was auto-generated. Do not edit! # All your edit might be overwritten! sudo systemctl stop tidb-4817.service ---------------------------
-
在中控机上,使用 tidb 用户启动 tidb 服务
ansible-playbook start.yml -l 172.16.4.243 -t tidb
-
在中控机上,使用 tidb 用户更新 prometheus 监控
ansible-playbook rolling_update_monitor.yml --tags=prometheus
-
更新后查看监控项是否有显示新的端口信息,可以查看 tidb—>server---->uptime 监控信息
6.2 修改 tikv 实例端口
以 172.16.4.240 服务器 tikv_port 端口从 27173 修改为 27273,tikv_status_port 端口从 27193 修改为 27293
-
在中控机,使用 tidb 用户修改参数max-store-down-time时间,默认为30min,修改为足够长时间 (举例修改为60min),或者完全关闭集群
su - tidb cd <deploy_dir>/resource/bin ./pd-ctl -u http://172.16.4.240:12779 -i >config set max-store-down-time 60m
解释:max-store-down-time 为 PD 认为失联 store 无法恢复的时间,当超过指定的时间没有收到 store 的心跳后,PD 会在其他节点补充副本
-
在中控机,使用 tidb 用户关闭 172.16.4.240 tikv 实例
su - tidb cd <deploy_dir> ansible-playbook stop.yml -l 172.16.4.240 -t tikv
-
在中控机,使用tidb用户修改inventory.ini中的 tikv 端口
su - tidb cd <deploy_dir> vi inventory.ini [tikv_servers] 172.16.4.239 tikv_port=27173 tikv_status_port=27193 172.16.4.240 tikv_port=27273 tikv_status_port=27293 tikv1-1 ansible_host=172.16.4.238 tikv_port=27173 tikv_status_port=27193 labels="host=tikv1" tikv1-2 ansible_host=172.16.4.238 tikv_port=27174 tikv_status_port=27194 deploy_dir=/home/tidb/deploy2_3.0.7 labels="host=tikv2"
-
在 tikv 服务器 172.16.4.240 上,使用root用户修改/etc/systemd/system/目录下文件名tikv-27173.service 为 tikv-27273.service
cd /etc/systemd/system/ mv tikv-27173.service tikv-27273.service
-
在 tikv 服务器 172.16.4.240 上,使用 tidb 用户修改 <deploy_dir>/scripts 目录下文件run_tikv.sh , start_tikv.sh , stop_tikv.sh 将原端口修改为目标端口
su - tidb cd <deploy_dir>/scripts vi run_tikv.sh --------------------------- #!/bin/bash set -e ulimit -n 1000000 # WARNING: This file was auto-generated. Do not edit! # All your edit might be overwritten! cd "/home/tidb/deploy_3.0.7" || exit 1 export RUST_BACKTRACE=1 export TZ=${TZ:-/etc/localtime} echo -n 'sync ... ' stat=$(time sync) echo ok echo $stat echo $$ > "status/tikv.pid" exec bin/tikv-server \ --addr "0.0.0.0:27273" \ --advertise-addr "172.16.4.240:27273" \ --status-addr "172.16.4.240:27293" \ --pd "172.16.4.243:12779,172.16.4.242:12779,172.16.4.240:12779" \ --data-dir "/home/tidb/deploy_3.0.7/data" \ --config conf/tikv.toml \ --log-file "/home/tidb/deploy_3.0.7/log/tikv.log" 2>> "/home/tidb/deploy_3.0.7/log/tikv_stderr.log" --------------------------- vi start_tikv.sh --------------------------- #!/bin/bash set -e # WARNING: This file was auto-generated. Do not edit! # All your edit might be overwritten! sudo systemctl start tikv-27273.service --------------------------- vi stop_tikv.sh --------------------------- #!/bin/bash set -e # WARNING: This file was auto-generated. Do not edit! # All your edit might be overwritten! sudo systemctl stop tikv-27273.service ---------------------------
-
在中控机上,使用 tidb 用户启动 tikv 服务
ansible-playbook start.yml -l 172.16.4.240 -t tikv
-
在中控机上,使用 tidb 用户更新 prometheus 监控
ansible-playbook rolling_update_monitor.yml --tags=prometheus
-
更新后查看监控项是否有显示新的端口信息,可以查看 detail-tikv—>cluster---->cpu 监控信息
-
在中控机,使用 tidb 用户修改参数max-store-down-time时间,默认为30min,修改为原配置
su - tidb cd <deploy_dir>/resource/bin ./pd-ctl -u http://172.16.4.240:12779 -i >config set max-store-down-time 30m 解释:max-store-down-time 为 PD 认为失联 store 无法恢复的时间,当超过指定的时间没有收到 store 的心跳后,PD 会在其他节点补充副本
6.3 PD 修改端口
PD 不建议直接修改端口,请参考扩容缩容章节,先进行扩容,再缩容
七、常见问题
Q1. 端口已经被占用,报错无法启动,需要提前检查端口信息
netstat -ntlp | grep 2779
Q2. 修改端口信息只修改了配置文件,没有修改/etc/systemd/system下的service文件