mongoDB installieren

Seit dieser Woche bietet einen kostenlosen Kurs für Java Entwicklern an: “M101J MongoDB for Java Developers.” Da ich internet-basierte Weiterbildungskurse immer wieder gerne nutze, habe ich mich dort angemeldet. Daher werde ich in den nächsten Wochen bestimmt eifrig damit beschäfigt sein, die Kursinhalte aufzunehmen und die gestellten Aufgaben zu lösen.

Daher stellt sich jetzt wieder einmal die Frage, wie ein Hintergrundprozess für die mongoDB Datenbank korrekt auf meinem OSX Server wie auch auf meinem Notebook installiert wird. Immerhin ist diese Datenbank in den nächsten Wochen ein fester Bestandteil der von mir genutzten Infrastruktur und sollte beständig verfügbar sein.

Die Installation beginnt daher wieder - aus Gründen der Sicherheit - mit dem Anlegen eines neuen technischen Benutzers und einer Benutzergruppe. Ich entscheide mich, nachdem ich die Liste der vorhandenen Gruppen durchgesehen habe, als für die Gruppe 302, die noch nicht vergeben ist. Unter dieser Gruppennummer lege ich nun eine Gruppe _mongodb neu an:

merlin:~ ralf$ sudo dscl
Entering interactive mode... (type "help" for commands)
 > cd /Local/Default/
/Local/Default > ls Groups gid

utmp                             45
wheel                            0
...

/Local/Default > create Groups/_mongodb
/Local/Default > create Groups/_mongodb PrimaryGroupID 302

Nach dem gleichen Verfahren lege ich nun auch einen Benutzeraccount namens _mongodb an.

/Local/Default > ls Users uid

daemon                  1
Guest                   201
nobody                  -2
root                    0
....

/Local/Default > create Users/_mongodb UserShell /bin/bash
/Local/Default > create Users/_mongodb UniqueID 302
/Local/Default > create Users/_mongodb PrimaryGroupID 302
/Local/Default > create Users/_mongodb NFSHomeDirectory /Users/_mongodb
/Local/Default > append Groups/_mongodb GroupMembership _mongodb
/Local/Default > exit

Da nun er Funktionsbenutzer angelegt ist, kann für diesen Nutzer nun das Benutzerverzeichnis erzeugt werden. Aus organisatorischen Gründen lege ich noch ein zweites Verzeichnis auf einer zusätzlichen Festplatte an. Dort werden die eigentlichen Dateien der Datenbank gespeichert.

merlin:~ ralf$ cd /Users/
merlin:Users ralf$ sudo mkdir _mongodb
merlin:Users ralf$ sudo chown _mongodb:_mongodb _mongodb
merlin:Users ralf$ ls -al
total 16
-rw-r--r--@  1 root      admin     6148 12 Jan  2012 .DS_Store
-rw-r--r--   1 root      wheel        0 25 Mai  2011 .localized
drwxr-xr-x   2 _mongodb  _mongodb    68 18 Mai 08:47 _mongodb
drwxr-xr-x+ 53 ralf      admin     1802 12 Mai 18:31 ralf
sh-3.2# 
merlin:Users ralf$ mkdir /Volumes/Server/_mongodb
merlin:Users ralf$ cd /Volumes/Server/_mongodb

In dieses neue Verzeichnis kopiere ich die über 10gen mongoDB Downloads bezogene Version der Datenbank.

merlin:Users ralf$ sudo tar xvz ~ralf/Downloads/mongodb-osx-x86_64-2-1.4.3.tgz

x mongodb-osx-x86_64-2.4.3/README
x mongodb-osx-x86_64-2.4.3/THIRD-PARTY-NOTICES
x mongodb-osx-x86_64-2.4.3/GNU-AGPL-3.0
x mongodb-osx-x86_64-2.4.3/bin/mongodump
x mongodb-osx-x86_64-2.4.3/bin/mongorestore
x mongodb-osx-x86_64-2.4.3/bin/mongoexport
x mongodb-osx-x86_64-2.4.3/bin/mongoimport
x mongodb-osx-x86_64-2.4.3/bin/mongostat
x mongodb-osx-x86_64-2.4.3/bin/mongotop
x mongodb-osx-x86_64-2.4.3/bin/mongooplog
x mongodb-osx-x86_64-2.4.3/bin/mongofiles
x mongodb-osx-x86_64-2.4.3/bin/bsondump
x mongodb-osx-x86_64-2.4.3/bin/mongoperf
x mongodb-osx-x86_64-2.4.3/bin/mongosniff
x mongodb-osx-x86_64-2.4.3/bin/mongod
x mongodb-osx-x86_64-2.4.3/bin/mongos
x mongodb-osx-x86_64-2.4.3/bin/mongo

merlin:Users ralf$ sudo mv mongodb-osx-x86_64-2.4.3/bin .
merlin:Users ralf$ sudo rm -rf mongodb-osx-x86_64-2.4.3/
merlin:Users ralf$ sudo ln -s /Volumes/Server/_mongodb/bin/* /usr/local/bin
merlin:Users ralf$ sudo mkdir data
merlin:Users ralf$ sudo mkdir logs
merlin:Users ralf$ sudo chown -R _mongodb:_mongodb .

Nach diesen Schritten ist die Installation eigentlich abgeschlossen und es muss nun nur noch eine Konfiguration für den launchctl eingerichtet werden:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version="1.0">
<dict>
	<key>Label</key>
	<string>org.mongodb.mongod</string>
	<key>ProgramArguments</key>
	<array>
		<string>/Volumes/Server/_mongodb/bin/mongod</string>
		<string>--dbpath</string>
		<string>/Volumes/Server/_mongodb/data</string>
		<string>--logpath</string>
		<string>/Volumes/Server/_mongodb/logs/mongodb.log</string>
	</array>
	<key>RunAtLoad</key>
	<true/>
	<key>KeepAlive</key>
	<true/>
	<key>WorkingDirectory</key>
	<string>/Volumes/Server/_mongodb</string>
	<key>UserName</key>
	<string>_mongodb</string>
	<key>HardResourceLimits</key>
	<dict>
		<key>NumberOfFiles</key>
		<integer>1024</integer>
	</dict>
</dict>
</plist>

Diese Konfiguration wird dem launchctl übergeben und damit sollte eigentlich der mongod Prozess aktviert sein.

merlin:Users ralf$ sudo cp org.mongodb.mongod.plist /Library/LaunchDaemons/
merlin:Users ralf$ sudo launchctl load  /Library/LaunchDaemons/org.mongodb.mongod.plist 
merlin:Users ralf$ sudo launchctl start org.mongodb.mongod
merlin:Users ralf$ 

Den Hausaufgaben steht damit nun nichts mehr im Wege…

Weitere Artikel: