2012-06-22 5 views
5

Ich versuche, mongodb auf einer NUMA-Maschine als Daemon gestartet zu bekommen. Wenn ich renneStart mongodb über numactl als Daemon

numactl --interleave=all mongod & 

Mongo startet und läuft korrekt, aber die gesamte Ausgabe wird noch angezeigt. (ZB Fr 22. Juni 00.10.29 [initandlisten] Verbindung von 127.0.1.1:51837 akzeptiert)

Allerdings, wenn ich Mongo auf seine eigene (wie unten) starten, kann es (Scheitholz unten):

service mongodb start 

ich folgend in den Protokollen

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 

ich weiß nicht, wie admin.ns ein Berechtigungsproblem haben könnte, während ich als root renne oder warum gewickelt, wenn sie in numactl beginnt es nach oben ok . Im Idealfall würde Ich mag numactl im start_server() Funktion verwenden, etwa so:

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 
} 

Unterm Strich, wie kann ich Mongo bekommen als Daemon auf einer NUMA-Maschine zu starten?

+0

Siehe unten http://unix.stackexchange.com/questions/ 187474 /, die einige Änderungen des MongoDB-Pakets in den letzten Jahren berücksichtigt. – JdeBP

Antwort

5

mein Problem gibt eine Kombination von numa und Berechtigungen war stellt sich heraus. Danke, @Mark für die Hilfe. So starten mongodb als Daemon auf einem NUMA-Setup, ersetzen Sie die start_server() Funktion in /etc/init.d/mongodb mit den folgenden:

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 ' Ich betreibe kein NUMA-System AFAIK, so dass dies für das OP off-topic sein kann, aber falls es für irgendjemanden nützlich ist ... zumindest für Ubuntu, den Besitz aller Dateien im MongoDB-Datenverzeichnis (auf Ubuntu das Standard-Datenverzeichnis) (/ var/lib/mongodb) sollte mongodb: nogroup sein Irgendwie wurde meins auf root gesetzt: root (wahrscheinlich, weil ich mongod manuell gestartet habe, um etwas zu testen), den Besitz ändern 'sudo start mongodb' (und' sudo service start mongodb ') funktioniert wieder korrekt –

+0

Also, das war der Befehl, der es für mich reparierte:' sudo chown -R mongodb: nogroup/var/lib/mongodb/* '. Beachten Sie, dass/var/lib/mongodb die Standardeinstellung von Ubuntu ist möglicherweise nicht die Einstellung für andere Distributionen, MongoDBs eigene Standarddaten dir s/Daten/db. –

3

Ich nehme an, Sie kennen die üblichen Warnungen (http://www.mongodb.org/display/DOCS/NUMA) über 'mongo & numa', also werde ich nicht über sie weitermachen.

Hier ist eine Beispiel-Upstart-Konfigurationsdatei für mongodb mit numa - https://gist.github.com/1364716.

Basierend auf diesen Google Group thread wurden die folgenden Zeilen in der start_server Funktion im Init-Skript hinzugefügt und es war erfolgreich -

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

Das ist die Gruppe, wo ich die Funktion start_service in meinem Beitrag gefunden habe, aber ich bekomme die "konnte nicht öffnen/var/lib/mongodb/admin.ns errno: 13 Berechtigung verweigert "Fehler, wenn ich versuche" Dienst mongodb Start "mit den" für numactl "und" starten Sie den Prozess mit dem Wrapper "Code Bits enthalten. – Libby

+0

Cool, gut zu hören, es funktioniert alles :) –

0

die beiden Lösungen, die oben für mich keine Arbeit hat, so folgt hier was mein mongodb Laufen bekam:

die start_server() Funktion in /etc/init.d/mongodb für den Code unten

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

für ubuntu 14

# apt-get -y install numactl 
ersetzen

zu /etc/sysctl.conf Linie vm.zone_reclaim_mode = 0

auch # sysctl -p

# service mongod restart

1

für 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