启动mongo
通过配置文件方式启动mongodb实例。
[root@server1 bin]# mongod --config /usr/local/mongodb/conf/mongod.conf
about to fork child process, waiting until server is ready for connections.
forked process: 2162
child process started successfully, parent exiting
mongod.conf文件内容:
[root@server1 conf]# vim mongod.conf
#端口号
port=28028
#开启验证
#auth=true
#数据文件存储位置
dbpath=/usr/local/mongodb-linux-x86_64-3.0.7/data/db/
#日志文件存储位置,需要手动创建文件夹
logpath=/usr/local/mongodb-linux-x86_64-3.0.7/log/mongodb.log
#以追加方式写入日志,默认为覆盖写入
logappend=true
#以守护进程方式启动
fork=true
#开启http请求查询端口为port+1000
#httpinterface=true
#复制集名称,相同复制集名称应该相同
replSet=MONGODB
连接mongodb
确认启动后,使用$ mongo连接mongodb shell,值得注意的是要以之前启动mongod实例的端口连接mongodb,没有指定数据库默认连接test数据库。
[root@server1 bin]# ./mongo --port 28028
MongoDB shell version: 3.0.7
connecting to: 127.0.0.1:28028/test
初次配置replicaSet
配置本机DNS,编辑/etc/hosts文件,需要在每台服务器配置对应ip映射提供服务器之间相互访问,配置完成后重启服务器。
[root@server1 /]# vim /etc/hosts
本机内网ip server1
其它mongod实例部署服务器外网ip server2
[root@server1 /] shutdown -r now
[root@server2 /]# vim /etc/hosts
本机内网ip server2
其它mongod实例部署服务器外网ip server1
[root@server2 /] shutdown -r now
查看复制集状态
在mongodb shell里使用$ rs.status()命令查看当前mongodb复制集状态,如下状态为未配置replicaSet。
> rs.status()
{
"info" : "run rs.initiate(...) if not yet done for the set",
"ok" : 0,
"errmsg" : "no replset config has been received",
"code" : 94
}
初始化replicaSet
直接在mongodb shell里使用$ rs.initiate()命令初始化。注意:$ rs.initiate()方法是可以直接指定所有replicaSet配置参数的,这里没有直接指定,且只能在一个mongod实例中使用$ rs.initiate()命令。
> rs.initiate()
{
"info2" : "no configuration explicitly specified -- making one",
"me" : "server1:28028",
"ok" : 1
}
MONGODB:OTHER>db(这里随便输入一条mongo命令刷新一下)
MONGODB:PRIMARY>rs.status()
{
"set" : "hongwei",
"date" : ISODate("2015-12-11T09:18:50.688Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "server1:28028",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 537,
"optime" : Timestamp(1449825284, 1),
"optimeDate" : ISODate("2015-12-11T09:14:44Z"),
"electionTime" : Timestamp(1449825284, 2),
"electionDate" : ISODate("2015-12-11T09:14:44Z"),
"configVersion" : 1,
"self" : true
}
],
"ok" : 1
}
加载结点
在上述完成DNS解析,同时开启要添加的mongod实例,然后在primary结点上使用$ rs.add()命令添加新的结点,配置完成后登陆新结点的mongod实例,也能查看当前replicaSet状态的改变。
MONGODB:PRIMARY> rs.add("server2:28028")
{ "ok" : 1 }
删除结点
注意:无论增加还是删除结点只能在Primary结点操作,因为mongodb具有高度的数据一致性,从根本杜绝对从结点进行写操作(区别于传统的mast-slave结构)。
MONGODB:PRIMARY> rs.remove("server2:28028")
{ "ok" : 1 }
查看复制集配置
MONGODB:SECONDARY> rs.config()
{
"_id" : "hongwei",
"version" : 2,
"members" : [
{
"_id" : 0,
"host" : "server1:28028",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : 0,
"votes" : 1
},
{
"_id" : 1,
"host" : "server2:28028",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : 0,
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatTimeoutSecs" : 10,
"getLastErrorModes" : {
},
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
}
}
}
删除复制集
去掉mongod.conf配置文件中replSet属性,启动mongod,并连接到mongodb shell,对其它server执行相同操作。
> use local
> db.system.replset.remove({})
WriteResult({ "nRemoved" : 1 })
复制集配置参数
priority 0 | 至少为1,默认为1,为0时表示该节点不能转换为主节点。
hidden false | true ,默认为false,不会被驱动所发现,driver通过使用$ rs.isMaster()命令查找可用节点。
slaveDelay second,默认单位为秒,设置延迟节点。
buildIndexes true | false,默认为true,是否复制主节点索引。
votes: 0 | 1,默认为1,设置是否具有投票功能。
注意:隐藏节点、延迟节点、无索引节点配置前提是priority为0。