集群的配置
(本测试放于同一台机器进行配置,所以IP地址一样,如果是在不同的服务器上更换IP便可以)
1、目录结构
拷贝两份mongodb到/home/scotte.ye/mongo1和/home/scotte.ye/mongo2
2、开启mongodb
主:
#cd /home/scotte.ye/mongo1/bin
#./mongod --master -port=10111 -dbpath=/home/data/10111 -nohttpinterface &
#
这样主服务器就开启了,几个关键参数的说明(当然也可以自己查看帮助,./mongod --help):
--master:标识当前开启的mongodb是作为主服务器的
-port:当前服务器的监听服务端口。默认27017
-dbpath:批当前程序运行的日志保存路径。默认/data/db。注这个路径mongodb不人自己创建,所以一定要自己手工来创建,否则程序不能正常启动。
-nohttpinterface:不开启网页接口,也就是不能通过网页的形式查看服务器运行状态。默认是会在28017端口开启一个网页服务提供用户查看服务器状态。因为当前都在同一个机器上,所以如果开启这个两个会产生冲突,所以不能开启。
从:
#cd /home/scotte.ye/mongo1/bin
#./mongod --slave --source=192.168.35.106:10111 -port=10112 -dbpath=/home/data/10112 -nohttpinterface &
#
这是开启一个从服务器,多个从也是按相同的方式来开启。几个关键的参数说明:
--slave:指明当前开启的为从服务器。
--source:标明当前从服务器要连接的主服务器的端口和IP
其它参数同主,所以不再赘述。
集群特点
1、只有主服务器允许写入,其它从服务器只能读取。
2、从服务器启动的时候马上就会和主服务器进行数据同步,所以不要担心后起的从服务器不会和主服务器同步之前的数据,也不要我们自己手动操作。
集群的主从切换
1、主机宕机,slave顶替
- 停止slave的mongod进程
- 删除slave目录下的local.*文件
- 以--master的模式启动B
2、切换Master/Slave(原来的master是正常运行的)
- 用fsync命令暂停master的写操作 //确保切换的时候主从数据同步
- 关闭slave服务
- 清空slave目录下的local.*文件
- 用--master重启slave为master
- 在原来的slave也就是现在的master上面执行一次写操作,生成oplog,获取第一个同步点,因为slave与master的数据同步是通过oplog来实现的。所以这一步很重要,一定要完成。
- 关闭现master服务,同时slave也会生成新的local.*文件
- 关闭原master,用现master上面的local.*文件替换原master上面的local.*.因为文件比较大,所以最好是压缩拷贝
- 再用--master选项重启新master服务
- 再用--slave的模式重启原master服务,注意还要加一个-fastsync选项。这个和用fsync来暂停master有关
如果原来的master不是正常的,那么这个时候可以跳过第一步,拷贝新master的文件到原master重启服务就可以了。
3、更新主服务器位置
假设原来从主机的启动方式如下:
$ mongod --slave --source 192.168.35.106:10111
此时如果想更换主服务器的地址,可以通过下面的方式:
- 重启mongod服务,不要加-slave 和 -source选项:$ mongod
- 启动shell执行如下操作:
-
- > use local
- switched to db local
- >db.sources.update({host:"192.168.356.106:10111"},{$set:{host:"192.168.35.106:10112"}})
- 接着再重启服务器:
- $ ./mongod --slave --source=192.168.35.106:10112
- $ # or
- $ ./mongod --slave