TiDB升级与案例分享 从 TiDB v4.0.1 升级到 v5.4.1 的经验

网友投稿 269 2024-03-26



ΪʲôҪ������

�Ͱ汾 TiDB �ܱ����֧�ֲ����ƣ���Ͱ汾�� cdc ��֧�ֲ������ƣ����ڴ�й¶����ȣ�

TiDB升级与案例分享 从 TiDB v4.0.1 升级到 v5.4.1 的经验

ʵ�ʹ����д����� TiDB �� panic bug��

�ڽ�����Ч�Ĵ󱳾��£����� TiDB �����ܻ���������

Ϊ��������ʵ��ҵ�񳡾���

���������

TiDB ��������Ϊͣ����������ͣ����������ͣ����������ƽ��������ǿ������(�Cforce)�������˵���¹��̣�����ϸ�ڹ���չ����ֻ���ܺ��ģ�

ǿ��������

���ض�Ӧ�汾������Ŀ��������

Upgrading component pd

Upgrading component tikv

�滻����������leaderѡ�٣�ֱ������tikv server

Upgrading component tidb

������tidb�ڵ�ʱ���ڸ�tidb�ϵ����лỰ����Ͽ�

Upgrading component prometheus��grafana��alertmanager

�ŵ㣺

ʱ��̣������������ԣ�����һ��200G���ҵ�tikv�ڵ��ʱ1�������ң�

��������ɿ�

���գ�

��������ʽǿ�����������������У����ǰ��Ӧ�������leader��������������ж�дʧ�ܵ��������

��4��ʧ��ʱ��������Ҫ����������

ƽ��������

���ض�Ӧ�汾������Ŀ��������

Upgrading component pd

Upgrading component tikv

������tikvʱ���������leader(��ʱĬ��10���ӣ��ɵ�)���������ýڵ�

Upgrading component tidb

������tidb�ڵ�ʱ���ڸ�tidb�ϵ����лỰ����Ͽ�

Upgrading component prometheus��grafana��alertmanager

�ŵ㣺

��������ʽΪƽ��������ǰ���Ǹýڵ��ϵ�leader�����ڹ涨ʱ����������ϣ��������ж�дʧ�ܵ����������tidb�������ʱ���⣩

���գ�

����ʱ��ϳ����ٸ����������3pd��3tidb��100tikv����ô����������ʱ������Ϊ 100(�ڵ�����) * 10m(Ĭ�ϳ�ʱʱ��) + pd + tidb + ��أ����Ǽ���  pd + tidb + ��ص�����ʱ��Ϊ 10m����ô��������ʱ��Ϊ 16h

�����3.1��ʧ��ʱ��Ⱥ���İ汾״̬�п����� һ�����°汾��һ���־ɰ汾������������������pd�ڵ�Ϊv540 tikv �ڵ�Ϊ v409������û��ʲô���⣩

�� 4 ��ʧ��ʱ��������Ҫ���������ƣ�ͬ�ϣ�

ͣ��������

�ر� TiDB ����ʵ�� (�������)

�������ؼ��滻

���� TiDB ʵ��

���գ��򵥵�˵����ͣ��ά��

Ҫ֪ͨǰ��ҵ�����ýӿڻ�������쳣���񣬲�Ҫ��error��־���������µ�ǰ��Ӧ�ñ���

��ͣ��ά��ʱһ��Ҫ��������Ӳ����飬��Ҫ��Ӳ�̣��ڴ棬���壬��Դ�ȣ�����ܹز��ܿ��Ǿ������ˣ����������¼�

���Ǵ����ܽ���ÿ��������ʽ����ȱ�����£�

�ŵ�

����

ƽ�������󲿷�ҵ���д����ʧ��

����ʱ�䳤

����������ɿ�

ǿ������

����ʱ���

��������ɿ�

����ҵ���дʧ��

ͣ������

����ʱ���

��������ɿ�

ҵ��������ʱ������

����ɲμ��ٷ��ĵ�������д�ĺ�������������£�

https://docs.pingcap.com/zh/tidb/v5.4/upgrade-tidb-using-tiup

����ǰ���ע�ĺ�������

Ѱ���ʺϵĻ��˷���

SQL��������

���ܻ�������

Ѱ���ʺϵĻ��˷���

ԭ���� TiDB ����û�л��˷����������Ҫ���˷��������������·����ο���

����ʵ��

�ŵ�

ȱ��

��ע

����һ���� / �ָ�

���ݿɷ���ʹ��

��ά�ɱ���

�ָ�ʱ�䳤

�޷����ٻ��ˣ���Ҫҵ����

�����ڶ�cdc���ܲ����Ƶ�ҵ��������TiDB �ӿ�����׼ʵʱͬ��

��ά��etl���ߵijɱ�

����pump��ticdc�ȹ���������ҵ��˫д

����׼ʵʱͬ��

dba��ά�ɱ���

�����ƻ�����ԭ�����������޻��˷���---

����һ������/�ָ�

�÷���ʹ�õ���TiDB �� br ���ݹ��ߣ��ѱ��ݺ�Ľ�����ݵ����ػ�s3�洢�У�ʹ���Զ������߽��лָ����������ǰ��Ⱥ����ticdc֧�ֵIJ����ƣ���ô�Ͱ汾�� TiDB ����ʹ�ø÷���������������ԣ�ȫ������ �� �������� �� �����ָ� �� �����ָ���

PS�����ַ�ʽ�Ƚϸ��ʺ���������ij���

��������TiDB�ӿ�

�÷����Ƚ��Ƽ����ʺ�ticdc֧�ֱȽ����Ƶĸ߰汾tidb��������Ҫע����ͬ��������tso���ƽ��Ƿ��������л�ʱ��ҵ������һ��һ���л����ҵ�񣬰��� ֻ�� �� ���� �� д ҵ����Ǩ�ƣ�������Ǩ�ƵĹ����п��԰����������������

��������ҵ��˫д

ҵ��˫д�����л�����ҵ�������������ݵ�д�롣�÷���dba�Ͳ��ù�������ˣ���ȫ��ҵ���Լ����ƣ�������Ҫ���������ԭ���ԣ���A��Ⱥд�ɹ���B��Ⱥдʧ�ܣ���ôӦ��ҵ����ж����񵽵��Ƿ�ɹ���

�����ģ��޻��˷���

�����ָ�ʱ��ɽ��ܣ���ô���˷����ǿ���ȡ��ģ���ƻ��˷����ijɱ��ϸߣ������ɱ���Ҫ�ǻ���ʵ���������ɱ���ʱ��ɱ�����֤���˷����Ŀ��������ȶ��ԣ����Լ���˾ҵ�񷽵���϶ȵ�������أ�����ľ��dzɱ�������Ե�ȡ�ᡣ

������Ϊ��С�汾����ʱ���˷������Ժ��� ��540 ���� 541 ��Ϊ�Ķ����ֻ࣬��bug fix������汾����ȷʵ�б�Ҫ�����ˣ���Ϊ���ɿ����ؽ϶ࡣ

PS����5�汾��tidb�汾�ķ�������Ϊ a.b.c ��a�����ܹ�������b�����¹��ܵļ��룬c����ע��bug�޸����� ���ܹ�.�¹���.��bug����������

SQL��������

һ����߳��õ���������������������������߰汾���SQL���������⣬�Ҹ��������С����師����

����һ��mysql-replay ���߻ط�

mysql-replay �ǹٷ��ṩ��һ�� SQL �طŵĹ��ߣ��ù��߻�� tidb �ڵ����������� tcpdump ����ץ������Ȼ���ù��� mysql-replay ���߽��лطţ��ҿ����� asktug ���ڸù��ߵĽ��ܱȽ��٣������ҿ���д��������ߵ�ʹ�÷�������dba��Ҫ�۲��ڻطŵ�Ŀ�꼯Ⱥ���Ƿ��д�����־�����б����������Ƿ����Ŀ�꼯Ⱥ���ʺϴ�����Ų���������⣬�����ڻطŵĹ����й۲�Ŀ�꼯Ⱥ�� Grafana ��� Overview �� TiDB �� Failed Query OPM ���� tidb ���Ƿ��б����������������� 1062 ������ͻ������������Ժ��ԣ���

mysql-replay����git��https://github.com/innerr/workload-sim.tidb.ticat.git

���������Ķ� TiDB changelog

�Ķ�ÿ���汾�� changelog���Ķ�ʱ�и����ɣ�����ֻ��Ҫ��ע�������������ݼ��ɣ������Ը���  �� tidb ��bug�޸� �� tidb 

��������ҵ�����

����������Ļ����Դ�һ���°汾��tidb����ҵ��һ����֤�Ƿ��в����������������Ȼ�����Ҫ����ҵ�񷽵�������Դ��

���ܻ�������

����������һ�����ʻ��������ܻ������⣬���������Ե���ҵ����DBA����SQL�����ˣ�SQL ����� TiDB ��Ҫô���ڹ���Ҫô���ڴ�����ѡ�������������˼·���������������������ɹ�ܴ󲿷����⣺

����һ���ֶ��ռ�ͳ����Ϣ

������֮ǰ����Ҫ�����еı����н����ȼ�飬�Խ����Ƚϵ͵ı��ֶ��ռ�ͳ����Ϣ���û��ڴ��۵�����ѡ���׼ȷ��ͬʱҲ�������ܼ�С�����

��������ִ�мƻ��ذ�

�����Ѿ��󶨵�ִ�мƻ�����Ϊ�������Ĺ����з��� 4 �� 5 �汾�� mysql.bind_info �б��ṹ�IJ���(����source ��ͬʱ������ default_db �ֶ�Ϊ��)�����ȵķ����������°󶨣���ʱ��ˢ�¸ñ���

PS��5�汾��һ�����Զ�����ִ�мƻ��Ĺ��ܣ���ϵͳ�Զ����񲢰����һ��ִ�мƻ�Ȼ��洢��ϵͳ���У����������Ҫ�����Լ���ҵ�񳡾������Ƿ�򿪣�

���� Check Point

ǰ��׼��

Check Point˵����������TiDB�����ʱѡ��������ʽ���в��ԣ�ͣ����ǿ�ƣ�ƽ�������л��˷����������ϣ�Ѱ���ʺϵĻ��˷�����֤���˷���������ҵ�������֤���˷����Ŀ������������״̬����ǰ�޸����cpu���ڴ棬���壬���̵Ľ���״̬SQL�����Լ���������ϣ�SQL�������� mysql-replay���ߡ��Ķ� TiDB changelog��ҵ�������ֹ���ܻ����������ϣ����ܻ������� �ֶ��ռ�ͳ����Ϣ��ִ�мƻ�����tiup ��������tiup ���߱������������°汾�����Ǽ�Ⱥ��ԭ������ʦǰ�ڹ�ͨ��������ǰ��ԭ������ʦ��ͨ�����ƻ���ҵ�񷽹�ͨ����������֪�����Σ����в���������������ε��ˣ���ʱ�����������������������Ǻ���ҵ���߼�Ⱥ��Ϊ��Ҫ�������۾���

ʵʩ����

Check Point˵���ռ���Ⱥ��ָ��Ϊ�Ա�����ǰ���ز��죬ʹ�� clinic ���� tiup diag collect --from ��2022-07-13 00:00:00�� --to "2022-07-14 00:00:00" --include system,config,monitorȷ�ϻ��˷����������DBAȷ�ϼ�Ⱥ��������ָ�ʱ��� ҵ��ȷ��ҵ�����ݿ�����֪ҵ��ͣ DDL�����ڼ䲻Ҫ�Ա��ṹ���б��������ҵ��ȷ��ȷ��������ҵ��������ǰ�Ƿ�������л���ֹͣͣ�Զ��ռ�ͳ����ϢMySQL client�� set global tidb_auto_analyze_start_time = 23:57 +0800; set global tidb_auto_analyze_end_time = 23:58 +0800;����ִ�мƻ���д�ű������������sqlbind.sqlԤ��� region ����pd-ctl: region --jq=".regions[] | {id: .id, peer_stores: [.peers[].store_id] | select(length != 3)}" PS������и�����ʧ���⣨��leader������ֹͣ�������Ƚ������������ͣ region ��������pd-ctl: config set region-schedule-limit 0; config set merge-schedule-limit 0; config set replica-schedule-limit 0;Ԥ��� ssh ��ͨ��tiup cluster exec xxx --command id���� TiDBtiup cluster upgrade xxx v5.x.x or tiup cluster upgrade xxx v5.x.x --force����ִ�мƻ����벢���ִ�мƻ��Ƿ���Ч source sqlbind.sql show global bindings;���Զ��ռ�ͳ����Ϣ�����Լ�ҵ�񳡾��趨ʱ�� MySQL client�� set global tidb_auto_analyze_start_time = 23:57 +0800; set global tidb_auto_analyze_end_time = 23:58 +0800;�ֶ����ò������������������set global tidb_enable_async_commit = ON; set global tidb_enable_1pc = ON; set global tidb_multi_statement_mode = ON; set global tidb_enable_noop_functions = 1; set config tikvgc.enable-compaction-filter = true;ҵ����֤��д��Ҫҵ������һ�·���Ӧ�������ã���֤�Ƿ���SQL���������� ���յ㣺���ܻ����û��˷�����֤�����Ƿ����Ԥ����ҵ��һ���ж��Ƿ������ܻ������� ���յ㣺���ܻ����û��˷��������°汾���ݿ�������� br ���ݽ����ڴ�汾���������°汾�� br ȫ������һ�����ݿ⣬ ���ֹ��ߺ�db�İ汾ͳһ�ռ���Ⱥ��Ϣ�ٷ��ṩ���� clinic �Թ�����ǰ��Ա�

���ڸ���

Check Point˵�����±��ݽű��°汾 TiDB br���ݸ�����������־�ռ��ű��汾 4 ��汾 5 ������־��Щ�����죬�����logstash �ռ��Ļ���Ҫ�޸�һ������ƥ��

��������

����һ��4PD �ڵ㵼�µ�����ʧ��

����������

�ڳ�����󣬶�ij��Ⱥ�����������������Ϊ����һ��ƽ�����µIJ������������������ pd �ڵ�ʱ��ʱ�������˳������������� TiDB duration 쭸ߣ�

�����Ų飺

������ʷԭ�򱾼�Ⱥ��4��pd�����Ǹ�pd���������pd_A��leader����pd_B��pd_C��pd_D

1. Ҫ���� pd_A ����Ҫ�� transfer pd leader������ pd_A ��ʼ���� ["invalid timestamp"] ���Լ���ʼѭ����������û��ͶƱ��ȥѡ���ˣ�

2. pd_B �ǹ�Ͷ��������׼����λ���Լ�����ȷ���ܲ��ܵǻ����Լ�Ҳ��ʼ���� ["redirect but server is not leader"]

3. pd_C��pd_D ��ѡ pd_B �� leader

��ô�������ˣ�����4 pd �ﵽ������ͬ����ô���𰸱�Ȼ��û�У�������������һ���ڵ�ûͶ����Ʊ��ֻ�а���ͬ�⣬���Ե���leader�޷���ѡ�ɹ�����������ʧ�ܣ�

���������

��4pd�������ݺ��ٴ������������ɹ�

����������ȺA�����������

����������

���ǰ� TiDB �������������� OLTP��ҵ�񣬶���Ⱥ A ���ڱȽϺ��ĵ�Ⱥ����SLA�ϸߣ��ճ�ƽ��QPS 5w+��TPS 2w+�������ӽ����ڣ� HAҪ��֤ 99.99%����Ҫ�̶ȿ����֪��

������ԭ���� TiDB �汾�ȽϾ� ���������������� cdc ����֧�ֲ����ƣ��������ǶԻ������ֺͶ��������ɴ���Ҫ�Ե�ǰ�Ͱ汾 TiDB �����������Ա���չ���������ε�֧�ֹ�����

���ٵ���ս��

��Ⱥ��ģ�󣺹�ģ��ָ���������棬һ��TB����Ĵ洢�������ڵ����϶� TiDB 20+��TiKV 40+ 

ά�����ڶ̣�A��Ⱥ����н� TP ��ҵ�������� AP ��ҵ���ҵ�������������ʱҵ��Ҫ��db����ͣ��

���˷�������ѣ�����ѡ��Ļ��˷����DZ��ݻָ������ݽ�����ȶ�����������ϸ˵���������ҵ�һ�λָ�����86��Сʱ��

��ȺA�漰�������ν϶࣬��Ҫ���SQL���������⣺����ǣ�������е�ҵ����

���ܻ��ˣ�δ����ʱ��ȷ���Ƿ��������ܻ�������

�ƶ�����������

������ʽ��ԭ������ʦ�˽⵽���ǵ�ҵ�񳡾����Ƽ�ʹ��ǿ�������ķ�������Ϊ��ʵ����SLA�ϸߣ������������ɿ��Ҵ���ʱ���ڱ���������������Բ�ȡ�˶̡�ƽ�����ǿ��������ʽ�����ַ�ʽ�ı׶����������Ĺ����У�ҵ�������ڶ�дij�� regionʱ TiKV�ڵ���� unreachable�Ĵ�������ͼ��

����ʱ�䣺����������ҵ�񷽻�������ǰȫ����ȡdb�е���Ҫҵ����Ϣ��ҵ����������ݶ��׷�����ͬʱ����ҹ������ҵ����ѭ Ǩ��/�л�/�ƺ�/���� ��ԭ�����������ţ�����������ʱ��д�߷����������ѹ�����ų������

���˷�����أ�

���ݣ�����ʹ�� br ���ݵ��Խ� S3 �洢�С�br �� S3 �Ľ�����Ϊ�����׶Σ� һ���ȱ�������region�洢�� s3�������������� store �� S3 �е� sst �ļ����� checksum������� checksum �׶��� IO �����糬ʱ������br����ͻᱨʧ�ܡ����� S3 ����ռʽ�ģ��������⻧ʹ��ʱ��������������⡣���չٷ����������� minio ������� S3 �������ݿ�ı�����ָ���һ��ԭ��Ĭ�ϵIJ���s3����minio������ minio ����������˵�Ƕ����ķ���û����Դǿռȫ��������ȫ�����ݵ��ȶ��ԡ�

PS��������� br ���ݵ��Խ� S3 ʧ��ʱ��������Ҫ���һ�� TiDB ��״̬�����������ô������� s3 ���ȶ���ɵģ����ܽ�ı����������£�

ERROR 1: [error="msg:"Io(Os { code: 2, kind: NotFound, message: \"No such file or directory\" })" : [BR:KV:ErrKVUnknown]unknown tikv error"] ERROR 2: [error="msg:"Io(Os { code: 5, kind: Other, message: \"Input/output error\" })" : [BR:KV:ErrKVUnknown]unknown tikv error"] ERROR 3: [error="msg:"Io(Os { code: 11, kind: WouldBlock, message: \"Resource temporarily unavailable\" })" "] ERROR 4: [error="rpc error: code = Unknown desc = Io(Os { code: 107, kind: NotConnected, message: "Transport endpoint is not connected" })"] ERROR 5: [error="NoCredentialProviders: no valid providers in chain. Deprecated.\n\tFor verbose messaging see aws.Config.CredentialsChainVerboseErrors"] ERROR 6: [error="msg:"Io(Custom { kind: Other, error: \"failed to put object Error during dispatch: connection error: Connection reset by peer (os error 104)\" })" "] ERROR 7: [error="error happen in store xxx at xxx:xxx: Io(Custom { kind: Other, error: "failed to put object rusoto error Request ID: None Body: \nERROR 1: InvalidPartOne or more of the specified parts could not be found. The part may not have been uploaded, or the specified entity tag may not match the parts entity tag.....

�ָ������ν��лָ�ʱ���ع���Ⱥ���Dz����� 16 �� kv �ڵ㣬�ָ�ʱ������ 86 ��Сʱ������Ȼ�Dz��ܽ��ܵġ�������ѯ��ԭ������ʦ���������� TiKV ���������������dz���ͬ�������Ⱥ��TiKV�����٣�����������Ⱥ��TiKV �����ࣩ����ͬ��������������Ⱥ���������ָ̻�ʱ����Ҫ��ô����������ͬ������TiKV�ڵ��������˹��ࡢ���������൱��Ⱥ���ָ�Ч����ߡ����գ����ָ�ʱ�� 10TB+���� 4h50m��ƽ���ָ�ʱ��Ϊ7Сʱ���ҡ�

PS��v4.0.1 �� br ���ݹ��߱� v4.0.16 ��Ҫ 40% ���ң��Ҹо������� v4.0.16��У�鲿�����˸���Ĺ�����v4.0.1 �� br �ָ���  v4.0.16  �����߼�Ҳ��һ���������Ƕ� ������ ddl ���ܣ�v4.0.1 �ܳɹ� v4.0.16 ���� [error="[ddl:-1]json: cannot unmarshal array into Go value of type string"]

SQL�����ԣ�ʹ�������ἰ��������������������׸��

���ܻ������⣺ʹ�������ἰ��������������������׸��

PS�����ʹ�������������������������ܻ������⣬���Գ����ƶ�ҵ���޸������ύ��ʽ�����ֹ۸�Ϊ����

begin pessimistic; xxx�� commit��

�������̣�

����������棺

������������ĸ����ǣ�5�汾��4�汾���ȶ���������ȥ���ⶶ����������������

Query summary ����ͬʱ�� TiDB �ڲ��Զ�ִ�е� SQL ��� 999 ��λ ��֮ǰ��4s �ȶ���125ms���������� 97% ������������ܶ�������

CPU���������������Raft Store CPU�������ڱ�����ֵ��������

д������������ ��� v4.0.1 TiKV �� gRPC ģ��������Ż����Ż��� Raft ��־�����ٶȣ������� Commit Log Duration �� Store Duration��

Avg Duration

v4.0.1(��s)

v5.4.1(��s)

Append Log Duration45197Commit Log Duration839522Apply Log Duration150129

ҵ�񷽷�����

����һ�� 5�汾�����������棬���ǴӶ�д�����������

д���첽�ύ���� (Async Commit) �� 1pc �ύ���첽������Ҫ������ǽ��������ύ���ӳ٣�1pc�ύָ����ֻ�漰һ�� Region ������������������ύ�ӳٲ��������£�

����Ĭ�Ͽ��� Coprocessor cache ���� ���Ͷ�ȡ���ݵ���ʱ��

�������ܶ��������� GC in Compaction filter ���ܣ�����������������compation Ϊsst��ͬʱ��GC�����ٵ�����GC worker��GCʱ�Ķ�MVCC�汾ʱ��ѹ����

����

�������ݿ��Ƿdz����ĵ���Ŀ����Ϊ��������״̬�IJ����� DBA ���Ե����������ж��Ƿ�����������������Ҫ��ҵ��������ϡ�����DBA��˵ tiup cluster upgrade һ�����������ȥ�ˣ�����������ҵ���Ƿ��Ͽ������������������Ҫ˼���ĵط���ͬʱ������ǰ�á���顢���ˡ���ͨ����һ��Ҫ����λ���������������¼�����һ�仰����Ҫ��������Ŀ���ڱ�����

���ʮ�ָ�лԭ������ʦ�յ��Ͷ�õ����л����Ϊ�����ĿЭ������Դ�������ƻ�����ˣ���ԭ����רҵָ������󽵵��������ķ��գ�ͬʱ�����˼�Ⱥ�����ijɹ��ʣ��������Ч���õ��˹�� TiDB ʹ�÷����ձ��Ͽɡ�

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:TiDB事务心跳超时机制测试探究
下一篇:TiDB双中心架构监控高可用方案实施
相关文章