Mongodb的安装、主从配置、replicaSet配置

前段时间一直在研究mongodb,看了一些书,网上也看了很多资料,其实都是抄来抄去,很多根本都没有经过自己验证,随便往博客上一贴,然后坑死人,这样真的要不得,本人在开始就深受其害,所以这里未免后来人也跟我一样走这些弯路,自己就花点时间把自己的一些实践操作整理了下,写了这篇文章。

文章很简单,主要还是讲基本的配置,关键是配置的时候要细心,这里没有讲到原理性的东西,毕竟篇幅有限,所以如果大家在配置过程中有什么疑点都可以和我交流。希望大家多多支持。

还有,我工作很忙的,写篇帖子也不容易,大家觉得写得有用,给个回复,表示下支持,也算给点动力啦,呵呵。

一.Mongodb的安装

环境:linux 64bit

版本:2.0.1

位置:/opt/mongodb

安装步骤:

tar –zxvf mongodb-linux-x86_64-2.0.1.tar –C /opt/mongodb

mkdir /opt/mongodb/data

touch /opt/mongodb/logs

安装是很简单的,关键是下面的启动的配置。启动配置有三种情况,分别是正常的单主机启动,主从启动,副本集启动三种方式。

1. 单主机启动方式

启动

cd /opt/mongodb/bin

/opt/mongodb/bin/mongod –f mongodb.conf

#mongodb.conf是自定义的启动配置文件,其中参数auth表明需要认证才能登录,内容如下:

#start as daemon and need authentication

port=27017

fork=true

dbpath=/opt/mongodb/data/

logpath=/opt/mongodb/logs

auth=true

设置开机自动启动(可选)

echo “/opt/mongodb/bin/mongod –f /opt/mongodb/bin/mongodb.conf” >> /etc/rc.local

设置密码

#连接mongodb

cd /opt/mongodb/bin

./mongo

#默认进入到mongodb默认的test库

#为数据库设置用户名密码

#首先切换到admin库,先建立一个管理员账号

> use admin

> db.addUser(“root”,”root”);

#切换到test库

use test

#为test库添加用户名和密码

> db.addUser(“testUser”,”123456″);

#注:若此时显示

Tue May 22 16:16:29 uncaught exception: error {

“$err” : “unauthorized db:test lock type:-1 client:127.0.0.1″,

“code” : 10057

}

说明设置密码已生效,此时要先转到admin库,输入认证再转回到test库设置用户名密码,如下:

use admin

db.auth(“root”,”root”);

use test

#下次再连接mongodb时需要使用如下方式:

./mongo –u testUser –p 123456

#删除用户

Db.system.users.remove({“user”:”testUser”});

#注:mongodb的用户名和密码都是针对每一个库的,所以不同的库可以设置不同的用户名和密码。

2. 主从方式启动

实际上现在这种方式已经不推荐使用了,推荐使用的是replicaset,下面会讲到

假设已经将mongodb安装在了两台主机上ip分别为192.168.0.1和192.168.0.2上,下面是启动配置

启动master(192.168.0.1)

cd /opt/mongodb/

./bin/mongod –dbpath=/opt/mongodb/data –logpath=/opt/mongodb/logs

–master –oplogSize 64 –logappend –port=27017 –fork

启动slave(192.168.0.2)

cd /opt/mongodb/

./bin/mongod –dbpath=/opt/mongodb/data –logpath=/opt/mongodb/logs

–slave –source 192.168.0.1 –only test –slavedelay 10

–logappend –port=27017 –fork

这样配置就完成了,当然也可以将这些启动参数像前面一样写在配置文件中,启动时使用配置文件启动。

配置完成后可以测试一下,如下:

在主机器上添加数据

cd /opt/mongodb/

./bin/mongo

db.foo.save({“id”:123,”name”:gongyong});

成功的话可以在从服务器看到数据:

cd /opt/mongodb/

./bin/mongo

db.foo.find({“id”:123})

3. replcaSet的配置

我们假设有三台服务器,分别已经安装好了mongodb,有如下三段配置

#10.127.65.92上的配置

logpath=/opt/mongodb/logs

dbpath=/opt/mongodb/data/

port=27017

fork=true

logappend=true

replSet=snsgame/10.127.65.95:27017

 

#10.127.65.95上的配置

logpath=/opt/mongodb/logs

dbpath=/opt/mongodb/data/

port=27017

fork=true

logappend=true

replSet=snsgame/10.127.65.92:27017

 

#10.11.154.91上的配置

logpath=/opt/mongodb/logs

dbpath=/opt/mongodb/data/

port=27017

fork=true

logappend=true

replSet=snsgame/10.127.65.92:27017,10.127.65.95:27017

分别将上面三段配置复制后放到每台mongodb的某个位置(推荐bin目录),三台服务器分别使用上面的配置启动后,要进行初始化

首先连接上65.92这台mongo

./mongo -port 27017

这样就连接上了mongodb的默认库test,然后输入如下指令:

> config_rs1={_id:’snsgame’,members:[

...{_id:0,host:'10.127.65.92:27017',priority:10},

...{_id:1,host:'10.127.65.95:27017',priority:9},

...{_id:2,host:'10.11.154.91:27017',priority:9}]

…}

> rs.initiate(config_rs1);

回车后出现下面的提示:

{

“info”:”Config now saved locallly. should come online in about a minute.”,

” ok”:1

}

说明初始化成功,注意只需要在其中任何一台上初始化就可以

 

运行如下指令查看是否成功

rs.status()

然后退出再重新连接,发现光标变成下面这种就对了:

rs1:PRIMARY

配置完成后可以进行秘密和用户名的设置,设置方式前面已经提到,需要注意的是,每台mongodb都需要用同样的方式设置用户名和秘密。

到这里,mongodb的安装,主从,副本集的配置就基本完成,再往后还有mongodb的集群分片的搭建,在另一篇文章里会详细说明。

附:各启动参数的说明

参数解释: –dbpath 数据库路径(数据文件)

–logpath 日志文件路径

–master 指定为主机器

–slave 指定为从机器

–source 指定主机器的IP地址

–pologSize 命令行参数(与–master一同使用)配置用于存储给从节点可用的更新信息占用的磁盘空间(M为单位),如果不指定这个参数,默认大小为当前可用磁盘空间的5%(64位机器最小值为1G,32位机器为50M)。

–logappend 日志文件末尾添加

–port 启用端口号

–fork 在后台运行

–only 指定只复制哪一个数据库

–slavedelay 指从复制检测的时间间隔

–auth 是否需要验证权限登录(用户名和密码)

-h [ --help ] show this usage information

–version show version information

-f [ --config ] arg configuration file specifying additional options

–port arg specify port number

–bind_ip arg local ip address to bind listener – all local ips

bound by default

-v [ --verbose ] be more verbose (include multiple times for more

verbosity e.g. -vvvvv)

–dbpath arg (=/data/db/) directory for datafiles 指定数据存放目录

–quiet quieter output 静默模式

–logpath arg file to send all output to instead of stdout 指定日志存放目录

–logappend appnd to logpath instead of over-writing 指定日志是以追加还是以覆盖的方式写入日志文件

–fork fork server process 以创建子进程的方式运行

–cpu periodically show cpu and iowait utilization 周期性的显示cpu和io的使用情况

–noauth run without security 无认证模式运行

–auth run with security 认证模式运行

–objcheck inspect client data for validity on receipt 检查客户端输入数据的有效性检查

–quota enable db quota management 开始数据库配额的管理

–quotaFiles arg number of files allower per db, requires –quota 规定每个数据库允许的文件数

–appsrvpath arg root directory for the babble app server

–nocursors diagnostic/debugging option 调试诊断选项

–nohints ignore query hints 忽略查询命中率

–nohttpinterface disable http interface 关闭http接口,默认是28017

–noscripting disable scripting engine 关闭脚本引擎

–noprealloc disable data file preallocation 关闭数据库文件大小预分配

–smallfiles use a smaller default file size 使用较小的默认文件大小

–nssize arg (=16) .ns file size (in MB) for new databases 新数据库ns文件的默认大小

–diaglog arg 0=off 1=W 2=R 3=both 7=W+some reads 提供的方式,是只读,只写,还是读写都行,还是主要写+部分的读模式

–sysinfo print some diagnostic system information 打印系统诊断信息

–upgrade upgrade db if needed 如果需要就更新数据库

–repair run repair on all dbs 修复所有的数据库

–notablescan do not allow table scans 不运行表扫描

–syncdelay arg (=60) seconds between disk syncs (0 for never) 系统同步刷新磁盘的时间,默认是60s

Replication options:

–master master mode 主复制模式

–slave slave mode 从复制模式

–source arg when slave: specify master as <server:port> 当为从时,指定主的地址和端口

–only arg when slave: specify a single database to replicate 当为从时,指定需要从主复制的单一库

–pairwith arg address of server to pair with

–arbiter arg address of arbiter server 仲裁服务器,在主主中和pair中用到

–autoresync automatically resync if slave data is stale 自动同步从的数据

–oplogSize arg size limit (in MB) for op log 指定操作日志的大小

–opIdMem arg size limit (in bytes) for in memory storage of op ids指定存储操作日志的内存大小

Sharding options:

–configsvr declare this is a config db of a cluster 指定shard中的配置服务器

–shardsvr declare this is a shard db of a cluster 指定shard服务器

转自:http://www.olinux.org.cn/mysql/365.html