从来不认为任何一门技术简单,尤其对于初次接触者;也许是因为开源,MongoDB不像Oracle数据库那么规范化,都有对应的详细的操作文档,按照文档来,就能达到目的,我觉得MongoDB在这方面差很多。下面,我以Oracle的安装思路总结下MongoDB的安装过程。
1、创建mongodb的管理用户
注意:有必要强调的是,LINUX版本最好是6.4以上,在REDHAT5.5上,我尝试安装,最后要求GLIBC版本最低是2.10,要升级GLIBC,风险很大。
[root@mongo ~]# uname -a
Linux mongo 2.6.32-358.el6.x86_64 #1 SMP
Tue Jan 29 11:47:41 EST 2013 x86_64 x86_64 x86_64 GNU/Linux
[root@mongo ~]#
[root@mongo ~]#useradd -u 500 mongo
[root@mongo
~]#passwd mongo
2、创建mongodb的安装目录
[root@mongo ~]# cd /opt/mongo/
[root@mongo ~]#chown -R mongo:mongo
/opt/mongo
[root@mongo ~]#chmod -R 775 /opt/mongo
[mongo@mongo mongo]$ ls
soft
[mongo@mongo mongo]$ mkdir data
[mongo@mongo mongo]$ ls
data
soft
[mongo@mongo mongo]$ mkdir logs
[mongo@mongo mongo]$ ls
data
logs soft
[mongo@mongo mongo]$ ls -l
total 12
drwxrwxr-x. 2 mongo mongo 4096 Jun 11 01:08
data #MongoDB的数据文件存放目录
drwxrwxr-x. 2 mongo mongo 4096 Jun 11 01:08
logs #MongoDB的日志文件存放目录,类似ORACLE的ALERT日志文件
drwxrwxr-x.
2 mongo mongo 4096 Jun 11 01:08 soft #MongoDB的软件安装目录
3、mongodb管理用户登录服务器,上传安装介质并解压
注意:这里需要强调,MongoDB的安装版本必须对应特定的操作系统平台及版本,这里我用
mongodb-linux-x86_64-rhel62-3.2.7.tgz
[mongo@mongo ~]$ cd /opt/mongo/
[mongo@mongo mongo]$ ls
mongodb-linux-x86_64-rhel62-3.2.7.tgz
[mongo@mongo mongo]$ tar -xvf
mongodb-linux-x86_64-rhel62-3.2.7.tgz
mongodb-linux-x86_64-rhel62-3.2.7/README
mongodb-linux-x86_64-rhel62-3.2.7/THIRD-PARTY-NOTICES
mongodb-linux-x86_64-rhel62-3.2.7/MPL-2
mongodb-linux-x86_64-rhel62-3.2.7/GNU-AGPL-3.0
mongodb-linux-x86_64-rhel62-3.2.7/bin/mongodump
mongodb-linux-x86_64-rhel62-3.2.7/bin/mongorestore
mongodb-linux-x86_64-rhel62-3.2.7/bin/mongoexport
mongodb-linux-x86_64-rhel62-3.2.7/bin/mongoimport
mongodb-linux-x86_64-rhel62-3.2.7/bin/mongostat
mongodb-linux-x86_64-rhel62-3.2.7/bin/mongotop
mongodb-linux-x86_64-rhel62-3.2.7/bin/bsondump
mongodb-linux-x86_64-rhel62-3.2.7/bin/mongofiles
mongodb-linux-x86_64-rhel62-3.2.7/bin/mongooplog
mongodb-linux-x86_64-rhel62-3.2.7/bin/mongoperf
mongodb-linux-x86_64-rhel62-3.2.7/bin/mongod
mongodb-linux-x86_64-rhel62-3.2.7/bin/mongos
mongodb-linux-x86_64-rhel62-3.2.7/bin/mongo
[mongo@mongo
~]$mv mongodb-linux-x86_64-rhel62-3.2.7 soft
4、修改管理用户下的环境变量
[mongo@mongo ~]$ cat .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
.
~/.bashrc
fi
# User specific environment and startup
programs
PATH=$PATH:$HOME/bin
export PATH
export PATH=$PATH:/opt/mongo/soft/bin
export MONGO_BASE=/opt/mongo
export MONGO_DATA=/opt/mongo/data
export
MONGO_LOGS=/opt/mongo/logs
5、检查mongo对glibc的要求
注意:这里要求GLIBC版本号必须大于等于2.10
[root@mongo ~]# rpm -qi glibc
Name
: glibc
Relocations: (not relocatable)
Version
: 2.12 Vendor: Red Hat,
Inc.
Release
: 1.107.el6
Build Date: Tue 20 Nov 2012 08:22:45 PM PST
Install Date: Sat 11 Jun 2016 08:41:30 AM
PDT Build Host:
x86-023.build.eng.bos.redhat.com
Group
: System Environment/Libraries
Source RPM: glibc-2.12-1.107.el6.src.rpm
Size
: 12947270
License: LGPLv2+ and LGPLv2+ with exceptions and GPLv2+
Signature
: RSA/8, Tue 29 Jan 2013 07:00:11 AM PST, Key ID 199e2f91fd431d51
Packager
: Red Hat, Inc.
URL
: http://sources.redhat.com/glibc/
Summary
: The GNU libc libraries
Description :
The glibc package contains standard
libraries which are used by
multiple programs on the system. In order
to save disk space and
memory, as well as to make upgrading
easier, common system code is
kept in one place and shared between
programs. This particular package
contains the most important sets of shared
libraries: the standard C
library and the standard math library.
Without these two libraries, a
Linux
system will not function.
6、解决libssl.so.10问题
通过mongod的可用性发现
libssl.so.10问题,此问题不解决,MongoDB无法启动
[mongo@mongo ~]$ mongod --help
mongod:
error while
loading shared libraries: libssl.so.10: cannot open shared object
file: No such file or director
解决libssl.so.10问题,使用root建立软链接即可
[root@mongo lib]# pwd
/usr/lib
[root@mongo lib]# ls -l libss*
-rwxr-xr-x 1 root root 205052 Jul 20 2009 libssl3.so
-rw-r--r-- 1 root root 448536 Sep 4 2009
libssl.a
lrwxrwxrwx 1 root root 26 Feb 18
2014 libssl.so -> ../../lib/libssl.so.0.9.8e
[root@mongo lib64]# pwd
/lib64
[root@mongo lib64]# ln -s
/lib64/libssl.so.0.9.8e /usr/lib/libssl.so.10
[root@mongo lib]# ls -l libss*
-rwxr-xr-x 1 root root 205052 Jul 20 2009 libssl3.so
-rw-r--r-- 1 root root 448536 Sep 4 2009
libssl.a
lrwxrwxrwx 1 root root 26 Feb 18
2014 libssl.so -> ../../lib/libssl.so.0.9.8e
lrwxrwxrwx
1 root root 23 Jun 11 11:36
libssl.so.10 ->
/lib64/libssl.so.0.9.8e
7、解决libcrypto.so.10问题
通过mongod的可用性发现libcrypto.so.10问题,此问题不解决,MongoDB无法启动
解决libcrypto.so.10问题,使用root建立软链接即可
[root@mongo lib]# pwd
/usr/lib
[root@mongo lib]# ls -l libcryp*
-rw-r--r-- 1 root root 47750 Sep
4 2009 libcrypt.a
-rw-r--r-- 1 root root 2416230 Sep 4 2009
libcrypto.a
lrwxrwxrwx 1 root root 29 Feb 18
2014 libcrypto.so -> ../../lib/libcrypto.so.0.9.8e
lrwxrwxrwx 1 root root 22 Feb 18
2014 libcryptsetup.so.0 -> libcryptsetup.so.0.0.0
-rwxr-xr-x 1 root root 51276 Jul
2 2009 libcryptsetup.so.0.0.0
lrwxrwxrwx 1 root root 23 Feb 18
2014 libcrypt.so -> ../../lib/libcrypt.so.1
[root@mongo lib64]# pwd
/lib64
[root@mongo lib64]# ln -s
/lib64/libcrypto.so.0.9.8e /usr/lib/libcrypto.so.10
[root@mongo lib]# ls -l libcryp*
-rw-r--r-- 1 root root 47750 Sep
4 2009 libcrypt.a
-rw-r--r-- 1 root root 2416230 Sep 4 2009
libcrypto.a
lrwxrwxrwx 1 root root 29
Feb 18 2014 libcrypto.so ->
../../lib/libcrypto.so.0.9.8e
lrwxrwxrwx 1 root root 26 Jun 11 11:43 libcrypto.so.10 ->
/lib64/libcrypto.so.0.9.8e
lrwxrwxrwx 1 root root 22 Feb 18
2014 libcryptsetup.so.0 -> libcryptsetup.so.0.0.0
-rwxr-xr-x 1 root root 51276 Jul
2 2009 libcryptsetup.so.0.0.0
lrwxrwxrwx
1 root root 23 Feb 18 2014 libcrypt.so ->
../../lib/libcrypt.so.1
8、测通MongoDB的mongod可用性
[mongo@mongo ~]$ mongod --help
Options:
General options:
-h
[ --help ] show
this usage information
--version
show version information
-f
[ --config ] arg
configuration file specifying
additional options
-v
[ --verbose ] [=arg(=v)] be
more verbose (include multiple times
for
more verbosity e.g. -vvvvv)
--quiet
quieter output
--port arg
specify port number - 27017 by default
--bind_ip arg
comma separated list of ip addresses to
listen
on - all local ips by default
--ipv6
enable IPv6 support (disabled by
default)
--maxConns arg
max number of simultaneous connections
-
1000000 by default
--logpath arg
log file to send write to instead of
stdout
- has to be a file, not
directory
--syslog
log to system's syslog facility instead
of file or stdout
--syslogFacility arg
syslog facility used for mongodb syslog
message
--logappend
append to logpath instead of
over-writing
--logRotate arg
set the log rotation behavior
(rename|reopen)
--timeStampFormat arg
Desired format for timestamps in log
messages. One of ctime, iso8601-utc or
iso8601-local
--pidfilepath arg
full path to pidfile (if not set, no
pidfile
is created)
--keyFile arg
private key for cluster authentication
--noauth
run without security
--setParameter arg
Set a configurable parameter
--httpinterface enable http interface
--clusterAuthMode arg
Authentication mode used for cluster
authentication. Alternatives are
(keyFile|sendKeyFile|sendX509|x509)
--nounixsocket
disable listening on unix sockets
--unixSocketPrefix arg
alternative directory for UNIX domain
sockets
(defaults to /tmp)
--filePermissions arg permissions to set on UNIX domain
socket
file - 0700 by default
--fork
fork server process
--auth
run with security
--jsonp allow JSONP access via http
(has
security implications)
--rest
turn on simple rest api
--slowms arg (=100)
value of slow for profile and console
log
--profile arg
0=off 1=slow, 2=all
--cpu
periodically show cpu and iowait
utilization
--sysinfo
print some diagnostic system
information
--noIndexBuildRetry
don't retry any index builds that were
interrupted by shutdown
--noscripting
disable scripting engine
--notablescan
do not allow table scans
--shutdown
kill a running server (for init
scripts)
Replication options:
--oplogSize arg
size to use (in MB) for replication op
log.
default is 5% of disk space (i.e.
large
is good)
Master/slave options (old; use replica sets
instead):
--master
master mode
--slave
slave mode
--source arg
when slave: specify master as
--only arg
when slave: specify a single database
to
replicate
--slavedelay arg
specify delay (in seconds) to be used
when applying master ops to slave
--autoresync
automatically resync if slave data is
stale
Replica set options:
--replSet arg
arg is [/<optionalseedhostlist </optionalseedhostlist<>
>]
--replIndexPrefetch arg
specify index prefetching behavior (if
secondary) [none|_id_only|all]
--enableMajorityReadConcern
enables majority readConcern
Sharding options:
--configsvr
declare this is a config db of a
cluster; default port 27019; default
dir /data/configdb
--configsvrMode arg
Controls what config server protocol is
in use.
When set to "sccc" keeps server
in
legacy SyncClusterConnection mode
even
when the service is running as a
replSet
--shardsvr
declare this is a shard db of a
cluster; default port 27018
Storage options:
--storageEngine arg
what storage engine to use - defaults
to
wiredTiger if no data files present
--dbpath arg
directory for datafiles - defaults to
/data/db
--directoryperdb
each database will be stored in a
separate directory
--noprealloc
disable data file preallocation -
will
often
hurt performance
--nssize arg (=16)
.ns file size (in MB) for new databases
--quota
limits each database to a certain
number
of files (8 default)
--quotaFiles arg
number of files allowed per db, implies
--quota
--smallfiles
use a smaller default file size
--syncdelay arg (=60)
seconds between disk syncs (0=never,
but not
recommended)
--upgrade
upgrade db if needed
--repair
run repair on all dbs
--repairpath arg
root directory for repair files -
defaults to dbpath
--journal
enable journaling
--nojournal disable journaling
(journaling is on by
default
for 64 bit)
--journalOptions arg
journal diagnostic options
--journalCommitInterval arg
how often to group/batch commit (ms)
WiredTiger options:
--wiredTigerCacheSizeGB arg
maximum amount of memory to allocate
for
cache; defaults to 1/2 of physical
RAM
--wiredTigerStatisticsLogDelaySecs arg (=0)
seconds
to wait between each write to a
statistics file in the dbpath; 0 means
do not
log statistics
--wiredTigerJournalCompressor arg (=snappy)
use a
compressor for log records
[none|snappy|zlib]
--wiredTigerDirectoryForIndexes
Put indexes and data in different
directories
--wiredTigerCollectionBlockCompressor arg (=snappy)
block
compression algorithm for
collection data [none|snappy|zlib]
--wiredTigerIndexPrefixCompression arg (=1)
use
prefix compression on row-store
leaf
pages
9、启动mongodb数据库
[mongo@mongo
~]$ mongod --dbpath=$MONGO_DATA --logpath=$MONGO_LOGS/mongodb.log
--logappend&
[1] 3028
[mongo@mongo
~]$
10、检查mongodb的运行状态[root@mongo mongo]# ps -ef|grep mongo
mongo
3028 1 1 01:31 pts/0 00:00:00 mongod --dbpath=/opt/mongo/data
--logpath=/opt/mongo/logs/mongodb.log --logappend
root 3059
2443 0 01:32 pts/0 00:00:00 grep mongo
[root@mongo mongo]# cd /opt/mongo/logs
[root@mongo logs]# cat mongodb.log
2016-06-11T01:31:19.106-0700 I CONTROL [initandlisten] MongoDB starting : pid=3028 port=27017 dbpath=/opt/mongo/data 64-bit host=mongo
2016-06-11T01:31:19.107-0700 I CONTROL [initandlisten] db version v3.2.7
2016-06-11T01:31:19.107-0700 I CONTROL [initandlisten] git version: 4249c1d2b5999ebbf1fdf3bc0e0e3b3ff5c0aaf2
2016-06-11T01:31:19.107-0700 I CONTROL [initandlisten] allocator: tcmalloc
2016-06-11T01:31:19.107-0700 I CONTROL [initandlisten] modules: none
2016-06-11T01:31:19.107-0700 I CONTROL [initandlisten] build environment:
2016-06-11T01:31:19.107-0700 I CONTROL [initandlisten] distarch: x86_64
2016-06-11T01:31:19.107-0700 I CONTROL [initandlisten] target_arch: x86_64
2016-06-11T01:31:19.107-0700 I CONTROL [initandlisten] options: { storage: { dbPath: "/opt/mongo/data" }, systemLog: { destination: "file", logAppend: true, path: "/opt/mongo/logs/mongodb.log" } }
2016-06-11T01:31:19.139-0700 I STORAGE [initandlisten] wiredtiger_open config: create,cache_size=1G,session_max=20000,eviction=(threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),checkpoint=(wait=60,log_size=2GB),statistics_log=(wait=0),
2016-06-11T01:31:19.186-0700 I CONTROL [initandlisten]
2016-06-11T01:31:19.186-0700 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2016-06-11T01:31:19.186-0700 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2016-06-11T01:31:19.186-0700 I CONTROL [initandlisten]
2016-06-11T01:31:19.186-0700 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2016-06-11T01:31:19.186-0700 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2016-06-11T01:31:19.186-0700 I CONTROL [initandlisten]
2016-06-11T01:31:19.187-0700 I FTDC [initandlisten] Initializing full-time diagnostic data capture with directory '/opt/mongo/data/diagnostic.data'
2016-06-11T01:31:19.187-0700 I NETWORK [HostnameCanonicalizationWorker] Starting hostname canonicalization worker
2016-06-11T01:31:19.194-0700 I NETWORK [initandlisten] waiting for connections on port 27017
[root@mongo ~]# netstat -lanp | grep 27017
tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 3028/mongod
tcp 0 0 127.0.0.1:39769 127.0.0.1:27017 ESTABLISHED 3099/mongo
tcp 0 0 127.0.0.1:27017 127.0.0.1:39769 ESTABLISHED 3028/mongod
unix 2 [ ACC ] STREAM LISTENING 23441 3028/mongod /tmp/mongodb-27017.sock
11、登录MongoDB数据库
[mongo@mongo ~]$ mongo
MongoDB shell version: 3.2.7
connecting to: test
Welcome to the MongoDB shell.
For interactive help, type
"help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
Server has startup warnings:
2016-06-11T01:31:19.186-0700 I CONTROL [initandlisten]
2016-06-11T01:31:19.186-0700 I CONTROL [initandlisten] ** WARNING:
/sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2016-06-11T01:31:19.186-0700 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2016-06-11T01:31:19.186-0700 I CONTROL [initandlisten]
2016-06-11T01:31:19.186-0700 I CONTROL [initandlisten] ** WARNING:
/sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2016-06-11T01:31:19.186-0700 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2016-06-11T01:31:19.186-0700 I CONTROL [initandlisten]
>
登录后,MongoDB要求关闭操作系统的
transparent_hugepage特性(这里可以放在MongoDB安装前,系统调整时执行),需要以root身份执行以下命令:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
[root@mongo transparent_hugepage]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
[root@mongo transparent_hugepage]# echo never > /sys/kernel/mm/transparent_hugepage/defrag
12、重启MongoDB数据库并测试数据库可用性
[mongo@mongo ~]$ mongo
MongoDB shell version: 3.2.7
connecting to: test
Server has startup warnings:
2016-06-13T18:58:21.838-0700 I CONTROL [initandlisten]
2016-06-13T18:58:21.839-0700 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2016-06-13T18:58:21.839-0700 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2016-06-13T18:58:21.839-0700 I CONTROL [initandlisten]
2016-06-13T18:58:21.839-0700 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2016-06-13T18:58:21.839-0700 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2016-06-13T18:58:21.839-0700 I CONTROL [initandlisten]
> use admin
switched to db admin
> db.shutdownServer();
server should be down...
2016-06-13T19:04:21.290-0700 I NETWORK [thread1] trying reconnect to 127.0.0.1:27017 (127.0.0.1) failed
2016-06-13T19:04:21.291-0700 W NETWORK [thread1] Failed to connect to 127.0.0.1:27017, reason: errno:111 Connection refused
2016-06-13T19:04:21.291-0700 I NETWORK [thread1] reconnect 127.0.0.1:27017 (127.0.0.1) failed failed
> exit
bye
[1]+ Done mongod --dbpath=$MONGO_DATA --logpath=$MONGO_LOGS/mongodb.log --logappend
[mongo@mongo ~]$ mongod --dbpath=$MONGO_DATA --logpath=$MONGO_LOGS/mongodb.log --logappend&
[1] 40476
[mongo@mongo ~]$ mongo
MongoDB shell version: 3.2.7
connecting to: test
>
> show db
local
0.000GB
> use zhul
switched to db zhul
> show dbs
local
0.000GB
> db.createCollection("test")
{ "ok" : 1 }
> show dbs
local
0.000GB
zhul 0.000GB
安装成功!