MongoDB的主从部署

转自: http://www.open-open.com/lib/view/open1341304885621.html


主从同步:

md01 10.0.0.11 master
md02 10.0.0.12 slave
md03 10.0.0.14 slave

#建立数据库目录

mkdir   -p   /elain  /apps  /mongodb  / 
mkdir   -p   /elain  /data  /mongodb  /db  / 
mkdir   -p   /elain  /logs  /mongodb  /

注:
1、不需要像mysql一样复制完整数据过去,丛库启动会制动复制主库完整数据。
2、丛库自动配置为只读。
3、mongodb第一次启动时间较长,需要注意等待。
4、管理命令多数都要在admin库中执行 use admin

相关参数:./mongod –help
–autoresync 当发现从服务器的数据不是最新时,开始从主服务器请求同步数据
–slavedelay 同步延迟,单位:秒

主-从
作为主服务器启动

/elain  /apps  /mongodb  /bin  /mongod   --fork   --master   --oplogSize4096  --port  27001   --dbpath   /elain  /data  /mongodb  /db   --logpath  /elain  /logs /mongodb  /mongodb.log


作为从服务器启动,并指明主服务器地址。–autoresync为强制从主服务器同步全部数据

/elain  /apps  /mongodb  /bin  /mongod   --fork   --slave   --source 10.0.0.11: 27001   --port   27001   --dbpath   /elain  /data  /mongodb  /db   --logpath /elain  /logs  /mongodb  /mongodb.log

注:可以在启动从时加以下常用参数
–slavedelay 10 #延时复制 单位为秒
–autoresync #自动重新同步
–only #复制指定的数据库,默认复制所有的库
–oplogSize #主节点的oplog日志大小,单位为M,建议设大点(更改oplog大小时,只需停主库,删除local.*,然后加–oplogSize=* 重新启动即可,*代表大小)

如果发现主从不同步,从上手动同步

db.runCommand  (  {  "resync"1  }  )

状态查询

db.runCommand  (  {  "isMaster"1  }  )    #主还是从

在丛库上查询主库地址

> use   local
switched to db   local 
> db.sources.find  (  )
{   "_id" : ObjectId  (  "4e9105515d704346c8796407"  ),   "host" : "10.0.0.11:27001",   "source" :   "main",   "syncedTo" :   {   "t" :  1318155992000"i" :   1   }   }

#查看各Collection状态

db.printCollectionStats  (  );

#查看主从复制状态

db.printReplicationInfo  (  );

测试主从
在主服务器新建数据库

mongo   --port   27001 
>show dbs 
>use elaindb 
>db.blog.save  (  {title:  "new article"  }  )

在从服务器上查看同步数据

mongo   --port   27001

#在从库插入数据的操作 会提示 not master

> use elaindb; 
switched to db elaindb 
> db.blog.find  (  )
{   "_id" : ObjectId  (  "4e9174b48443c8ef12b30c56"  ),   "title" :   "new article"   }

#查看主从同步信息:

> db.printReplicationInfo  (  )
this is a slave, printing slave replication info. 
source:   10.0.0.11:  27001 
syncedTo: Sun Oct 09   2011   183712 GMT+0800   (CST  ) 
=   19 secs ago   (0.01hrs  ) 

>db.printSlaveReplicationInfo  (  );

#此为同步过来的数据,测试成功

附加:

添加及删除源:
启动从节点时可以用–source指定主节点,也可以在shell中配置这个源,

启动一个从,端口为27002

/elain  /apps  /mongodb  /bin  /mongod   --fork   --slave    --port   27002   --dbpath  /elain  /data  /mongodb  /testdb   --logpath   /elain  /logs  /mongodb /mongodb.log

登录:

mongo   --port   27002 

[root  @md03 ~  ]  # mongo --port 27002 
MongoDB shell version: 2.0.0 
connecting to: 127.0.0.1:  27002  /  test 
> show dbs 
local     (empty  )

添加到从节点上

>use   local 
>db.sources.insert  (  {  "host":   "10.0.0.11:27001"  }  );

#查看显示正在同步

> db.sources.find  (  )
{   "_id" : ObjectId  (  "4e9111e1c29bbd9b9cd31d4e"  ),   "host" : "10.0.0.11:27001",   "source" :   "main",   "syncedTo" :   {   "t" :  1318156782000"i" :   246   },   "dbsNextPass" :   {   "testdb" :   true"testdb1" :   true   }   }

#同步完成后

> db.sources.find  (  )
{   "_id" : ObjectId  (  "4e9111e1c29bbd9b9cd31d4e"  ),   "host" : "10.0.0.11:27001",   "source" :   "main",   "syncedTo" :   {   "t" :  1318156782000"i" :   256   }   }

更改源:(假设10.0.0.12也为主库)

db.sources.insert  (  {  "host":   "10.0.0.12:27001"  }  )
db.sources.remove  (  {  "host":   "10.0.0.11:27001"  }  );

若复制中使用了认证,需在local库中添加repl用户来复制

>user   local
> db.addUser  (  "repl",   "elain123"  );

附录一、Slave 顶替 Master
如果主服务器 10.0.0.11 宕机了,
此时需要用 10.0.0.12 机器来顶替 master 服务,

步骤如下:
#停止 10.0.0.12 进程(mongod)

kill   -2   `  ps   -ef  |  grep mongod  |  grep   -v   grep  |  awk   ''  ''  {print  $2  }  ''  ''  `

#删除 10.0.0.12 数据目录中的 local.*

rm   -rf   /elain  /data  /mongodb  /db  /local.  *

#以–master 模式启动 10.0.0.12

/elain  /apps  /mongodb  /bin  /mongod   --fork   --master   --oplogSize4096  --port  27001   --dbpath   /elain  /data  /mongodb  /db   --logpath  /elain  /logs /mongodb  /mongodb.log

附录二、切换 Master/Slave 角色
切换主库10.0.0.11和从库10.0.0.12的角色

步骤如下:(命令略)

用 fsync 命令暂停 主库 上的写操作,
关闭 从库 上的服务
清空 从库 上的 local.*文件
用-master 选项重启 从库 服务
在 从库 上执行一次写操作,初始化 oplog,获得一个同步起始点
关闭 从库 服务,此时 从库 已经有了新的 local.*文件
关闭 主库 服务,并且用 从库 上新的 local.*文件来代替 主库 上的 local.*文件(建议先压缩再COPY)
用-master 选项重启 从库 服务
在启动slave的选项上加一个-fastsync 选项来重启 主库 服务


你可能感兴趣的:(mongodb)