sql >> Databasteknik >  >> NoSQL >> MongoDB

En guide till MongoDB-distribution och underhåll med Puppet:Del 2

I den tidigare bloggen visade vi hur du ställer in vår maskin med Puppet och sedan installerar och konfigurerar MongoDB. Eftersom vi ska konfigurera ett antal noder eller snarare maskiner behöver vi en marionettmästare. I vårt fall kommer vi dock att skapa ett git-arkiv där vi kommer att pusha våra manifest och tillämpa dem på våra maskiner.

För att skapa ett lokalt git-förråd, välj först sökvägen du vill använda, dvs /opt/. Skapa sedan git-repository genom att köra  $sudo mkdir-repository. Få root-användartillstånd att ändra innehållet i den här katalogen genom att utfärda kommandot $sudo chown vagrant:vagrant repository. För att initiera den här katalogen som ett git-förråd efter att ha utfärdat kommandot $ cd-repository, kör $ git init --bare --shared om du navigerar till den här katalogen bör du nu se något liknande

[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

Detta är den grundläggande strukturen för ett git-förråd och alternativen --bare och --share kommer att göra det möjligt för oss att pusha och dra filer från katalogen.

Vi behöver konfigurera ett system som möjliggör kommunikation mellan de inblandade maskinerna och denna fjärrstyrda huvudserver. Systemet kommer i detta fall att kallas en demon. Demonen kommer att acceptera förfrågningar från fjärrvärdar att antingen dra eller pusha filer till detta förråd. För att göra det, utfärda kommandot $git daemon --reuseaddr --base-path=/opt/ --export-all --enable=receive-pack

Men det är bra att skapa en fil från vilken vi kan köra detta i bakgrunden. Vi måste därför ställa in tjänsten genom att utfärda kommandot sudo vim /etc/systemd/system/gitd. service. I den nya filen fyller du i den med detta innehåll

[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

Spara filen och avsluta genom att trycka på , skriv sedan :x och tryck på . För att starta servern kör kommandot $ systemctl start gitd. För autentiseringen använd lösenordet vi ställer in i det här fallet vagrant. Du bör presenteras för något sånt här 

[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

Om vi ​​nu kör $ git clone git://198.168.1.100/repository (kom ihåg att ändra IP-adressen med din maskins nätverks-IP) i rotkatalogen, får du en nyskapad repository-mapp . Kom ihåg att konfigurera dina referenser genom att avkommentera e-postadressen och lösenordet i konfigurationsfilen. Kör $ git config --global --edit för att komma åt den här filen.

Det här arkivet kommer att fungera som vår centrala server för alla manifest och variabler.

Ställa in miljön

Vi behöver nu ställa in miljön från vilken vi ska konfigurera noderna. Byt först till vagrantkatalogen och klona arkivet vi just skapade med samma kommando som ovan.

 Ta bort manifestkatalogen i vagrantmappen genom att köra $rm -r manifest/.

Skapa en ny produktionsmapp med $ mkdir-produktion och klona samma arkiv som vi skapade ovan med $ git clone git://198.168.1.100/repository . (glöm inte pricken i slutet)

 Kopiera och klistra in innehållet i Puppetlabs produktionsmiljö i den här produktionsmappen genom att utfärda cp -pr /etc/puppetlabs/code/environments/production/* . Din produktionskatalog bör nu se ut så här

[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 måste driva dessa ändringar till rotförrådet så att vi kör 

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

För att testa om git-konfigurationen fungerar kan vi ta bort innehållet i katalogen /etc/puppetlabs/code/environments/production/ genom att köra $ sudo rm -r * i den här katalogen och sedan dra filerna från huvudförvaret som root-användare, dvs $ git clone git://198.168.1.100/repository. (glöm inte pricken i slutet). Endast kataloger med innehåll dras i det här fallet så du kan missa manifest- och modulmapparna. Dessa operationer kan utföras på alla involverade maskiner, antingen mästerdocka eller klientdator. Så våra uppgifter kommer att vara att hämta ändringarna från huvudservern och tillämpa ändringarna med hjälp av manifesten.

Exekutionsmanifest

Detta är skriptet vi kommer att skriva för att hjälpa oss dra ändringar och tillämpa dem automatiskt på våra andra noder. Du måste inte bara använda produktionsmiljön, du kan lägga till så många miljöer som möjligt och sedan bestämma dockan från vilken du ska söka. I rotkatalogen  production/manifests skapar vi exekveringsmanifestet som puppet_exec.pp och fyller i det med följande innehåll

 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 är en resurs som har beskrivits för att exekvera marionettmanifesterna. Lägg till en lämplig sökväg för filen vi skapar och fyll i den med de kommandon som ska utfärdas när den ska köras.

Kommandona exekveras systematiskt, det vill säga vi navigerar först till produktionsmiljön, drar arkivändringarna och applicerar dem sedan på maskinen.

Vi tillhandahåller manifestkatalogen till varje nod från vilken den kan välja manifestet som riktas till den för tillämpning.

En varaktighet under vilken exekveringsfilen ska köras är också inställd. I det här fallet för varje timme, kör filen 4 gånger.

För att tillämpa detta på vår nuvarande maskin, $ cd /vagrant/production. Lägg till allt till git genom att köra $ git add * sedan $ git commit -m "lägg till cron-konfigurationerna" och slutligen $ git push. Navigera nu till $ cd /etc/puppetlabs/code/environments/production/ och $ sudo git pull

Om vi ​​nu kontrollerar manifestmappen i den här katalogen, bör du se puppet_exec.pp skapad som vi precis hade definierat.

Om vi ​​nu kör $ sudo puppet tillämpa manifests/ och kontrollera om filerna exec-puppet har skapats $ cat /usr/local/bin/exec-puppet

Innehållet i den här filen bör vara 

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

Vid det här laget har vi sett hur vi kan dra och driva ändringar i vår huvudmaskin som bör tillämpas på alla andra noder. Om vi ​​kör $ sudo crontab -l, markeras några viktiga varningar på exec-puppet-filen som skapats.

# 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

Konfigurera maskinerna

Låt oss säga att vår lösdrivarfil ser ut som

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 det här fallet har vi dockmaskinen där vi har gjort våra konfigurationer och sedan db-maskinen. Nu ska vi automatisera maskinen så att närhelst db-maskinen startas, har den marionett redan installerad och cron-filen redan tillgänglig för att dra manifesten och applicera dem därefter. Du måste strukturera om innehållet i db-maskinen så att det blir som följer

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

Fram till detta skede bör strukturen för din dockkatalog vara ungefär så här

Om du nu kör db-maskinen med kommandot $ vagrant up db, kommer några av resurserna att installeras och skriptet vi just definierade kan hittas i katalogen produktion/manifest. Det är dock tillrådligt att använda marionettmästaren som är begränsad till endast 10 noder för gratisversionen, annars måste du prenumerera på en plan. Puppet master erbjuder fler funktioner och distribuerar manifest till flera noder, rapporteringsloggar och mer kontroll på noderna.

Mongodb Puppet Module

Denna modul används i installationen av MongoDB, hantering av mongod-serverinstallation, konfiguration av mongod-demonen och hantering av Ops Manager-installationer förutom MongoDB-mms-demonen.

Slutsats

I nästa blogg kommer vi att visa dig hur du distribuerar en MongoDB Replica Set och Shards med Puppet.


  1. Är redis-operationer på datastrukturer trådsäkra

  2. MongoDB Aggregation:Räknar distinkta fält

  3. Rails Redis inställning av maxmemory och maxmemory-policy

  4. Mongoose returnerar alltid en tom array NodeJS