Tableau 1. Paramètres de collector.conf
Catégorie | Paramètre | Description | Exemple |
N/A | conf.version | Version du fichier de configuration. Ne modifiez pas cette valeur. |
|
Options globales | id | ID de la tâche de synchronisation. Cette valeur est personnalisable et sert à nommer le fichier journal, la base de données stockant les points de contrôle ainsi que la base de données sur l'instance cible. |
|
master_quorum | Option de haute disponibilité. Lorsque des nœuds MongoShake principaux et secondaires synchronisent des données depuis la même source, définissez ce paramètre à Valeurs valides :
Remarque La valeur par défaut est false. |
| |
full_sync.http_port | Port HTTP permettant de consulter l'état de la synchronisation complète. Remarque La valeur par défaut est 9101. |
| |
incr_sync.http_port | Port HTTP permettant de consulter l'état de la synchronisation incrémentielle. Remarque La valeur par défaut est 9100. |
| |
system_profile_port | Port de profilage utilisé pour afficher les informations internes de la pile d'exécution. |
| |
log.level | Niveau de journalisation. Valeurs valides :
Valeur par défaut : info. |
| |
log.dir | Répertoire destiné aux fichiers journaux et PID. Si ce paramètre n'est pas défini, le répertoire logs du chemin courant est utilisé par défaut. Remarque Vous devez spécifier un chemin absolu pour ce paramètre. |
| |
log.file | Nom du fichier journal. Cette valeur est personnalisable. Remarque La valeur par défaut est collector.log. |
| |
log.flush | Fréquence d'actualisation des journaux à l'écran. Valeurs valides :
Remarque La valeur par défaut est false. |
| |
sync_mode | Mode de synchronisation des données. Valeurs valides :
Remarque La valeur par défaut est incr. |
| |
mongo_urls | URI de chaîne de connexion de l'instance MongoDB source. Dans l'exemple, le compte de base de données est test, situé dans la base admin. Remarque
|
| |
mongo_cs_url | Si la source est une instance Sharded Cluster, vous devez spécifier l'URI de chaîne de connexion du nœud ConfigServer (CS). Pour savoir comment obtenir cette URI, consultez Demander un endpoint pour un shard. Dans l'exemple, le compte de base de données est test, situé dans la base admin. |
| |
mongo_s_url | Si la source est une instance Sharded Cluster, vous devez spécifier l'URI de chaîne de connexion d'au moins un nœud mongos. Séparez plusieurs adresses mongos par des virgules (,). Pour savoir comment obtenir cette URI, consultez Demander un endpoint pour un shard. Dans l'exemple, le compte de base de données est test, situé dans la base admin. |
| |
tunnel | Type de canal de synchronisation. Valeurs valides :
Remarque La valeur par défaut est direct. |
| |
tunnel.address | Adresse de destination. Le format d'adresse pris en charge varie selon le type de tunnel :
Dans l'exemple, le compte de base de données est test, situé dans la base admin. |
| |
tunnel.message | Type de données dans le canal. Ce paramètre n'est valide que si
Remarque La valeur par défaut est raw. |
| |
mongo_connect_mode | Mode de connexion à l'instance MongoDB. Ce paramètre n'est valide que si
Remarque La valeur par défaut est secondaryPreferred. |
| |
filter.namespace.black | Définit une liste de blocage pour la synchronisation des données. Les namespaces spécifiés ne sont pas synchronisés vers la base de données cible. Séparez plusieurs namespaces par des points-virgules (;). Remarque Un namespace correspond au nom canonique d'une collection ou d'un index dans MongoDB. Il combine le nom de la base de données et celui de la collection ou de l'index, par exemple |
| |
filter.namespace.white | Définit une liste d'autorisation pour la synchronisation des données. Seuls les namespaces spécifiés sont synchronisés vers la base de données cible. Séparez plusieurs namespaces par des points-virgules (;). |
| |
filter.pass.special.db | Active la synchronisation des bases de données spéciales. Par défaut, les bases telles que |
| |
filter.ddl_enable | Indique s'il faut activer la synchronisation DDL. Valeurs valides :
Remarque Cette fonctionnalité n'est pas prise en charge lorsque la source est une instance Sharded Cluster. |
| |
checkpoint.storage.url | Adresse de stockage des points de contrôle, utilisée pour permettre la reprise de la synchronisation. Si ce paramètre n'est pas configuré, le programme écrit les points de contrôle dans l'une des bases suivantes selon le type d'instance :
Dans l'exemple, le compte de base de données est test, situé dans la base admin. |
| |
checkpoint.storage.db | Nom de la base de données destinée au stockage des points de contrôle. Remarque La valeur par défaut est mongoshake. |
| |
checkpoint.storage.collection | Nom de la collection destinée au stockage des points de contrôle. Lorsque des nœuds MongoShake principaux et secondaires synchronisent des données depuis la même source, vous pouvez modifier ce nom de collection pour éviter les conflits. Remarque La valeur par défaut est ckpt_default. |
| |
checkpoint.start_position | Position de départ de la synchronisation. Ce paramètre n'est utilisé qu'en l'absence de point de contrôle existant. Le format est Remarque La valeur par défaut est 1970-01-01T00:00:00Z. |
| |
transform.namespace | Renomme une base de données ou une collection source avant de la synchroniser vers la cible. Par exemple, vous pouvez renommer |
| |
Options de synchronisation complète | full_sync.reader.collection_parallel | Nombre maximal de collections que MongoShake peut extraire simultanément. |
|
full_sync.reader.write_document_parallel | Nombre de threads d'écriture simultanés par collection pour MongoShake. |
| |
full_sync.reader.document_batch_size | Taille du lot pour l'écriture de documents sur l'instance cible. Par exemple, une valeur de 128 indique que 128 documents sont regroupés avant écriture. |
| |
full_sync.collection_exist_drop | Détermine le comportement lorsqu'une collection cible porte le même nom qu'une collection source. Valeurs valides :
|
| |
full_sync.create_index | Indique s'il faut créer un index une fois la synchronisation terminée. Valeurs valides :
|
| |
full_sync.executor.insert_on_dup_update | Indique s'il faut convertir une instruction
|
| |
full_sync.executor.filter.orphan_document | Indique s'il faut filtrer les documents orphelins lorsque la source est une instance Sharded Cluster. Valeurs valides :
|
| |
full_sync.executor.majority_enable | Indique s'il faut activer l'écriture majoritaire sur l'instance cible. Valeurs valides :
|
| |
Options de synchronisation incrémentielle | incr_sync.mongo_fetch_method | Méthode d'extraction des données incrémentielles. Valeurs valides :
Valeur par défaut : oplog. |
|
incr_sync.oplog.gids | Utilisé pour configurer la réplication bidirectionnelle des clusters cloud. |
| |
incr_sync.shard_key | Méthode de concurrence interne de MongoShake. Ne modifiez pas ce paramètre. |
| |
incr_sync.worker | Nombre de threads simultanés pour la transmission des oplogs. Vous pouvez augmenter cette valeur si les performances de l'hôte le permettent. Remarque Si la source est une instance Sharded Cluster, le nombre de threads doit être égal au nombre de shards. |
| |
incr_sync.worker.oplog_compressor | Active la compression des données pour réduire la consommation de bande passante réseau. Valeurs valides :
Remarque Ce paramètre n'est valide que si le paramètre |
| |
incr_sync.target_delay | Délai, en secondes, avant l'application des modifications de la source sur la cible. Vous pouvez définir ce paramètre pour prévenir les opérations accidentelles. Par exemple, Remarque Une valeur de 0 indique une synchronisation en temps réel. |
| |
incr_sync.worker.batch_queue_size | Paramètres de configuration de la file d'attente interne de MongoShake. Ne modifiez ces paramètres qu'en cas de nécessité absolue. |
| |
incr_sync.adaptive.batching_max_size |
| ||
incr_sync.fetcher.buffer_capacity |
| ||
Options de synchronisation MongoDB (uniquement pour le mode | incr_sync.executor.upsert | Indique s'il faut convertir une instruction
|
|
incr_sync.executor.insert_on_dup_update | Indique s'il faut convertir une instruction
|
| |
incr_sync.conflict_write_to | Indique s'il faut enregistrer les documents conflictuels lorsqu'un conflit d'écriture survient pendant la synchronisation. Valeurs valides :
|
| |
incr_sync.executor.majority_enable | Indique s'il faut activer l'écriture majoritaire sur l'instance cible. Valeurs valides :
Remarque L'activation de cette fonctionnalité peut affecter les performances. |
|
MongoShake, outil open source développé par Alibaba Cloud, synchronise les données entre bases MongoDB pour des cas d'usage tels que l'analyse de données, la reprise après sinistre et la réplication actif-actif. Cette rubrique explique comment configurer une synchronisation en temps réel entre instances ApsaraDB for MongoDB.
MongoShake
MongoShake est un outil service polyvalent développé par Alibaba Cloud en Go. Il réplique les données MongoDB en lisant ses journaux d'opérations (oplogs) et en les rejouant sur l'instance cible.
MongoShake offre également des fonctionnalités d'abonnement et de consommation de données. Il s'intègre aux SDK, à Kafka et à MetaQ pour prendre en charge des scénarios tels que l'abonnement aux journaux, la synchronisation inter-centres de données et l'éviction asynchrone de cache.
Pour plus d'informations, consultez le dépôt GitHub MongoShake.
Sources de données prises en charge
|
Source |
Cible |
|
Base de données MongoDB auto-gérée sur une instance ECS |
Base de données MongoDB auto-gérée sur une instance ECS |
|
Base de données MongoDB auto-gérée sur site |
Base de données MongoDB auto-gérée sur site |
|
Instance ApsaraDB for MongoDB |
Instance ApsaraDB for MongoDB |
|
Base de données MongoDB cloud tierce |
Base de données MongoDB cloud tierce |
Remarques
N'effectuez aucune opération DDL sur la base source avant la fin de la synchronisation complète. Sinon, des incohérences de données peuvent survenir.
La synchronisation de la base locale n'est pas prise en charge. Pour synchroniser des données depuis la base admin, consultez Migrer les données métier de la base admin vers une base non-admin.
Permissions requises
Source | Permissions requises |
Instance MongoDB source | Permission Remarque Le programme MongoShake crée automatiquement la base |
Instance MongoDB cible | Permission |
Pour savoir comment créer et autoriser des utilisateurs de base de données MongoDB, consultez Utiliser DMS pour gérer les utilisateurs de bases de données MongoDB ou la commande db.createUser.
Prérequis
Pour des performances de synchronisation optimales, assurez-vous que l'instance Replica Set MongoDB source utilise un VPC. Si elle utilise le réseau classique, changez son type de réseau pour VPC. Pour plus d'informations, consultez Changer le type de réseau d'une instance du réseau classique vers un VPC.
Créez une instance Replica Set MongoDB cible. Afin de minimiser la latence réseau, créez l'instance cible dans le même VPC que l'instance source. Pour plus d'informations, consultez Créer une instance Replica Set.
Créez une instance ECS pour exécuter MongoShake. Afin de minimiser la latence réseau, créez l'instance ECS dans le même VPC que l'instance source. Pour plus d'informations, consultez Créer une instance ECS.
Ajoutez l'adresse IP privée de l'instance ECS aux listes d'autorisation des instances MongoDB source et cible, puis vérifiez que l'instance ECS peut se connecter aux deux instances. Pour plus d'informations, consultez Modifier une liste d'autorisation.
Si votre configuration réseau ne répond pas aux exigences ci-dessus, vous pouvez demander un endpoint public pour les instances MongoDB source et cible. Ajoutez ensuite l'adresse IP publique de l'instance ECS aux listes d'autorisation des deux instances MongoDB afin d'effectuer la synchronisation via les endpoints publics. Pour plus d'informations, consultez Demander un endpoint public et Modifier une liste d'autorisation.
Procédure
Cette procédure suppose que MongoShake est installé dans le répertoire /test/mongoshake.
-
Connectez-vous à l'instance ECS.
RemarqueChoisissez une méthode de connexion adaptée à votre scénario. Pour plus d'informations, consultez Vue d'ensemble des méthodes de connexion aux serveurs ECS.
-
Exécutez la commande suivante pour télécharger le programme MongoShake et le renommer en
mongoshake.tar.gz.wget "https://github.com/alibaba/MongoShake/releases/download/release-v2.8.7-20251218/mongo-shake-v2.8.7.tgz" -O mongoshake.tar.gzRemarqueLa commande télécharge MongoShake 2.8.7. Pour télécharger la dernière version, consultez la page des versions.
-
Exécutez la commande suivante pour extraire le package MongoShake dans le répertoire /test/mongoshake.
tar zxvf mongoshake.tar.gz && mv mongo-shake-v2.8.7 /test/mongoshake && cd /test/mongoshake -
Exécutez la commande
vi collector.confpour modifier le fichier de configuration MongoShake collector.conf. Le tableau suivant décrit les principaux paramètres.Paramètre
Description
Exemple
mongo_urls
URI de chaîne de connexion de l'instance MongoDB source. Dans l'exemple, le compte de base de données est test, situé dans la base admin.
RemarqueNous recommandons d'utiliser un endpoint VPC afin de minimiser la latence réseau.
Pour plus de détails sur le format de l'URI de chaîne de connexion, consultez Description de la connexion pour une instance Replica Set.
mongo_urls = mongodb://test:**@dds-bp19f409d7512.mongodb.rds.aliyuncs.com:3717,dds-bp19f409d7512**.mongodb.rds.aliyuncs.com:3717RemarqueLe mot de passe ne peut pas contenir le signe arobase (
@). Sinon, la connexion échoue.tunnel.address
URI de chaîne de connexion de l'instance MongoDB cible. Dans l'exemple, le compte de base de données est test, situé dans la base admin.
RemarqueNous recommandons d'utiliser un endpoint VPC afin de minimiser la latence réseau.
Pour plus de détails sur le format de l'URI de chaîne de connexion, consultez Description de la connexion pour une instance Replica Set.
tunnel.address = mongodb://test:**@dds-bp19f409d7512.mongodb.rds.aliyuncs.com:3717,dds-bp19f409d7512**.mongodb.rds.aliyuncs.com:3717RemarqueLe mot de passe ne peut pas contenir le signe arobase (
@). Sinon, la connexion échoue.sync_mode
Mode de synchronisation des données. Valeurs valides :
all : effectue une synchronisation complète puis incrémentielle.
full : effectue uniquement une synchronisation complète.
incr : effectue uniquement une synchronisation incrémentielle.
RemarqueLa valeur par défaut est
incr.sync_mode = allRemarquePour obtenir la liste complète des paramètres dans collector.conf, consultez la section « Paramètres de collector.conf » dans l'Annexe.
-
Exécutez la commande suivante pour démarrer la tâche de synchronisation et afficher les journaux.
./collector.linux -conf=collector.conf -verbose -
Surveillez la sortie des journaux. Lorsqu'une entrée similaire à celle-ci apparaît, cela indique que la synchronisation complète est terminée et que la synchronisation incrémentielle a commencé.
[09:38:57 CST 2019/06/20] [INFO] (mongoshake/collector.(*ReplicationCoordinator).Run:80) finish full sync, start incr sync with timestamp: fullBeginTs[1560994443], fullFinishTs[1560994737]
Surveillance de l'état
Une fois la synchronisation incrémentielle démarrée, ouvrez une nouvelle fenêtre de terminal et exécutez les commandes suivantes :
cd /test/mongoshake && ./mongoshake-stat --port=9100
mongoshake-stat est un script Python qui nécessite l'installation de Python 2.7. Pour plus d'informations, consultez le site officiel de Python.
Exemple de sortie :
./mongoshake-stat --port=9100
logs_get/sec | logs_repl/sec | logs_success/sec | lsn.time | lsn_ack.time | lsn_ckpt.time | now.time | replset
none | none | none | 2019-06-20 10:34:14 | 2019-06-20 10:34:13 | 2019-06-20 10:33:36 | 2019-06-20 10:34:14 | mgset-10
545 | 768 | 768 | 2019-06-20 10:34:15 | 2019-06-20 10:34:15 | 2019-06-20 10:34:14 | 2019-06-20 10:34:15 | mgset-10
541 | 511 | 511 | 2019-06-20 10:34:15 | 2019-06-20 10:34:15 | 2019-06-20 10:34:14 | 2019-06-20 10:34:16 | mgset-10
639 | 512 | 512 | 2019-06-20 10:34:16 | 2019-06-20 10:34:16 | 2019-06-20 10:34:14 | 2019-06-20 10:34:17 | mgset-10
543 | 512 | 512 | 2019-06-20 10:34:17 | 2019-06-20 10:34:17 | 2019-06-20 10:34:14 | 2019-06-20 10:34:18 | mgset-10
546 | 768 | 768 | 2019-06-20 10:34:19 | 2019-06-20 10:34:19 | 2019-06-20 10:34:14 | 2019-06-20 10:34:19 | mgset-10
538 | 512 | 512 | 2019-06-20 10:34:20 | 2019-06-20 10:34:20 | 2019-06-20 10:34:19 | 2019-06-20 10:34:20 | mgset-10
550 | 511 | 511 | 2019-06-20 10:34:21 | 2019-06-20 10:34:21 | 2019-06-20 10:34:19 | 2019-06-20 10:34:21 | mgset-10
546 | 512 | 512 | 2019-06-20 10:34:22 | 2019-06-20 10:34:22 | 2019-06-20 10:34:19 | 2019-06-20 10:34:22 | mgset-10
531 | 512 | 512 | 2019-06-20 10:34:23 | 2019-06-20 10:34:23 | 2019-06-20 10:34:19 | 2019-06-20 10:34:23 | mgset-10
547 | 512 | 512 | 2019-06-20 10:34:24 | 2019-06-20 10:34:24 | 2019-06-20 10:34:19 | 2019-06-20 10:34:24 | mgset-10
541 | 512 | 512 | 2019-06-20 10:34:24 | 2019-06-20 10:34:24 | 2019-06-20 10:34:19 | 2019-06-20 10:34:25 | mgset-10
Description des paramètres :
|
Paramètre |
Description |
|
logs_get/sec |
Nombre d'oplogs récupérés par seconde. |
|
logs_repl/sec |
Nombre d'opérations de rejeu d'oplogs effectuées par seconde. |
|
logs_success/sec |
Nombre d'opérations de rejeu d'oplogs réussies par seconde. |
|
lsn.time |
Horodatage du dernier oplog envoyé. |
|
lsn_ack.time |
Horodatage auquel l'opération d'écriture a été confirmée par l'instance cible. |
|
lsn_ckpt.time |
Horodatage auquel le point de contrôle a été persisté. |
|
now.time |
Heure actuelle. |
|
replset |
Nom du Replica Set de la base de données source. |
Migrer les données de la base admin
MongoDB recommande officiellement de ne pas stocker de données métier dans la base admin, car les comportements de verrouillage et les conflits avec les commandes internes peuvent dégrader les performances de l'instance.
MongoShake prend en charge la synchronisation des données métier de la base admin vers une base non-admin.
Pour ce faire, suivez la Procédure. À l'étape 4, lorsque vous modifiez le fichier collector.conf, ajoutez les éléments de configuration suivants :
filter.pass.special.db = admin
# Migrate all business collections from the admin database to newDB.
transform.namespace = admin:newDB
# Or, migrate the abc collection in the admin database to the def collection in the target database. You can configure multiple rules.
transform.namespace = admin.abc:target.def
FAQ
Consultez la FAQ MongoShake. Si vous rencontrez d'autres problèmes lors de l'utilisation de MongoShake, vous pouvez ouvrir un ticket sur GitHub Issues.