麒麟v10 上部署 TiDB v5.1.2 生产环境优化实践
920
2024-03-14

如图,当前机房 1 为 DRAutoSync 的主机房。
非计划内切换下,会模拟没有任何操作的情况下,机房 1 直接掉电。然后将机房 2 剩余的节点升级为完整集群,提供服务。
注意由于 primary 集群挂掉,tidb 多副本丢失,机房 2 的节点在恢复前是不提供服务的。
机房二有 tiup 备机,且有完整的镜像源和 ctl 工具
推荐服务器安装 jq 命令
指定 -N 关闭
tiup cluster stop <cluster-name> -N 172.16.201.18:20160 -y
-N 接需要关闭的节点的 ID,ID 可以使用 display 发现
关闭节点后,手动登录数据库会发现无法登录
进入集群元数据存储目录,tidb-wj 改为集群名
cd ~/.tiup/storage/cluster/clusters/tidb-wj/
备份 meta 文件
cp meta.yaml meta.yaml.bak
手动删除机房 1 的相关节点信息
vi meta.yaml.bak
这个步骤可以使用脚本
#!/bin/bashfunction parse_args() {
local tiup_base_dir=""
local cluster_name=""
local del_node_ip_list=""
# 解析参数
for arg in "$@"
do
case $arg in
tiup_base_dir=*)
tiup_base_dir="${arg#*=}"
shift
;;
cluster_name=*)
cluster_name="${arg#*=}"
shift
;;
del_node_ip_list=*)
del_node_ip_list="${arg#*=}"
;;
*)
echo "Unknown argument: $arg"
exit 1
;;
esac
done
# 检查必要参数是否存在
if [ -z "$tiup_base_dir" ]; then
echo "Missing required argument: tiup_base_dir"
fi
if [ -z "$cluster_name" ]; then
echo "Missing required argument: cluster_name"
fi
if [ -z "$del_node_ip_list" ]; then
echo "Missing required argument: del_node_ip_list"
fi
# 返回参数
echo "$tiup_base_dir" "$cluster_name" "$del_node_ip_list"}function createnewmatefile() {
local tiup_base_dir="$1"
local cluster_name="$2"
local del_node_ip_list="$3"
rm -f /tmp/DR-Auto-Sync_Failover-tmp1.log rm -f /tmp/DR-Auto-Sync_Failover-tmp2.log if [ $context_status -eq "0" ];then
echo "上下文状态异常!"
exit 1
fi
echo " 创建集群新的mate文件"
cd $tiup_base_dir/storage/cluster/clusters/$cluster_name/
cp meta.yaml meta.yaml.bak_`date +%Y%m%d%H%M%S`
if [ "$?" -eq "0" ];then
echo -e "mate.yaml 备份成功!"
else
echo -e "mate。yaml 备份失败!"
context_status=0
exit 1
fi
cp meta.yaml meta_tmp.yaml sed -i '/^ \{2\}[a-z-].*$/icutline' meta_tmp.yaml if [ "$?" -eq "0" ];then
echo -e "mate.yaml标记成功!"
else
echo -e "mate.yaml标记失败!"
context_status=0
exit 1
fi
echo $del_node_ip_list > /tmp/del_node_list.txt sed -i 's/,/ /g' /tmp/del_node_list.txt del_node_ip_list=`cat /tmp/del_node_list.txt`
for i in $del_node_ip_list
do
echo $i
sed -n "/ - host: ${i}/,/cutline/=" meta_tmp.yaml >> /tmp/DR-Auto-Sync_Failover-tmp1.log done
echo -n "sed -i " >> /tmp/DR-Auto-Sync_Failover-tmp2.log
for j in `cat /tmp/DR-Auto-Sync_Failover-tmp1.log`
do
echo -n "-e \"${j}d\" " >> /tmp/DR-Auto-Sync_Failover-tmp2.log done
echo -n "meta_tmp.yaml" >> /tmp/DR-Auto-Sync_Failover-tmp2.log
sh /tmp/DR-Auto-Sync_Failover-tmp2.log
grep -v cutline meta_tmp.yaml > meta.yaml
}context_status=1# 解析参数args=$(parse_args "$@")# 调用元数据备份函数createnewmatefile $args调用脚本需要传入:
tiup_base_dir : tiup 基础目录(~/.tiup)
cluster_name : 集群名
del_node_ip_list : 需要删除的节点信息。
这个脚本会匹配 nod ip list,将需要删除的行记录,然后进行过滤写入 meta.yaml 文件中。
这步之后,在机房 2 查看集群信息,就只会查看到机房 2 的节点信息了。
使用命令:
sh test.sh tiup_base_dir=~/.tiup cluster_name=tidb-wj del_node_ip_list=172.16.201.18
可以查看 meta.yaml 文件中相关 IP 新全部被删除成功
tiup cluster stop <cluster-name> -y tiup cluster reload <cluster-name> --skip-restart --force -y
sed -i '/pd-server/ s#pd-server#pd-server --force-new-cluster#' run_pd.sh# 启动 pd 组件tiup cluster start <cluster-name> -R pd -y
./bin/pd-recover --from-old-member --endpoints=http://127.0.0.1:2379 # 指定对应的 PD 地址
出现 recovery is successful 的提示信息即可。
10s 无特殊意义,只是最好等一会操作
tiup cluster reload <cluster-name> -N ip:2379 -y
中控机操作即可,这里规则可以按照实际需要进行调整
cat > /tmp/dr-auto-sync_rules_dr.json <<EOF
[
{
"group_id": "pd",
"group_index": 0,
"group_override": false,
"rules": [
{
"group_id": "pd",
"id": "voters",
"start_key": "",
"end_key": "",
"role": "voter",
"count": 3,
"location_labels": ["dc","logic","rack", "host"]
}
]
}
]
EOFtiup ctl:${cluster_version} pd -u http://${pd_conn} config placement-rules rule-bundle save --in="/tmp/dr-auto-sync_rules_dr.json"tiup ctl:${cluster_version} pd -u http://${pd_conn} config set replication-mode majority以上成功后,PD 基本就 OK 了
tiup cluster start <cluster-name> -R tikv
tiup ctl:${cluster_version} pd -u http://${pd_conn} storetiup ctl:${cluster_version} pd -u http://${pd_conn} unsafe remove-failed-stores <store_id1,store_id2,...># 如果 store id 找不到,可以使用 auto detecttiup ctl:${cluster_version} pd -u http://${pd_conn} unsafe remove-failed-stores --auto-detecttiup ctl:${cluster_version} pd -u http://${pd_conn} unsafe remove-failed-stores show当 remove 完成后
tiup cluster start <cluster-name> -y
tiup cluster prune <cluster-name>
以上操作完成后,集群可以正常登录使用。
如果需要做高可用扩容等,按需操作即可。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系小编 edito_r@163.com 处理,核实后本网站将在24小时内删除侵权内容。