Quel a été le résultat de la migration de ClickHouse sans autorisation vers ClickHouse avec autorisation


Commençons par un petit historique. Dans notre entreprise, un projet est en cours de maintenance, qui Ă©tait jusqu'Ă  rĂ©cemment en phase de test / dĂ©veloppement. À cette Ă©poque, il utilisait ClickHouse avec 3 fragments, 2 rĂ©pliques chacun. Étant donnĂ© que l'infrastructure de ce projet Ă©tait testĂ©e et ne nĂ©cessitait aucune autorisation supplĂ©mentaire (ClickHouse Ă©tait dans un segment fermĂ©), personne n'a posĂ© cette question.


Au fil du temps, le projet a grandi, ClickHouse est devenu une base de production et nous avons migré les données de l'ancienne infrastructure vers la nouvelle avec 1 fragment, 3 répliques sur 3 serveurs différents (ClickHouse est hébergé à Kubernetes basé sur StatefulSets) et, bien sûr, avec autorisation.


Voici ce qui s'est passé ensuite.


Presque immĂ©diatement aprĂšs le dĂ©marrage du projet en production, nous avons constatĂ© que dans le ClickHouse datadir de la base de donnĂ©es utilisateur, dans les tables non-shard (dans notre cas, celles qui sont situĂ©es localement sur chaque nƓud, sans le postfixe sharded, de type Distributed), il y avait un grand nombre de non perdus bin-logs. La date des journaux a prĂ©cĂ©dĂ© la date d'installation sur l'autorisation ClickHouse.


Voici la sortie de la console pour l'une des répliques ClickHouse de la table table_1 de la base de données de test:


ls -l /var/lib/clickhouse/data/test/table_1/test_usr@clickhouse%2D0%2Eclickhouse%2Eclickhouse%2Dprod%2Esvc%2Ecluster%2Elocal\:9000 | tail -n 10 -rw-r----- 1 clickhouse clickhouse 1472 Jul 8 08:26 9983.bin -rw-r----- 1 clickhouse clickhouse 1453 Jul 8 08:26 9985.bin -rw-r----- 1 clickhouse clickhouse 1383 Jul 8 08:26 9987.bin -rw-r----- 1 clickhouse clickhouse 1461 Jul 8 08:27 9989.bin -rw-r----- 1 clickhouse clickhouse 1458 Jul 8 08:28 9991.bin -rw-r----- 1 clickhouse clickhouse 1468 Jul 8 08:29 9993.bin -rw-r----- 1 clickhouse clickhouse 1413 Jul 8 08:29 9995.bin -rw-r----- 1 clickhouse clickhouse 1509 Jul 8 08:32 9997.bin -rw-r----- 1 clickhouse clickhouse 1504 Jul 8 08:32 9999.bin drwxr-x--- 2 clickhouse clickhouse 4096 Sep 16 12:59 tmp 

C'est-Ă -dire les donnĂ©es elles-mĂȘmes ont Ă©tĂ© placĂ©es dans la table distribuĂ©e locale d'une rĂ©plique spĂ©cifique, mais pour une raison inconnue Ă  ce moment-lĂ , elles n'ont pas Ă©tĂ© dĂ©placĂ©es vers une table avec un postfix dĂ©coupĂ© (tel que ReplicatedMergeTree), qui est accessible Ă  partir de toutes les rĂ©pliques de cluster en y accĂ©dant via une table locale (sans postfix) Ă©clatĂ©).


Comme il s'est avĂ©rĂ© aprĂšs l'analyse, les donnĂ©es enregistrĂ©es dans la base de donnĂ©es ClickHouse sur l'ancienne infrastructure, Ă  savoir avant d'activer l'autorisation, elles ne pouvaient plus ĂȘtre rĂ©parties entre rĂ©pliques sur la nouvelle infrastructure, car Sur les nouveaux serveurs ClickHouse, l'autorisation a dĂ©jĂ  Ă©tĂ© activĂ©e.


Pourquoi Lorsque les données sont écrites dans ClickHouse sans autorisation, un lien du formulaire suivant est généré dans le répertoire datadir de clickHouse dans les répertoires de base de données correspondants et dans la table (le lien est généré sur la base d'une demande faite à la base de données):


 test_usr@clickhouse%2D0%2Eclickhouse%2Eclickhouse%2Dprod%2Esvc%2Ecluster%2Elocal\:9000 

Examinons-le plus en dĂ©tail. Le lien ci-dessus est accessible par l'utilisateur test_usr, mais le mot de passe pour l'autorisation n'est pas spĂ©cifiĂ©. Et que se passe-t-il si, avant d'activer l'autorisation dans la base de donnĂ©es, une trĂšs grande quantitĂ© de donnĂ©es Ă©tait enregistrĂ©e dans ClickHouse, qui formait des journaux de casiers, et ClickHouse sur les anciens serveurs n'avait pas le temps de les perdre, puis aprĂšs avoir activĂ© l'autorisation sur les nouveaux serveurs ClickHouse et migrĂ© les anciens non perdus bin-logs vers de nouveaux serveurs, ces bin-logs ne peuvent plus ĂȘtre lus, car le lien a dĂ©jĂ  Ă©tĂ© gĂ©nĂ©rĂ© sans autorisation pour l'utilisateur test_usr.


Toutes les nouvelles donnĂ©es entrantes dans ClickHouse gĂ©nĂ©reront Ă©galement des journaux de casiers dans les rĂ©pertoires et tables de base de donnĂ©es correspondants, qui seront ensuite lus, mais avec un lien diffĂ©rent, oĂč l'autorisation est indiquĂ©e (puisque l'application accĂšde dĂ©jĂ  Ă  ClickHouse sur la nouvelle infrastructure se fait avec le mot de passe de l'utilisateur test_usr, sinon la requĂȘte n'atteindra tout simplement pas la base de donnĂ©es):


 test_usr:password@clickhouse%2D0%2Eclickhouse%2Eclickhouse%2Dprod%2Esvc%2Ecluster%2Elocal\:9000 

Parce que les données sont écrites dans la base de données de maniÚre asynchrone, c'est-à-dire qu'elles sont d'abord placées sur une réplique ClickHouse locale à laquelle on a accédé, puis elles sont envoyées à d'autres répliques du cluster.


Par consĂ©quent, les anciennes donnĂ©es enregistrĂ©es sur l'une des rĂ©pliques ClickHouse locales, mais qui n'Ă©taient pas rĂ©parties entre les autres rĂ©pliques de cluster (car le lien gĂ©nĂ©rĂ© ne contenait pas le mot de passe de l'utilisateur, mais il Ă©tait dĂ©jĂ  dĂ©fini), elles n'Ă©taient mĂȘme pas accessibles. pour lire la rĂ©plique sur laquelle se trouvaient directement les journaux de bin non appliquĂ©s.


Comment avons-nous résolu le problÚme et n'avons-nous pas perdu les données non allouées?


Tout s'est avéré assez simple. Il suffit d'effectuer les manipulations suivantes avec des données non allouées dans la base de données:


  1. Les liens gĂ©nĂ©rĂ©s pour chacune des tables de la base de donnĂ©es de problĂšmes doivent ĂȘtre renommĂ©s (renommĂ©s) au format requis:
     mv /var/lib/clickhouse/data/test/table_1/test_usr@clickhouse%2D0%2Eclickhouse%2Eclickhouse%2Dprod%2Esvc%2Ecluster%2Elocal\:9000 /var/lib/clickhouse/data/test/table_1/test_usr:password@clickhouse%2D0%2Eclickhouse%2Eclickhouse%2Dprod%2Esvc%2Ecluster%2Elocal\:9000 
  2. Redémarrez les réplicas ClickHouse, ce qui lance le processus de lecture des journaux de bacs et de les placer dans nos tables fragmentées (ReplicatedMergeTree).

PS : Je recommande Ă  tout le monde de vĂ©rifier le fonctionnement de leurs serveurs ClickHouse pour les problĂšmes dĂ©crits. Si tel est le cas, cette note vous aidera Ă  gagner du temps dans la recherche d'une solution et Ă  ĂȘtre plus prudent lors de la dĂ©finition / modification d'un mot de passe sur ClickHouse Ă  l'avenir.


Lisez Ă©galement d'autres articles sur notre blog:


Source: https://habr.com/ru/post/fr468779/


All Articles