作者:empty 出版社:empty |
mongo安装配置
一、主、从、仲裁环境搭建
1.环境
系统版本:
#cat /etc/issue
CentOS release 6.5 (Final)
系统位数
#uname –a
Linux server142 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
IP和端口:
192.168.192.142:27018
192.168.192.143:27018
192.168.192.144:27018仲裁
2.下载并创建文件夹
下载mongodb-linux-x86_64-2.4.6.tgz,在每台机器上加压,并且
#mkdir data
#mkdir logs
#cd logs
#touch mongodb.log
3.在每台机器解压后的bin下执行命令
142:
./mongod --dbpath=/home/mongodb/mongo/data
--logpath=/home/mongodb/mongo/logs/mongodb.log --port 27018 --replSet
test/192.168.192.143:27018 --maxConns=200 --fork --logappend --nojournal
143:
./mongod --dbpath=/home/mongodb/mongo/data
--logpath=/home/mongodb/mongo/logs/mongodb.log --port 27018 --replSet
test/192.168.192.142:27018 --maxConns=200 --fork --logappend --nojournal
144:
./mongod --dbpath=/home/mongodb/mongo/data
--logpath=/home/mongodb/mongo/logs/mongodb.log --port 27018 --replSet
test/192.168.192.142:27018,192.168.192.143:27018 --fork --logappend --nojuornal
最开始在142执行命令的时候,没有加--nojournal,结果报错:
about to fork child process, waiting until server is ready for connections.
forked process: 5428
all output going to: /home/mongodb/mongo/logs/mongodb.log
ERROR: child process failed, exited with error number 100
解决:
查看日志logs/mongodb.log,发现
步骤:先找到/data下,发现,存在一个mongod.lock文件
#rm –f mongod.lock
删掉lock文件,然后在命令行后面加上—nojournal,重新启动,OK!
4.配置
在143服务器下的../bin下,运行mongodb数据库,注意安装的时候,我们用的不是默认的27017端口,一次,如果直接运行
#./mongo
会提示
看来mongo命令已经默认的连接了27017端口,怎么修改连接的端口呢?
#./mongo –help
懂了!使用
#./mongo -port 27018
就可以连上了。
首先执行
> db.runCommand({ replSetInitiate :{
... _id : test ,
... members :[
... {
... _id :0,
... host : 192.168.192.142:27018
... },
... { _id :1,
... host : 192.168.192.143:27018
... }
... ]}})
或者:
> db.runCommand({ replSetInitiate :{ _id : test , members :[ { _id :0, host : 59.108.137.55:27017 }, { _id :1, host : 59.108.137.56:27017 } ]}});
{ ok : 0, errmsg : access denied; use admin db }
此处提示“使用admin db”,执行一下:
#use admin
再执行上述命令就可以了。此时输出:
{
info : Config now saved locally. Should come online in about a minute. ,
ok : 1
}
然后:
> rs.initiate();
提示输出:
{
info : try querying local.system.replset to see current configuration ,
ok : 0,
errmsg : already initialized
}
是由于之前可能已经执行了
#rs.initiate();
变成:
然后执行下面命令,为集群添加仲裁节点:
> rs.addArb( 192.168.192.144:27018 );
有时会提示:
{
ok : 0,
errmsg : replSetReconfig command must be sent to the current replica set primary.
}
此时提示://非PRIMARY不能动态添加节点,但是此时,提示名已经发生变化:
继续执行:
test:PRIMARY> rs.status()
{
set : test ,
date : ISODate( 2014-10-28T02:47:40Z ),
myState : 1,
members : [
{
_id : 0,
name : server143:27018 ,
health : 1,
state : 1,
stateStr : PRIMARY ,
uptime : 3995,
optime : Timestamp(1414461593, 1),
optimeDate : ISODate( 2014-10-28T01:59:53Z ),
self : true
},
{
_id : 1,
name : 192.168.192.142:27018 ,
health : 1,
state : 2,
stateStr : SECONDARY ,
uptime : 2865,
optime : Timestamp(1414461593, 1),
optimeDate : ISODate( 2014-10-28T01:59:53Z ),
lastHeartbeat : ISODate( 2014-10-28T02:47:39Z ),
lastHeartbeatRecv : ISODate( 2014-10-28T02:47:40Z ),
pingMs : 0,
syncingTo : server143:27018
}
],
ok : 1
}
Server143是什么?不应该是IP吗?
查看一下:/etc/hosts
也就是当前及其就是PRIMARY了,
再执行:
test:PRIMARY> rs.addArb( 192.168.192.144:27018 );
{ ok : 1 }
就OK了。查看一下:
5.测试
此时可以在143上创建一个数据库:
在142上查看:
仲裁节点不存储数据,只是负责故障转移的群体投票。
6.扩展
如果应用的连接数疯狂的增长,mongodb集群马上就扛不住了,怎么扩展呢?并且在不停掉整个集群的基础上扩展?很简单!
Mongodb集群是安装在Linux下的,我本地(192.268.190.50:27017)也有一个mongodb数据库(单点的),怎么才能加入到集群中呢?
第一步:在primary节点下执行
test:PRIMARY> rs.add( 192.168.190.50:27017 );
第二步:启动我本地的mongodb
C: mongodb bin mongod –dbpath=C: mongodb data –port 27017 –replSet test/192.168.192.143:27018 –maxConns=200
关键词是:replSet
第三步:查看dos下的控制台:
第四步:查看143:
可以看到最后一个就是新添加的节点
第五步:测试
在本机192.168.190.50:27017上:
删除节点:
PRIMARY> rs.remove( ip:port )
显示当前谁是primay
PRIMARY> rs.isMaster()
7.读写分离
很重要一点,副本节点默认是不能读的,我们想从副本节点读取数据,需要设置一下。
常规写操作来说并没有读操作多,所以一台主节点负责写,两台副本节点负责读。
8.优化
查看连接数:
chinatetrs:PRIMARY> db.serverStatus().connections()
Wed Oct 29 16:28:35.660 TypeError: Property 'connections' of object [object Object] is not a function
chinatetrs:PRIMARY> db.serverStatus().connections
{ current : 20, available : 799, totalCreated : NumberLong(7776) }
默认是819。
在启动的参数上加一个
--maxConns=3000
可以修改最大连接数。
另外这个连接数还受Linux系统的影响,Linux每个进程的最大连接数:
[root@server142 bin]# ulimit -n
1024
可以修改一下:
[root@server142 bin]# ulimit -n 10000
[root@server142 bin]# ulimit -n
10000