sql >> データベース >  >> NoSQL >> MongoDB

Puppetを使用したMongoDBのデプロイとメンテナンスのガイド:パート2

    前回のブログでは、Puppetを使用してマシンをセットアップし、MongoDBをインストールして構成する方法を紹介しました。多数のノードまたはマシンを構成するため、パペットマスターが必要です。ただし、この場合は、マニフェストをプッシュしてマシンに適用するgitリポジトリを作成します。

    ローカルのgitリポジトリを作成するには、最初に使用するパス、つまり/opt/を選択します。次に、$sudomkdirリポジトリを実行してgitリポジトリを作成します。コマンド$sudochown vagrant:vagrant repositoryを発行して、rootユーザーにこのディレクトリの内容を変更する権限を取得します。コマンド$cdrepositoryを発行した後、このディレクトリをgitリポジトリとして初期化するには、$ git init --bare --sharedを実行します。このディレクトリに移動すると、次のように表示されます。

    [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

    これはgitリポジトリの基本構造であり、オプション--bareおよび--shareを使用すると、ディレクトリからファイルをプッシュおよびプルできます。

    関係するマシンとこのリモートマスターサーバー間の通信を可能にするシステムをセットアップする必要があります。この場合のシステムはデーモンと呼ばれます。デーモンは、リモートホストからの要求を受け入れて、ファイルをこのリポジトリにプルまたはプッシュします。これを行うには、コマンド$ git daemon --reuseaddr --base-path =/ opt / --export-all --enable =receive-pack

    を発行します。

    ただし、これをバックグラウンドで実行できるファイルを作成することをお勧めします。したがって、コマンドsudo vim / etc / systemd / system/gitdを発行してサービスを設定する必要があります。サービス。新しいファイルにこれらのコンテンツを入力します

    [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

    ファイルを保存し、を押して終了し、:xと入力してを押します。サーバーを起動するには、コマンド$ systemctlstartgitdを実行します。認証には、この場合はvagrantで設定したパスワードを使用します。このようなものが表示されるはずです

    [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

    これで、ルートディレクトリで$ git clone git://198.168.1.100/repository(マシンのネットワークIPでIPアドレスを変更することを忘れないでください)を実行すると、新しく作成されたリポジトリフォルダーが取得されます。 。構成ファイルの電子メールとパスワードのコメントを解除して、資格情報を構成することを忘れないでください。 $ git config --global --editを実行して、このファイルにアクセスします。

    このリポジトリは、すべてのマニフェストと変数の中央サーバーとして機能します。

    環境の設定

    次に、ノードを構成する環境をセットアップする必要があります。まず、vagrantディレクトリに切り替えて、上記と同じコマンドで作成したリポジトリのクローンを作成します。

    $ rm -rmanifest /を実行して、vagrantフォルダーのマニフェストディレクトリを削除します。

    $ mkdir productを使用して新しい本番フォルダーを作成し、$ git clone git://198.168.1.100/repositoryを使用して上記で作成したものと同じリポジトリのクローンを作成します。 (最後のドットを忘れないでください)

    cp -pr / etc / puppetlabs / code / environment / product / *を発行して、puppetlabs本番環境のコンテンツをコピーしてこの本番フォルダに貼り付けます。これで、本番ディレクトリは次のようになります

    [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

    これらの変更をルートリポジトリにプッシュして、実行する必要があります。

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

    git構成が機能しているかどうかをテストするには、このディレクトリで$ sudo rm -r *を実行して、ディレクトリ/ etc / puppetlabs / code / environment /product/のコンテンツを削除してからプルします。ルートユーザーとしてのマスターリポジトリからのファイル、つまり$ git clone git://198.168.1.100/repository。 (最後のドットを忘れないでください)。この場合、コンテンツを含むディレクトリのみがプルされるため、マニフェストとモジュールのフォルダを見逃す可能性があります。これらの操作は、マスターパペットまたはクライアントマシンのいずれかに関連するすべてのマシンで実行できます。したがって、私たちのタスクは、メインサーバーから変更をプルし、マニフェストを使用して変更を適用することです。

    実行マニフェスト

    これは、変更をプルして他のノードに自動的に適用するために作成するスクリプトです。本番環境を使用する必要があるだけでなく、できるだけ多くの環境を追加して、検索するパペットを指定することができます。ルートのproduction/manifestsディレクトリに実行マニフェストをpuppet_exec.ppとして作成し、次の内容を入力します

     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'
    
    }

    ファイルは、パペットマニフェストを実行するために記述されたリソースです。作成するファイルに適切なパスを追加し、実行時に発行されるコマンドをファイルに入力します。

    コマンドは体系的に実行されます。つまり、最初に本番環境に移動し、リポジトリの変更をプルしてから、それらをマシンに適用します。

    マニフェストディレクトリを各ノードに提供し、そこからアプリケーションに向けられたマニフェストを選択できます。

    実行ファイルが実行される期間も設定されます。この場合、1時間ごとに、ファイルを4回実行します。

    これを現在のマシンに適用するには、$ cd / vagrant/productionです。 $ git add *、$ git commit -m「cron構成の追加」、最後に$ git pushを実行して、すべてをgitに追加します。次に、$ cd / etc / puppetlabs / code / environment /Production/および$sudogit pull

    に移動します。

    このディレクトリのmanifestsフォルダを確認すると、定義したとおりに作成されたpuppet_exec.ppが表示されます。

    ここで、$ sudo puppet applymanifests /を実行し、ファイルexec-puppetが作成されているかどうかを確認します$ cat / usr / local / bin / exec-puppet

    このファイルの内容は次のようになります

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

    この時点で、他のすべてのノードに適用する必要があるマスターマシンに変更をプルおよびプッシュする方法を確認しました。 $ sudo crontab -lを実行すると、作成されたexec-puppetファイルでいくつかの重要な警告が強調表示されます。

    # 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
    マシンの構成 私たちのvagrantファイルが次のようになっているとしましょう

    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

    この場合、構成を行っているパペットマシンがあり、次にdbマシンがあります。ここで、dbマシンが起動されるたびに、パペットがすでにインストールされ、cronファイルがマニフェストをプルしてそれに応じて適用できるようにマシンを自動化します。 dbマシンの内容を次のように再構築する必要があります

    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

    この段階まで、パペットディレクトリの構造は次のようになっている必要があります

    ここで、コマンド$ vagrant up dbを使用してdbマシンを実行すると、一部のリソースがインストールされ、定義したスクリプトは、production/manifestsディレクトリにあります。ただし、無料版では10ノードのみに制限されているパペットマスターを使用することをお勧めします。そうしないと、プランにサブスクライブする必要があります。 Puppetマスターは、より多くの機能を提供し、マニフェストを複数のノードに配布し、ログを報告し、ノードをより詳細に制御します。

    MongodbPuppetモジュール

    このモジュールは、MongoDBのインストール、mongodサーバーのインストールの管理、mongodデーモンの構成、MongoDB-mmsデーモン以外のOpsManagerセットアップの管理に使用されます。

    結論

    次のブログでは、Puppetを使用してMongoDBレプリカセットとシャードをデプロイする方法を紹介します。


    1. SpringDataMongoリポジトリ::すべてのリポジトリの問題に共通の共有メソッド

    2. ネストされた例外はredis.clients.jedis.exceptions.JedisConnectionExceptionです:プールからリソースを取得できませんでした

    3. パブ/サブシナリオのRedisとServiceBus

    4. futures.rsとRedisPubSubを使用して、ブロッキング呼び出しのfuturesストリームを実装するにはどうすればよいですか?