Vue d’ensemble de la mise à niveau de ClickHouse
Ce document comprend :
- des recommandations générales
- un plan recommandé
- des précisions sur la mise à niveau des binaires de vos systèmes
Recommandations générales
Ces remarques devraient vous aider dans votre planification et à comprendre pourquoi nous formulons ces recommandations plus loin dans le document.
Mettez à niveau serveur ClickHouse séparément de ClickHouse Keeper ou de ZooKeeper
Sauf si un correctif de sécurité est nécessaire pour ClickHouse Keeper ou Apache ZooKeeper, il n’est pas nécessaire de mettre à niveau Keeper lorsque vous mettez à niveau serveur ClickHouse. La stabilité de Keeper étant indispensable pendant le processus de mise à niveau, terminez d’abord les mises à niveau de serveur ClickHouse avant d’envisager celle de Keeper.
Les mises à niveau mineures doivent être appliquées régulièrement
Il est fortement recommandé d’effectuer la mise à niveau vers la dernière version mineure dès sa publication. Les versions mineures n’introduisent pas de changements incompatibles, mais elles incluent des corrections de bugs importantes (et peuvent aussi contenir des correctifs de sécurité).
Testez les fonctionnalités expérimentales sur un serveur ClickHouse distinct exécutant la version cible
La compatibilité des fonctionnalités expérimentales peut être rompue à tout moment, de n’importe quelle manière. Si vous utilisez des fonctionnalités expérimentales, consultez les changelogs et envisagez de configurer un serveur ClickHouse distinct sur lequel la version cible est installée afin d’y tester votre utilisation de ces fonctionnalités expérimentales.
Retour à une version antérieure
Si vous effectuez une mise à niveau, puis constatez que la nouvelle version n’est pas compatible avec une fonctionnalité dont vous dépendez, vous pourrez peut-être revenir à une version récente (datant de moins d’un an), à condition de ne pas avoir commencé à utiliser les nouvelles fonctionnalités. Une fois ces nouvelles fonctionnalités utilisées, le retour à une version antérieure ne fonctionnera plus.
Plusieurs versions du serveur ClickHouse dans un cluster
Nous nous efforçons de maintenir une fenêtre de compatibilité d’un an (qui inclut 2 versions LTS). Cela signifie que deux versions quelconques doivent pouvoir fonctionner ensemble dans un cluster si l’écart entre elles est inférieur à un an (ou s’il y a moins de deux versions LTS entre elles). Cependant, il est recommandé de mettre à niveau tous les membres d’un cluster vers la même version aussi rapidement que possible, car quelques problèmes mineurs peuvent survenir (comme un ralentissement des requêtes distribuées, des erreurs récupérables dans certaines opérations en arrière-plan de ReplicatedMergeTree, etc.).
Nous ne recommandons jamais d’exécuter différentes versions dans le même cluster lorsque leurs dates de publication sont espacées de plus d’un an. Bien que nous ne nous attendions pas à une perte de données, le cluster peut devenir inutilisable. Voici les problèmes auxquels vous devez vous attendre si l’écart entre les versions dépasse un an :
- le cluster peut ne pas fonctionner
- certaines requêtes (voire toutes) peuvent échouer avec des erreurs arbitraires
- des erreurs/avertissements arbitraires peuvent apparaître dans les logs
- il peut être impossible de rétrograder
Mises à niveau par étapes
Si l’écart entre la version actuelle et la version cible est supérieur à un an, il est recommandé de procéder de l’une des façons suivantes :
- Effectuer une mise à niveau avec interruption de service (arrêter tous les serveurs, mettre à niveau tous les serveurs, puis redémarrer tous les serveurs).
- Ou effectuer la mise à niveau via une version intermédiaire (une version datant de moins d’un an de plus que la version actuelle).
Voici les étapes recommandées pour une mise à niveau de ClickHouse sans interruption de service :
- Assurez-vous que vos modifications de configuration ne se trouvent pas dans le fichier par défaut
/etc/clickhouse-server/config.xml, mais dans /etc/clickhouse-server/config.d/, car /etc/clickhouse-server/config.xml pourrait être écrasé lors d’une mise à niveau.
- Consultez les changelogs pour repérer les breaking changes (en remontant de la version cible à la version que vous utilisez actuellement).
- Effectuez toutes les mises à jour identifiées dans les breaking changes qui peuvent être réalisées avant la mise à niveau, et dressez la liste des changements qui devront être effectués après la mise à niveau.
- Identifiez une ou plusieurs répliques pour chaque shard à maintenir actives pendant la mise à niveau des autres répliques de ce shard.
- Sur les répliques à mettre à niveau, une par une :
- arrêtez le serveur ClickHouse
- mettez le server à niveau vers la version cible
- redémarrez le serveur ClickHouse
- attendez que les messages de Keeper indiquent que le système est stable
- passez à la réplique suivante6. Vérifiez les erreurs dans le log de Keeper et le log de ClickHouse
- Mettez à niveau les répliques identifiées à l’étape 4 vers la nouvelle version
- Reportez-vous à la liste des changements établie aux étapes 1 à 3 et appliquez ceux qui doivent l’être après la mise à niveau.
Ce message d’erreur est attendu lorsque plusieurs versions de ClickHouse s’exécutent dans un environnement répliqué. Vous ne le verrez plus lorsque toutes les répliques auront été mises à niveau vers la même version.MergeFromLogEntryTask: Code: 40. DB::Exception: Checksums of parts don't match:
hash of uncompressed files doesn't match. (CHECKSUM_DOESNT_MATCH) Data after merge is not
byte-identical to data on another replicas.
Processus de mise à niveau du binaire du serveur ClickHouse
Si ClickHouse a été installé à partir de paquets deb, exécutez les commandes suivantes sur le serveur :
$ sudo apt-get update
$ sudo apt-get install clickhouse-client clickhouse-server
$ sudo service clickhouse-server restart
Si vous avez installé ClickHouse autrement qu’avec les paquets deb recommandés, utilisez la méthode de mise à jour appropriée.
Vous pouvez mettre à jour plusieurs serveurs à la fois, à condition qu’il n’y ait jamais un moment où toutes les répliques d’un shard soient hors ligne.
Mise à niveau d’une ancienne version de ClickHouse vers une version spécifique :
À titre d’exemple :
xx.yy.a.b est une version stable actuelle. La dernière version stable est disponible ici
$ sudo apt-get update
$ sudo apt-get install clickhouse-server=xx.yy.a.b clickhouse-client=xx.yy.a.b clickhouse-common-static=xx.yy.a.b
$ sudo service clickhouse-server restart