2012-06-22 16 views
5

Estoy tratando de iniciar mongodb en una máquina NUMA como daemon. Cuando ejecutoiniciando mongodb vía numactl como daemon

numactl --interleave=all mongod & 

Mongo arranca y funciona correctamente, pero toda la salida sigue apareciendo. (Por ejemplo, Vie Jun 22 de 12:10:29 [initandlisten] conexión aceptada de 127.0.1.1:51837)

Sin embargo, cuando comienzo mongo por su propia cuenta (como abajo), se produce un error (debajo de los registros):

service mongodb start 

me sale el siguiente en los registros de

Fri Jun 22 12:08:41 [initandlisten] MongoDB starting : pid=3348 port=27017 dbpath=/var/lib/mongodb 64-bit host=beckett 
Fri Jun 22 12:08:41 [initandlisten] 
Fri Jun 22 12:08:41 [initandlisten] ** WARNING: You are running on a NUMA machine. 
Fri Jun 22 12:08:41 [initandlisten] **   We suggest launching mongod like this to avoid performance problems: 
Fri Jun 22 12:08:41 [initandlisten] **    numactl --interleave=all mongod [other options] 
Fri Jun 22 12:08:41 [initandlisten] 
Fri Jun 22 12:08:41 [initandlisten] db version v2.0.6, pdfile version 4.5 
Fri Jun 22 12:08:41 [initandlisten] git version: e1c0cbc25863f6356aa4e31375add7bb49fb05bc 
Fri Jun 22 12:08:41 [initandlisten] build info: Linux ip-10-110-9-236 2.6.21.7-2.ec2.v1.2.fc8xen #1 SMP Fri Nov 20 17:48:28 EST 2009 x86_64 BOOST_LIB_VERSION=1_41 
Fri Jun 22 12:08:41 [initandlisten] options: { auth: "true", command: [ "run" ], config: "/etc/mongodb.conf", dbpath: "/var/lib/mongodb", logappend: "true", logpath: "/var/log/mongodb/mongodb.log" } 
Fri Jun 22 12:08:41 [initandlisten] journal dir=/var/lib/mongodb/journal 
Fri Jun 22 12:08:41 [initandlisten] recover : no journal files present, no recovery needed 
Fri Jun 22 12:08:42 [initandlisten] couldn't open /var/lib/mongodb/admin.ns errno:13 Permission denied 
Fri Jun 22 12:08:42 [initandlisten] error couldn't open file /var/lib/mongodb/admin.ns terminating 
Fri Jun 22 12:08:42 dbexit: 
Fri Jun 22 12:08:42 [initandlisten] shutdown: going to close listening sockets... 
Fri Jun 22 12:08:42 [initandlisten] shutdown: going to flush diaglog... 
Fri Jun 22 12:08:42 [initandlisten] shutdown: going to close sockets... 
Fri Jun 22 12:08:42 [initandlisten] shutdown: waiting for fs preallocator... 
Fri Jun 22 12:08:42 [initandlisten] shutdown: lock for final commit... 
Fri Jun 22 12:08:42 [initandlisten] shutdown: final commit... 
Fri Jun 22 12:08:42 [initandlisten] shutdown: closing all files... 
Fri Jun 22 12:08:42 [initandlisten] closeAllFiles() finished 
Fri Jun 22 12:08:42 [initandlisten] journalCleanup... 
Fri Jun 22 12:08:42 [initandlisten] removeJournalFiles 
Fri Jun 22 12:08:42 [initandlisten] shutdown: removing fs lock... 
Fri Jun 22 12:08:42 dbexit: really exiting now 

no sé cómo admin.ns podrían tener un problema de permisos mientras estoy corriendo como root o por qué cuando se envuelve en numactl se pone en marcha ok . Idealmente, me gustaría utilizar numactl en la función start_server(), así:

start_server(){ 
    /usr/bin/numactl --interleave=all -- \ 
    start-stop-daemon --background --start --quiet --pidfile $PIDFILE \ 
     --make-pidfile --chuid $DAEMONUSER \ 
     --exec $DAEMON -- $DAEMON_OPTS 
    errcode=$? 
    return $errcode 
} 

En pocas palabras, ¿cómo puedo obtener mongo para iniciar como un demonio en una máquina NUMA?

+0

Véase también http://unix.stackexchange.com/questions/ 187474 /, que tiene en cuenta algunos cambios en el paquete MongoDB en años más recientes. – JdeBP

Respuesta

5

Resulta que mi problema era una combinación de problemas de la NUMA y permisos. Gracias, @Mark por la ayuda. Para iniciar mongodb como un demonio en una configuración NUMA, reemplazar la función start_server() en /etc/init.d/mongodb con lo siguiente:

start_server() { 
# check for numactl 
NUMACTL=$(which numactl) 
if [ -n "$NUMACTL" ]; then 
    DAEMON_OPTS="--interleave=all ${DAEMON} ${DAEMON_OPTS}" 
    DAEMON="$NUMACTL" 
fi 

# Start the process using the wrapper 
      /usr/bin/numactl --interleave=all -- \ 
      start-stop-daemon --background --start --quiet --pidfile $PIDFILE \ 
         --make-pidfile --chuid $DAEMONUSER \ 
         --exec $DAEMON -- $DAEMON_OPTS 
      errcode=$? 
     return $errcode 
} 
+0

I ' No estoy ejecutando un sistema AFAIK de NUMA así que esto puede estar fuera del tema para el OP, pero en caso de que sea útil para cualquier persona ... en Ubuntu al menos, la propiedad de todos los archivos en el directorio de datos de MongoDB (en Ubuntu el directorio de datos predeterminado) es/var/lib/mongodb) debería ser mongodb: nogroup. De alguna forma, el mío se estableció en root: root (probablemente porque ejecuté mongod manualmente para probar algo); cambiando la propiedad hecha 'sudo start mongodb' (y' sudo service start mongodb ') funcionan correctamente otra vez. –

+0

Así que este fue el comando que me lo arregló:' sudo chown -R mongodb: nogroup/var/lib/mongodb/* '. Tenga en cuenta que/var/lib/mongodb es la configuración predeterminada de Ubuntu y puede no ser la configuración para otras distribuciones, el propio directorio de datos predeterminado de MongoDB s/data/db. –

3

supongo que usted sabe las advertencias habituales (http://www.mongodb.org/display/DOCS/NUMA) sobre 'mongo & Numa', así que no voy a ir sobre ellos.

Aquí hay un archivo de configuración de inicio de muestra para mongodb con numa - https://gist.github.com/1364716.

En base a esta Google Group thread, se añadieron las siguientes líneas a la función start_server en el guión de inicio y que fue un éxito -

start_server() { 
# check for numactl 
NUMACTL=$(which numactl) 
if [ -n "$NUMACTL" ]; then 
    DAEMON_OPTS="--interleave=all ${DAEMON} ${DAEMON_OPTS}" 
    DAEMON="$NUMACTL" 
fi 

# Start the process using the wrapper 
+0

Ese es el Grupo donde encontré la función start_service en mi publicación, pero obtengo el mensaje "could not open/var/lib/mongodb/admin".ns errno: 13 Permiso denegado "error cuando intento" iniciar mongodb de servicio "con los bits de código" check for numactl "y" start the process using the wrapper "incluidos. – Libby

+0

Genial, es bueno saber que todo funciona :) –

0

las dos soluciones anteriores no hizo ningún trabajo para mí, así que aquí sigue lo que tiene mi mongodb en marcha:

reemplazar la función start_server() en /etc/init.d/mongodb para el código de abajo

start_server() { 
    test -e "$RUNDIR" || install -m 755 -o mongodb -g mongodb -d "$RUNDIR" 

    NUMACTL=$(which numactl) 

    if [ ! "$NUMACTL" ]; then 
     # start original 
     start-stop-daemon --background --start --quiet --pidfile $PIDFILE --make-pidfile --chuid $DAEMONUSER --exec $DAEMON -- $DAEMON_OPTS 
     errcode=$? 
     return $errcode 
    else 
     # Start the process using the wrapper 
     $NUMACTL --interleave=all -- start-stop-daemon --background --start --quiet --pidfile $PIDFILE --make-pidfile --chuid $DAEMONUSER --exec $DAEMON -- $DAEMON_OPTS 
     errcode=$? 
     return $errcode 
    fi 
} 
0

para ubuntu 14

# apt-get -y install numactl 

añadir a /etc/sysctl.conf línea vm.zone_reclaim_mode = 0

# sysctl -p

# service mongod restart

1

para Ubuntu 16,04

[Unit] 
Description=High-performance, schema-free document-oriented database 
After=time-sync.target network.target 

[Service] 
Type=forking 
User=mongod 
Group=mongod 
LimitNOFILE=65000 
PermissionsStartOnly=true 
EnvironmentFile=/etc/default/mongod 
ExecStartPre=/usr/bin/percona-server-mongodb-helper.sh 
ExecStart=/usr/bin/env bash -c "numactl --interleave=all /usr/bin/mongod $OPTIONS > ${STDOUT} 2> ${STDERR}" 
#ExecStart=/usr/bin/env bash -c "/usr/bin/mongod $OPTIONS > ${STDOUT} 2> ${STDERR}" 
PIDFile=/var/run/mongod.pid 

[Install] 
WantedBy=multi-user.target