sql >> Database teknologi >  >> NoSQL >> MongoDB

En guide til MongoDB-implementering og vedligeholdelse ved hjælp af Puppet:Del 2

I den forrige blog viste vi dig, hvordan du konfigurerer vores maskine med Puppet og derefter installerer og konfigurerer MongoDB. Da vi skal konfigurere et antal noder eller rettere maskiner, har vi brug for en dukkefører. I vores tilfælde vil vi dog oprette et git-lager, hvor vi vil skubbe vores manifester og anvende dem på vores maskiner.

For at oprette et lokalt git-lager skal du først vælge den sti, du vil bruge, dvs. /opt/. Opret derefter git repository ved at køre $sudo mkdir repository. Få root-brugertilladelse til at ændre indholdet af denne mappe ved at udstede kommandoen $sudo chown vagrant:vagrant repository. For at initialisere denne mappe som et git repository efter at have udstedt kommandoen $ cd repository, skal du køre $ git init --bare --shared, hvis du navigerer til denne mappe, skulle du nu se noget lignende

[email protected]:/vagrant/repository$ ls -l

total 12

-rw-rw-r-- 1 vagrant vagrant  23 Jul 15 07:46 HEAD

drwxr-xr-x 1 vagrant vagrant  64 Jul 15 07:46 branches

-rw-rw-r-- 1 vagrant vagrant 145 Jul 15 07:46 config

-rw-rw-r-- 1 vagrant vagrant  73 Jul 15 07:46 description

drwxr-xr-x 1 vagrant vagrant 352 Jul 15 07:46 hooks

drwxr-xr-x 1 vagrant vagrant  96 Jul 15 07:46 info

drwxr-xr-x 1 vagrant vagrant 128 Jul 15 07:46 objects

drwxr-xr-x 1 vagrant vagrant 128 Jul 15 07:46 refs

-rw-r--r-- 1 vagrant vagrant   0 Jul 1 15:58 test.pp

Dette er den grundlæggende struktur i et git-lager, og mulighederne --bare og --share vil gøre os i stand til at skubbe og trække filer fra mappen.

Vi er nødt til at konfigurere et system, der muliggør kommunikation mellem de involverede maskiner og denne eksterne masterserver. Systemet vil i dette tilfælde blive omtalt som en dæmon. Dæmonen vil acceptere anmodninger fra fjernværter om enten at trække eller skubbe filer til dette lager. For at gøre det skal du udsende kommandoen $git daemon --reuseaddr --base-path=/opt/ --export-all --enable=receive-pack

Den gode praksis vil dog være at oprette en fil, hvorfra vi kan køre denne i baggrunden. Vi skal derfor  indstille tjenesten ved at udstede kommandoen sudo vim /etc/systemd/system/gitd. service. I den nye fil udfyldes den med dette indhold

[Unit]

Description=Git Repo Server Daemon

[Service]

ExecStart=/usr/bin/git daemon --reuseaddr --base-path=/opt/ --export-all --enable=receive-pack

[Install]

WantedBy=getty.target

DefaultInstance=ttyl

Gem filen og afslut ved at trykke på , skriv derefter :x og tryk på . For at starte serveren skal du køre kommandoen $ systemctl start gitd. Til godkendelsen skal du bruge den adgangskode, vi sætter i dette tilfælde vagrant. Du burde blive præsenteret for noget som dette 

[email protected]:/opt/repository$ systemctl start gitd

==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===

Authentication is required to start 'gitd.service'.

Authenticating as: vagrant,,, (vagrant)

Password: 

==== AUTHENTICATION COMPLETE ===

To check if the service is running $ ps -ef | grep git and you will get: 

[email protected]:/opt/repository$ ps -ef | grep git

root      1726 1  0 07:48 ?     00:00:00 /usr/bin/git daemon --reuseaddr --base-path=/opt/ --export-all --enable=receive-pack

root      1728 1726  0 07:48 ?     00:00:00 git-daemon --reuseaddr --base-path=/opt/ --export-all --enable=receive-pack

vagrant   1731 1700  0 07:48 pts/0    00:00:00 grep --color=auto git

Nu hvis vi kører $ git clone git://198.168.1.100/repository (husk at ændre IP-adressen med din maskines netværks-IP) i rodmappen, vil du få en nyoprettet repository-mappe . Husk at konfigurere dine legitimationsoplysninger ved at fjerne kommentering af e-mail og adgangskode i konfigurationsfilen. Kør $ git config --global --edit for at få adgang til denne fil.

Dette lager vil fungere som vores centrale server for alle manifester og variabler.

Opsætning af miljøet

Vi skal nu konfigurere det miljø, hvorfra vi vil konfigurere noderne. Skift først til vagrant-mappen og klon det lager, vi lige har oprettet, med den samme kommando som ovenfor.

 Fjern manifestmappen i vagrant-mappen ved at køre $rm -r manifest/.

Lav en ny produktionsmappe med $ mkdir-produktion og klon det samme lager, som vi oprettede ovenfor med $ git clone git://198.168.1.100/repository . (glem ikke prikken i slutningen)

 Kopiér og indsæt indholdet af puppetlabs produktionsmiljø i denne produktionsmappe ved at udstede cp -pr /etc/puppetlabs/code/environments/production/* . Din produktionsmappe skulle nu se sådan ud

[email protected]:/vagrant/production$ ls -l

total 8

drwxr-xr-x 1 vagrant vagrant  64 Apr 26 18:50 data

-rw-r--r-- 1 vagrant vagrant 865 Apr 26 18:50 environment.conf

-rw-r--r-- 1 vagrant vagrant 518 Apr 26 18:50 hiera.yaml

drwxr-xr-x 1 vagrant vagrant  96 Jul 2 10:45 manifests

drwxr-xr-x 1 vagrant vagrant  64 Apr 26 18:50 modules

-rw-r--r-- 1 vagrant vagrant   0 Jul 1 16:13 test.pp

Vi skal skubbe disse ændringer til rodlageret, så vi kører 

$ git add * && git commit -m "adding production default files" && git push

For at teste om git-konfigurationen virker, kan vi slette indholdet i mappen /etc/puppetlabs/code/environments/production/ ved at køre $ sudo rm -r * i denne mappe og derefter trække filerne fra master-depotet som root-bruger, dvs. $ git clone git://198.168.1.100/repository. (glem ikke prikken i slutningen). Kun mapper med indhold trækkes i dette tilfælde, så du kan gå glip af mapperne med manifester og moduler. Disse operationer kan udføres på alle involverede maskiner, enten master-dukke- eller klientmaskine. Så vores opgaver vil være at trække ændringerne fra hovedserveren og anvende ændringerne ved hjælp af manifesterne.

Udførelsesmanifest

Dette er scriptet, vi skal skrive for at hjælpe os med at trække ændringer og anvende dem automatisk på vores andre noder. Du skal ikke kun bruge produktionsmiljøet, du kan tilføje så mange miljøer som muligt og derefter diktere marionetten, hvilken du skal søge fra. I root  production/manifests-mappen opretter vi eksekveringsmanifestet som puppet_exec.pp og udfylder det med følgende indhold

 file { "This script will be pulling and applying the puppet manifests":

path => '/usr/local/bin/exec-puppet',

content => 'cd /etc/puppetlabs/code/environments/production/ && git pull; /opt/puppetlabs/bin/puppet apply manifests/'

mode => "0755"

}

cron {'exec-puppet':

command => '/usr/local/bin/exec-puppet',

hour => '*',

minute => '*/15'

}

Fil er en ressource, som er blevet beskrevet til at udføre dukkemanifesterne. Tilføj en passende sti til den fil, vi opretter, og udfyld den med de kommandoer, der skal udstedes, når den skal udføres.

Kommandoerne udføres systematisk, det vil sige, at vi først navigerer til produktionsmiljøet, trækker lagerændringerne og anvender dem derefter på maskinen.

Vi leverer manifestmappen til hver node, hvorfra den kan vælge det manifest, der er rettet til den til anvendelse.

Der er også indstillet en varighed, som udførelsesfilen skal køres over. I dette tilfælde for hver time, kør filen 4 gange.

For at anvende dette på vores nuværende maskine, $ cd /vagrant/production. Tilføj alt til git ved at køre $ git add * derefter $ git commit -m “add the cron-konfigurationer” og til sidst $ git push. Naviger nu til $ cd /etc/puppetlabs/code/environments/production/ og $ sudo git pull

Nu hvis vi tjekker manifestmappen i denne mappe, skulle du se puppet_exec.pp oprettet som vi lige havde defineret.

Nu, hvis vi kører $ sudo puppet, skal du anvende manifester/ og kontrollere, om filerne exec-puppet er blevet oprettet $ cat /usr/local/bin/exec-puppet

Indholdet af denne fil skal være 

cd /etc/puppetlabs/code/environments/production/ && git pull; /opt/puppetlabs/bin/puppet apply manifests/

På dette tidspunkt har vi set, hvordan vi kan trække og skubbe ændringer til vores mastermaskine, som skal anvendes på alle de andre noder. Hvis vi kører $ sudo crontab -l, fremhæves nogle vigtige advarsler på den oprettede exec-puppet-fil.

# HEADER: This file was autogenerated at 2019-07-02 11:50:56 +0000 by puppet.

# HEADER: While it can still be managed manually, it is definitely not recommended.

# HEADER: Note particularly that the comments starting with 'Puppet Name' should

# HEADER: not be deleted, as doing so could cause duplicate cron jobs.

# Puppet Name: exec-puppet

*/15 * * * * /usr/local/bin/exec-puppet

Konfiguration af maskinerne

Lad os sige, at vores vagrant-fil ser ud

Vagrant.configure("2") do |config|

  config.vm.define "puppet" do |puppet|

   puppet.vm.box = "bento/ubuntu-16.04"

   #puppet.vm.hostname = "puppet"

   #puppet.vm.network "private_network", ip: "192.168.1.10"

  end

  config.vm.define "db" do |db|

    db.vm.box = "bento/ubuntu-16.04"

  end

end

I dette tilfælde har vi dukkemaskinen, hvor vi har lavet vores konfigurationer, og derefter db-maskinen. Nu skal vi automatisere maskinen sådan, at hver gang db-maskinen startes, har den en marionet allerede installeret og cron-filen allerede tilgængelig til at trække manifesterne og anvende dem i overensstemmelse hermed. Du skal omstrukturere indholdet af db-maskinen til at være som følger

config.vm.define "db" do |db|

    db.vm.box = "bento/ubuntu-16.04"

    vm.provision "shell", inline: <<-SHELL

      cd /temp

      wget  https://apt.puppetlabs.com/puppet5-release-xenial.deb

      dpkg -i puppet5-release-xenial.deb

      apt-get update

      apt-get install -y puppet-agent

      apt-get install -y git

      rm -rf /etc/puppetlabs/code/environments/production/*

      cd /etc/puppetlabs/code/environments/production/

      git clone git://198.168.1.100/repository .

      /opt/puppetlabs/bin/puppet apply /etc/puppetlabs/code/environments/production/manifests/puppet_exec.pp

    SHELL

  End

Op til dette trin bør strukturen af ​​din dukkemappe være noget som denne

Hvis du nu kører db-maskinen med kommandoen $ vagrant up db, vil nogle af ressourcerne blive installeret, og script, vi netop har defineret, kan findes i mappen produktion/manifester. Det er dog tilrådeligt at bruge dukkemesteren, som er begrænset til kun 10 noder til den gratis version, ellers bliver du nødt til at abonnere på en plan. Puppet Master tilbyder flere funktioner og distribution af manifester til flere noder, rapporteringslogfiler og mere kontrol på noderne.

Mongodb Puppet Module

Dette modul bruges i installationen af ​​MongoDB, styring af mongod-serverinstallation, konfiguration af mongod-dæmonen og styring af Ops Manager-opsætningen udover MongoDB-mms-dæmonen.

Konklusion

I den næste blog viser vi dig, hvordan du implementerer et MongoDB Replica Set og Shards ved hjælp af Puppet.


  1. MongoDB $currentDate

  2. find id for seneste underdokument indsat i mongoose

  3. Er ikke-blokerende Redis pubsub muligt?

  4. Er Redis-opdateringer synkrone?