Docker
Mongo Replica met drie knooppunten instellen met behulp van Docker Image en voorzien met behulp van Chef
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:
Genereer een Base 64-sleutelbestand voor Mongo-knooppuntverificatie. Plaats dit bestand in chef data_bags
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
Maak attributen en recepten in uw eigen kookboek
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