Zoeken…


Invoering

In deze documentatie wordt beschreven hoe u een Mongo-replicaset met drie knooppunten bouwt met Docker Image en automatisch beschikbaar stelt met Chef.

Build Step

Stappen:

  1. Genereer een Base 64-sleutelbestand voor Mongo-knooppuntverificatie. Plaats dit bestand in chef data_bags

  2. Ga naar chef suppermarket en download docker kookboek. Genereer een aangepast kookboek (bijv. Custom_mongo) en voeg afhankelijk 'docker', '~> 2.0' toe aan de metadata van uw kookboek.rb

  3. Maak attributen en recepten in uw eigen kookboek

  4. Initialiseer Mongo om Rep Set cluster te vormen

Stap 1: maak een sleutelbestand aan

maak data_bag genaamd mongo-keyfile en item genaamd keyfile. Dit staat in de directory data_bags in chef. De inhoud van het item is zoals hieronder

openssl rand -base64 756 > <path-to-keyfile>

hoofdbestand iteminhoud

{
  "id": "keyfile",
  "comment": "Mongo Repset keyfile",
  "key-file": "generated base 64 key above"
}

Stap 2: Download docker kookboek van chef avondmaal markt en maak vervolgens custom_mongo kookboek

knife cookbook site download docker 
knife cookbook create custom_mongo

in metadat.rb van custom_mongo add

depends          'docker', '~> 2.0'

Stap 3: maak een kenmerk en recept

attributen

default['custom_mongo']['mongo_keyfile'] = '/data/keyfile' 
default['custom_mongo']['mongo_datadir'] = '/data/db'
default['custom_mongo']['mongo_datapath'] = '/data'
default['custom_mongo']['keyfilename'] = 'mongodb-keyfile'

Recept

#
# Cookbook Name:: custom_mongo
# Recipe:: default
#
# Copyright 2017, Innocent Anigbo
#
# All rights reserved - Do Not Redistribute
#

data_path = "#{node['custom_mongo']['mongo_datapath']}"
data_dir = "#{node['custom_mongo']['mongo_datadir']}"
key_dir = "#{node['custom_mongo']['mongo_keyfile']}"
keyfile_content = data_bag_item('mongo-keyfile', 'keyfile')
keyfile_name = "#{node['custom_mongo']['keyfilename']}"

#chown of keyfile to docker user
execute 'assign-user' do
 command "chown 999 #{key_dir}/#{keyfile_name}"
 action :nothing
end

#Declaration to create Mongo data DIR and Keyfile DIR
%W[ #{data_path} #{data_dir} #{key_dir} ].each do |path|
directory path do
  mode '0755'
  end
end

#declaration to copy keyfile from data_bag to keyfile DIR on your mongo server
file "#{key_dir}/#{keyfile_name}" do
  content keyfile_content['key-file']
  group 'root'
  mode '0400'
  notifies :run, 'execute[assign-user]', :immediately
end

#Install docker
docker_service 'default' do
  action [:create, :start]
end

#Install mongo 3.4.2
docker_image 'mongo' do
  tag '3.4.2'
  action :pull
end

Maak een rol genaamd mongo-role in de rollendirectory

{
  "name": "mongo-role",
  "description": "mongo DB Role",
  "run_list": [
    "recipe[custom_mongo]"
  ]
}

Voeg de bovenstaande rol toe aan de lijst met drie mongoknopen

knife node run_list add FQDN_of_node_01 'role[mongo-role]'
knife node run_list add FQDN_of_node_02 'role[mongo-role]'
knife node run_list add FQDN_of_node_03 'role[mongo-role]'

Stap 4: Initialiseer de Mongo met drie knooppunten om repset te vormen

Ik ga ervan uit dat de bovenstaande rol al op alle drie Mongo-knooppunten is toegepast. Alleen op knooppunt 01, start Mongo met --auth om authenticatie in te schakelen

docker run --name mongo -v /data/db:/data/db -v /data/keyfile:/opt/keyfile --hostname="mongo-01.example.com" -p 27017:27017 -d mongo:3.4.2 --keyFile /opt/keyfile/mongodb-keyfile --auth

Krijg toegang tot de interactieve shell van de actieve docker-container op knooppunt 01 en maak een admin-gebruiker

docker exec -it mongo /bin/sh
    mongo
    use admin
    db.createUser( {
         user: "admin-user",
         pwd: "password",
         roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
       });

Maak rootgebruiker

db.createUser( {
         user: "RootAdmin",
         pwd: "password",
         roles: [ { role: "root", db: "admin" } ]
       });

Stop en verwijder de Docker-container die hierboven op knooppunt 01 is gemaakt. Dit heeft geen invloed op de gegevens en het sleutelbestand in de host DIR. Na het verwijderen start Mongo opnieuw op knooppunt 01 maar dit keer met met repset vlag

docker rm -fv mongo
docker run --name mongo-uat -v /data/db:/data/db -v /data/keyfile:/opt/keyfile --hostname="mongo-01.example.com" -p 27017:27017 -d mongo:3.4.2 --keyFile /opt/keyfile/mongodb-keyfile --replSet "rs0"

start nu mongo op Node 02 en 03 met de rep set vlag

docker run --name mongo -v /data/db:/data/db -v /data/keyfile:/opt/keyfile --hostname="mongo-02.example.com" -p 27017:27017 -d mongo:3.4.2 --keyFile /opt/keyfile/mongodb-keyfile --replSet "rs0"
docker run --name mongo -v /data/db:/data/db -v /data/keyfile:/opt/keyfile --hostname="mongo-03.example.com" -p 27017:27017 -d mongo:3.4.2 --keyFile /opt/keyfile/mongodb-keyfile --replSet "rs0"

Verifieer de rootgebruiker op knooppunt 01 en start de replicaset

use admin
db.auth("RootAdmin", "password");
rs.initiate()

Voeg op knoop 01 knooppunt 2 en 3 toe aan de Replica Set om repset0 cluster te vormen

rs.add("mongo-02.example.com")
rs.add("mongo-03.example.com")

testen

Voer db.printSlaveReplicationInfo () uit en bekijk SyncedTo en Behind the primary time. De laatste moet 0 sec zijn zoals hieronder

uitgang

 rs0:PRIMARY> db.printSlaveReplicationInfo()
    source: mongo-02.example.com:27017
            syncedTo: Mon Mar 27 2017 15:01:04 GMT+0000 (UTC)
            0 secs (0 hrs) behind the primary
    source: mongo-03.example.com:27017
            syncedTo: Mon Mar 27 2017 15:01:04 GMT+0000 (UTC)
            0 secs (0 hrs) behind the primary

Ik hoop dat dit iemand helpt



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow