更换txsql存储目录

4 篇文章 0 订阅
2 篇文章 0 订阅

TxSQL部署于cpbd-ustr-core-nn01-200、cpbd-ustr-core-nn01-201、cpbd-ustr-core-nn01-202三台机器上且IP地址分别为 192.170.26.200, 192.170.26.201, 192.170.26.202。出现故障的节点为cpbd-ustr-core-nn01-200,我们要修复这个节点。以下描述中,我们同时用机器名来命名对应的机器上TxSQL pod的名称。

1、操作前检查cpbd-ustr-core-nn01-201、cpbd-ustr-core-nn01-202上的TxSQL处于启动状态且健康(多数派存活)。若未启动,请启动它们。若无法正常提供服务(manager界面显示它们不健康),则停止操作。

2、检查master信息和成员信息。进入TxSQL pod cpbd-ustr-core-nn01-201(或者cpbd-ustr-core-nn01-202)。cd /usr/bin/txsql/tools ,执行 ./txsql.sh list,你应该看到类似于以下的输出

[root@cpbd-ustr-core-nn01-201 ~]# cd /usr/bin/txsql/tools/

[root@cpbd-ustr-core-nn01-201 tools]# ./txsql.sh list

get master 192.170.26.202 expire time 1664173648 Mon Sep 26 14:27:28 2022

ip 192.170.26.201 port 17000

ip 192.170.26.202 port 17000

ip 192.170.26.200 port 17000

3、移除故障节点。执行 ./txsql.sh rm 192.170.26.200 从集群中移除 cpbd-ustr-core-nn01-200。这一步无论cpbd-ustr-core-nn01-200是否启动都可以执行。删除成功后请 list (第2步)加以确认。

[root@cpbd-ustr-core-nn01-201 tools] ./txsql.sh rm 192.170.26.200

get master 192.170.26.202 expire time XXXXXXXXXXXXX

Remove Member 192.170.26.200 done

[root@cpbd-ustr-core-nn01-201 tools] ./txsql.sh list

get master 192.170.26.202 expire time XXXXXXXXXXXXX

ip 192.170.26.201 port 17000

ip 192.170.26.202 port 17000

4、强制故障节点重新初始化

进入故障节点cpbd-ustr-core-nn01-200的pod,cd /usr/bin/txsql/etc/,编辑 install_conf.sh,确保cpbd-ustr-core-nn01-200的IP(即192.170.26.200)在 TxSQLNodes数组中不是第一个 (非常重要!)。如果是,可以把它与第二个交换位置。

TDH环境修改方式:

直接进故障节点的pod修改顺序

TDC环境修改方式:

kubectl -n ${namspace} get cm | grep  txsql-confd-cnf 得到cmA

kubectl -n ${namspace} edit cm ${cmA},修改变量

install_conf.sh 的DATA_DIR变量记录了TxSQL数据目录的路径,需要手动删除该目录下的全部内容(但要保留这个目录),之后使用manager重新启动该pod,这会强制这个pod重新初始化。

5、备份数据。

进入192.170.26.200新启动的pod(!注意,必须在pod内部操作,以保证dump数据的兼容性,否则后期数据很可能无法导入),等待数据目录下(5.2.2之前的版本默认为 /vdir/hadoop/txsql/)出现 init_done.flag 文件(该文件的出现标志着初始化完成)。

使用下面的命令从一个健康的节点(比如192.170.26.202)备份数据。端口(-P13306)和密码(-p"123456")请根据具体情况修改,root密码存储在 /usr/bin/txsql/etc/db.properties中(5.6.47版本密码隐藏,命令行执行echo $TXSQL_DB_PASSWORD ,即可获得密码)

[root@cpbd-ustr-core-nn01-202 ~] cd /usr/bin/txsql/tools

[root@cpbd-ustr-core-nn01-202 tools] /usr/bin/txsql/percona.src/bin/mysqldump -h192.170.26.202 -P13306 -uroot -p"123456" --single-transaction --all-databases --triggers --routines --events >mydata.sql

5.1、待192.170.26.200的数据目录下出现init_done.flag后,编辑文件 /usr/bin/txsql/tools/txsql.sh,在函数restart_role的第一行添加 return 0,目的是禁止新pod自动重启服务。

以下是用vim编辑后的结果(行号可能与此不同)。

vim /usr/bin/txsql/tools/txsql.sh

# Helper for act_start

restart_role()

{

         # 必须在本函数的一开始增加如下一行,其他的代码可能与此示例有差异,不用管

 return 0

        if [ $# -ne 1 ]; then

                return 1

        fi

        if [ $OPT_FORCE = "N" ]; then

                phx_is_role_running_by_name "$1"

                [ $? -eq 0 ] && return 0

        fi

        # zqdai: change directory to tools to ensure the python scripts work as expected

        local lPwd=$(pwd)

        if [ -x "$PHX_HOME/tools" ]; then

                cd "$PHX_HOME/tools"

                python restart.py -p "$1"

                cd "$lPwd"

        else

                return 1

        fi

        return 0

}

6、kill 192.170.26.200 pod上的phxbinlogsvr进程

在192.170.26.200 pod的目录 /usr/bin/txsql/tools 下执行 ./txsql.sh kill phxbinlogsvr 。请用 ps -ef 验证改进程已经被杀死。

[root@cpbd-ustr-core-nn01-200 /usr/bin/txsql/tools] ./txsql.sh kill phxbinlogsvr

7、把192.170.26.200添加回TxSQL的Paxos Group中。

回到192.170.26.202的pod,在 /usr/bin/txsql/tools 下执行 ./txsql.sh add 192.170.26.200把192.170.26.200添加到txsql的paxos group中。请务必./txsql.sh list确认该操作已经成功完成。要等待20秒验证,确认它没有自动重启。

[root@cpbd-ustr-core-nn01-202 /usr/bin/txsql/tools] ./txsql.sh add 192.170.26.200

get master 192.170.26.202 expire time XXXXXXXXXXXXX

Add Member 192.170.26.200 done

[root@cpbd-ustr-core-nn01-202 /usr/bin/txsql/tools] ./txsql.sh list

get master 192.170.26.202 expire time XXXXXXXXXXXXX

ip192.170.26.201 port 17000

ip 192.170.26.202 port 17000

ip 192.170.26.200 port 17000

8、向192.170.26.200中导入数据。

确认phxbinlogsvr已经自杀。

[root@cpbd-ustr-core-nn01-200 /usr/bin/txsql/tools] ps -ef | grep phxbinlogsvr

<不应该看到phxbinlogsvr进程>

导入数据,命令如下。注意mydata.sql是第5步dump出来的文件,该文件应放置在你执行"mysql -S XXXX"命令的当前目录下,示例中是在/usr/bin/txsql/tools下。

注意以下命令会导入数据两次,这是有必要的。实际上,第一次导入很可能会因为缺少用户而导致一些问题,因此需要导入两次。flush privileges 必须要先set sql_log_bin=0,否则会引起严重的错误。

[root@cpbd-ustr-core-nn01-200 /usr/bin/txsql/tools]

ps -ef|grep mysqld,根据进程信息找到--socket=xxxx/percona.sock

mysql -S xxxx/percona.sock

mysql> set global super_read_only=off;

mysql> set global read_only=off;

mysql> source mydata.sql;

mysql> set sql_log_bin=0;

mysql> flush privileges;

mysql> source mydata.sql;

mysql> reset slave;

如果操作出现任何问题或者错误,则必须到192.170.26.202的pod里上,从第3步重新开始整个修复过程。

9、重启phxbinlogsvr

恢复192.170.26.200上文件 /usr/bin/txsql/tools/txsql.sh的原有内容。即删除restart_role函数里新添加的第一行 return 0 语句即可。最多等待20s中后,phxbinlogsvr进程自动重启(一般会重启两次)。请用 ps -ef 验证。

特殊注意事项:在6.0之前的版本,phxbinlogsvr在负载较低的集群中此时可能会出现反复重启的情况,tools目录下每隔20s会产生一个core文件。这种情况下,需要到一个健康的pod上,向txsql中插入超过10MB的数据来解决。例如在本例中,可以在192.170.26.202上编写如下脚本:

load.sh

#!/bin/bash

# 这个脚本会插入10MB的数据,每次插入256字节,连续插入4w次,插入后删除。这是为了解决6.0之前一个bug导致phxbinlogsvr在低负载情况下反复重启的问题

#注意修改以下变量为与现场情况相符的值

master_ip='192.170.26.202 '

master_port='3316'

password='123456'

mysql  -h$master_ip -P$master_port -uroot -p"$password" -e "create database if not exists d1"

mysql  -h$master_ip -P$master_port -uroot -p"$password"  -D d1 -e "create table if not exists t1(c1 text)"

i=0

while [ $i -lt 2 ]

do

        mysql  -h$master_ip -P$master_port -uroot -p"$password"  -D d1 -e "insert into t1 values('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')"

        i=$((i+1))

done

mysql  -h$master_ip -P$master_port -uroot -p"$password"  -D d1 -e "drop database d1"

执行这个脚本(bash load.sh),插入足够数据后,新的phxbinlogsvr会停止自动重启。

10、检查mysql的流水是否正常

在192.170.26.200 pod的目录 /usr/bin/txsql/tools 下执行 ./txsql.sh localshell ,然后执行 show slave status\G,检查流水状态是否正常(流水监控的方法),特别是Slave_IO_Running、Slave_SQL_Running必须处于Yes状态。

11、操作完成。检查新节点状态。manager中此时应显示3个节点均为健康状态。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值