Buscar..


Introducción

Esta documentación describe cómo construir un conjunto de réplicas Mongo de tres nodos con Docker Image y el aprovisionamiento automático con Chef.

Paso de compilación

Pasos:

  1. Genere un archivo de claves Base 64 para la autenticación de nodo Mongo. Pon este archivo en chef data_bags

  2. Ve al chef suppermarket y descarga el libro de cocina docker. Genere un libro de cocina personalizado (por ejemplo, custom_mongo) y agregue 'docker', '~> 2.0' a los metadatos.rb de su libro de cocina

  3. Crea una receta y atributos en tu libro de cocina personalizado.

  4. Inicializar Mongo para formar un conjunto de grupos de representantes

Paso 1: Crear archivo de clave

crear una bolsa de datos llamada mongo-keyfile y un elemento llamado keyfile. Esto estará en el directorio data_bags en chef. El contenido del artículo será el siguiente

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

contenido del elemento del archivo clave

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

Paso 2: descargue el libro de cocina docker del chef supper market y luego cree el libro de cocina custom_mongo

knife cookbook site download docker 
knife cookbook create custom_mongo

en metadat.rb de custom_mongo add

depends          'docker', '~> 2.0'

Paso 3: crear atributo y receta

Atributos

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'

Receta

#
# 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

Crear un rol llamado mongo-role en el directorio de roles

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

Agregue el rol anterior a la lista de ejecución de tres nodos mongo

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

Paso 4: Inicializa el Mongo de tres nodos para formar el repset

Supongo que el rol anterior ya se ha aplicado en los tres nodos de Mongo. Solo en el nodo 01, inicie Mongo con --auth para habilitar la autenticación

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

Acceda al shell interactivo de la ejecución del contenedor docker en el nodo 01 y cree un usuario administrador

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

Crear usuario root

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

Detenga y elimine el contenedor Docker creado anteriormente en el nodo 01. Esto no afectará los datos y el archivo de claves en el DIR del host. Después de eliminar, inicie Mongo de nuevo en el nodo 01, pero esta vez con el indicador de repetición

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"

ahora inicie mongo en los nodos 02 y 03 con la marca de configuración de rep

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"

Autentíquese con el usuario root en el Nodo 01 e inicie el conjunto de réplicas

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

En el nodo 01, agregue los Nodos 2 y 3 al conjunto de réplicas para formar el grupo repset0

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

Pruebas

En la ejecución principal db.printSlaveReplicationInfo () y observe la hora sincronizada y sincronizada. El último debe ser 0 segundos como abajo

Salida

 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

Espero que esto ayude a alguien



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow