Les entreprises utilisent l'infrastructure dans le cloud car elle offre vitesse, flexibilité et évolutivité. Vous pouvez imaginer que si nous pouvions lancer une nouvelle instance de base de données en un seul clic, et que cela prend quelques minutes jusqu'à ce qu'elle soit prête, nous pouvons également déployer l'application plus rapidement que par rapport à un environnement sur site.
Sauf si vous utilisez le propre service cloud de MongoDB, les principaux fournisseurs de cloud n'offrent pas de service MongoDB géré, ce n'est donc pas vraiment une opération en un clic pour déployer une instance ou un cluster unique. La méthode la plus courante consiste à faire tourner les machines virtuelles, puis à les déployer sur celles-ci. Le déploiement doit être pris en charge de A à Z - nous devons préparer l'instance, installer le logiciel de base de données, régler certaines configurations et sécuriser l'instance. Ces tâches sont essentielles, même si elles ne sont pas toujours correctement suivies - avec des conséquences potentiellement désastreuses.
L'automatisation joue un rôle important en s'assurant que toutes les tâches commencent par l'installation, la configuration, le renforcement et jusqu'à ce que le service de base de données soit prêt. Dans ce blog, nous discuterons de l'automatisation du déploiement pour MongoDB.
Orchestrateur logiciel
Il existe de nombreux nouveaux outils logiciels pour aider les ingénieurs à déployer et à gérer leur infrastructure. La gestion de la configuration aide les ingénieurs à se déployer plus rapidement et efficacement, réduisant ainsi le temps de déploiement des nouveaux services. Les options populaires incluent Ansible, Saltstack, Chef et Puppet. Chaque produit a des avantages et des inconvénients, mais ils fonctionnent tous très bien et sont extrêmement populaires. Le déploiement d'un service avec état comme MongoDB ReplicaSet ou Sharded Cluster peut être un peu plus difficile car il s'agit de configurations multi-serveurs et les outils ont une mauvaise prise en charge de la coordination incrémentielle et inter-nœuds. Les procédures de déploiement nécessitent généralement une orchestration entre les nœuds, les tâches étant exécutées dans un ordre spécifique.
Tâches de déploiement MongoDB à automatiser
Le déploiement d'un serveur MongoDB implique un certain nombre de choses ; ajoutez le référentiel MongoDB en local, installez le package MongoDB, configurez le port, le nom d'utilisateur et démarrez le service.
Tâche :installer MongoDB
- name: install mongoDB
apt:
name: mongodb
state: present
update_cache: yes
Tâche :copiez le fichier mongod.conf à partir du fichier de configuration.
- name: copy config file
copy:
src: mongodb.conf
dest: /etc/mongodb.conf
owner: root
group: root
mode: 0644
notify:
- restart mongodb
Tâche :créer la configuration de la limite MongoDB :
- name: create /etc/security/limits.d/mongodb.conf
copy:
src: security-mongodb.conf
dest: /etc/security/limits.d/mongodb.conf
owner: root
group: root
mode: 0644
notify:
- restart mongodb
Tâche :configuration de la permutation
- name: config vm.swappiness
sysctl:
name: vm.swappiness
value: '10'
state: present
Tâche :configurer le temps TCP Keepalive
- name: config net.ipv4.tcp_keepalive_time
sysctl:
name: net.ipv4.tcp_keepalive_time
value: '120'
state: present
Tâche :assurez-vous que MongoDB démarre automatiquement
- name: Ensure mongodb is running and and start automatically on reboots
systemd:
name: mongodb
enabled: yes
state: started
Nous pouvons combiner toutes ces tâches dans un seul playbook et exécuter le playbook pour automatiser le déploiement. Si nous exécutons un playbook Ansible depuis la console :
$ ansible-playbook -b mongoInstall.yml
Nous verrons la progression du déploiement à partir de notre script Ansible, la sortie devrait être quelque chose comme ci-dessous :
PLAY [ansible-mongo] **********************************************************
GATHERING FACTS ***************************************************************
ok: [10.10.10.11]
TASK: [install mongoDB] *******************************************************
ok: [10.10.10.11]
TASK: [copy config file] ******************************************************
ok: [10.10.10.11]
TASK: [create /etc/security/limits.d/mongodb.conf]*****************************
ok: [10.10.10.11]
TASK: [config vm.swappiness] **************************************************
ok: [10.10.10.11]
TASK: [config net.ipv4.tcp_keepalive_time]*************************************
ok: [10.10.10.11]
TASK: [config vm.swappiness] **********************************************
ok: [10.10.10.11]
PLAY RECAP ********************************************************************
[10.10.10.11] : ok=6 changed=1 unreachable=0 failed=0
Après le déploiement, nous pouvons vérifier le service MongoDB sur le serveur cible.
Automatisation du déploiement de MongoDB à l'aide de l'interface graphique ClusterControl
Il existe deux façons de déployer MongoDB à l'aide de ClusterControl. Nous pouvons l'utiliser depuis le tableau de bord de ClusterControl, il est basé sur une interface graphique et n'a besoin que de 2 boîtes de dialogue jusqu'à ce qu'il déclenche une nouvelle tâche pour un nouveau déploiement de MongoDB.
Nous devons d'abord renseigner l'utilisateur et le mot de passe SSH, remplir le nom du cluster comme indiqué ci-dessous :
Et ensuite, choisissez le fournisseur et la version de MongoDB, définissez l'utilisateur et mot de passe, et le dernier est de remplir l'adresse IP cible
Automatisation du déploiement de MongoDB à l'aide de la CLI s9s
Depuis l'interface de ligne de commande, on peut utiliser les outils s9s. Le déploiement de MongoDB à l'aide de s9s est juste une commande d'une ligne comme ci-dessous :
$ s9s cluster --create --cluster-type=mongodb --nodes="10.10.10.15" --vendor=percona --provider-version=4.2 --db-admin-passwd="12qwaszx" --os-user=vagrant --cluster-name="MongoDB" --wait
Create Mongo Cluster
/ Job 183 FINISHED [██████████] 100% Job finished.
Ainsi, le déploiement de MongoDB, qu'il s'agisse d'un ReplicaSet ou d'un Sharded Cluster, est très simple, et est entièrement automatisé par ClusterControl.