请先阅读我之前的文章《
MongoDB 3.0的在CentOS6.5上的安装》
一、创建副本集须知:
1、存在一台有超级管理员的mongod服务器,可以有数据库,其他所有的服务器都必须是
全新安装,
且每一台上都要创建超级管理员和数据库管理员,且账号、密码必须一致!
2、副本集或分片中的所有mongod服务器都必须持有同样的mongodb-keyfile,才能通讯成功。
3、一旦创建成功后,任意一台哪怕是主服务器奔溃了都没有问题,会自动选举出一个主服务器,继续为用户服务。
如果服务器资源比较紧张,可以一台Master,一台salver,一台仲裁服务器(与Salver部署在一起),注意必须至少有3台服务器,
如果只是一台Master,一台Slaver,假Master挂了,此时Salver不会主动成为Master,此时MongoDB对外只能提供read服务。
4、可以启动一台延迟备份节点,指定主机同步N时间后,才同步,比如主机同步一个月后同步,如果主机版本出现重大问题,导致其他正常的备机
也出现问题,此时至少可以恢复到一个月以前,当然也可以定期凌晨备份主节点。
5、可以将备节点依次停机,以单机模式mongod&方式启动,进行维护,比如给某个集合创建索引,然后重新以mongod副本集方式启动。
这意味着:
1、通过维护,副本的数据实际上可以和主节点不一致.
2、insert的时候因为索引导致速度变慢,这样实现读写分离,读有索引的备节点快,插没有索引的主节点也快。
6、副本集成员除了主服务器外,其他的都不能读写,除非设置db.setSlaveOk()才可以读,但依然不可以写。
7、[拓展阅读,写得很好!]:http://snoopyxdy.blog.163.com/blog/static/60117440201241694254441/ (写得很好)
二、副本集创建步骤:
1、准备3台全新MongoDB服务器(MongoDB3.0最多支持50台slaver),1台为Master,2个为salver(或者1台salver,一台仲裁服务器):
2、为每一台服务器创建超级管理员,并创建数据库hezx的管理员(账号、密码、对应的数据库必须保持一致)
一、预先创建mongodb
超级管理员,该账号可以关闭mongod进程:
1)、#mongod&,此时直接启动mongo后台服务
2)、#mongo
3)、#use admin 连接到admin数据库
#db.createUser({user: "superAdmin",pwd: "admin123",roles: [ "root" ]})
二、预先创建指定的
数据库管理员:use
1)、#mongod&,此时直接启动mongo后台服务
2) #mongo
#use hezx
3)、如下语句为hezx数据库创建了一个管理员。
#db.createUser({user: "admin",pwd: "admin123",roles: [{ role: "readWrite", db: "hezx" },{ role: "readWrite", db: "admin" },{ role: "readWrite", db: "local" }]})
用户可以use admin 使用 超级管理员删除该用户db.system.users.remove({"user":"账号名称"})
3、正式启动副本集服务,
依次在3台MongoDB的服务器上执行如下命令:
启动副本集命令,副本集名称fubenji必须一致。
mongod --auth --replSet fubenji --config /etc/mongodb.conf
4、在其中一台Mongo服务器的shell上执行,这台机器将成为Master,其他机器则成为了salver:
>use admin
> db.auth("superAdmin","admin123") 使用超级管理员登陆
> config={"_id" : "fubenji","version" : 1,"members" : [{ "_id" : 1,"host":"192.168.62.152:17018"},{ "_id" : 2,"host":"192.168.62.153:17018"},{ "_id" :
3,"host":"192.168.62.154:17018"}]}
> rs.initiate(config)
如果提示:"errmsg" : "'192.168.62.153:17018' has data already, cannot initiate set." 说明,153机器不是全新的Mongo服务器,请重新安装后启动。
如果提示:{ "ok" : 1 } 说明副本集配置成功。
4、rs.status() 可以查看副本集中成员的状态:哪个salver已经挂了。
health:1 活着 0 挂了 stateStr:"PRIMARY" 主 "SECONDARY" 从
5、rs.add("192.168.62.155:17018") 可以添加新的salver,最好是全新的mongodb服务,否则新加入的服务上的数据库会被清除掉。
rs.add({"_id":4,"host":"192.168.62.155:17018","priority":0,"hidden":true,“votes”:0}) //可以传递复杂的参数进行加入,如没有投票权,且不能成为主节点
rs.remove("192.168.62.155:17018")可以删除salver。
rs.reconfig()可以重新配置副本集。
rs.isMaster()查看谁主从关系
rs.stepDown()把主节点降级为备节点.
rs.freeze(100000)对主节点维护100秒,且其他节点不能成为主节点
rs.freeze(0)可以把退位的主节点重新变为主节点。
db.setSlaveOk(),通过这个命令后,非主服务器可以进行查询的操作,但不能进行写操作。该命令退出shell后就失效
6、此时通过mongo shell连接mongod服务,可执行任何mongod操作
fubenji:PRIMARY>use admin
一、创建副本集须知:
1、存在一台有超级管理员的mongod服务器,可以有数据库,其他所有的服务器都必须是
全新安装,
且每一台上都要创建超级管理员和数据库管理员,且账号、密码必须一致!
2、副本集或分片中的所有mongod服务器都必须持有同样的mongodb-keyfile,才能通讯成功。
3、一旦创建成功后,任意一台哪怕是主服务器奔溃了都没有问题,会自动选举出一个主服务器,继续为用户服务。
如果服务器资源比较紧张,可以一台Master,一台salver,一台仲裁服务器(与Salver部署在一起),注意必须至少有3台服务器,
如果只是一台Master,一台Slaver,假Master挂了,此时Salver不会主动成为Master,此时MongoDB对外只能提供read服务。
4、可以启动一台延迟备份节点,指定主机同步N时间后,才同步,比如主机同步一个月后同步,如果主机版本出现重大问题,导致其他正常的备机
也出现问题,此时至少可以恢复到一个月以前,当然也可以定期凌晨备份主节点。
5、可以将备节点依次停机,以单机模式mongod&方式启动,进行维护,比如给某个集合创建索引,然后重新以mongod副本集方式启动。
这意味着:
1、通过维护,副本的数据实际上可以和主节点不一致.
2、insert的时候因为索引导致速度变慢,这样实现读写分离,读有索引的备节点快,插没有索引的主节点也快。
6、副本集成员除了主服务器外,其他的都不能读写,除非设置db.setSlaveOk()才可以读,但依然不可以写。
7、[拓展阅读,写得很好!]:http://snoopyxdy.blog.163.com/blog/static/60117440201241694254441/ (写得很好)
二、副本集创建步骤:
1、准备3台全新MongoDB服务器(MongoDB3.0最多支持50台slaver),1台为Master,2个为salver(或者1台salver,一台仲裁服务器):
2、为每一台服务器创建超级管理员,并创建数据库hezx的管理员(账号、密码、对应的数据库必须保持一致)
一、预先创建mongodb
超级管理员,该账号可以关闭mongod进程:
1)、#mongod&,此时直接启动mongo后台服务
2)、#mongo
3)、#use admin 连接到admin数据库
#db.createUser({user: "superAdmin",pwd: "admin123",roles: [ "root" ]})
二、预先创建指定的
数据库管理员:use
1)、#mongod&,此时直接启动mongo后台服务
2) #mongo
#use hezx
3)、如下语句为hezx数据库创建了一个管理员。
#db.createUser({user: "admin",pwd: "admin123",roles: [{ role: "readWrite", db: "hezx" },{ role: "readWrite", db: "admin" },{ role: "readWrite", db: "local" }]})
用户可以use admin 使用 超级管理员删除该用户db.system.users.remove({"user":"账号名称"})
3、正式启动副本集服务,
依次在3台MongoDB的服务器上执行如下命令:
启动副本集命令,副本集名称fubenji必须一致。
mongod --auth --replSet fubenji --config /etc/mongodb.conf
4、在其中一台Mongo服务器的shell上执行,这台机器将成为Master,其他机器则成为了salver:
>use admin
> db.auth("superAdmin","admin123") 使用超级管理员登陆
> config={"_id" : "fubenji","version" : 1,"members" : [{ "_id" : 1,"host":"192.168.62.152:17018"},{ "_id" : 2,"host":"192.168.62.153:17018"},{ "_id" :
3,"host":"192.168.62.154:17018"}]}
> rs.initiate(config)
如果提示:"errmsg" : "'192.168.62.153:17018' has data already, cannot initiate set." 说明,153机器不是全新的Mongo服务器,请重新安装后启动。
如果提示:{ "ok" : 1 } 说明副本集配置成功。
4、rs.status() 可以查看副本集中成员的状态:哪个salver已经挂了。
health:1 活着 0 挂了 stateStr:"PRIMARY" 主 "SECONDARY" 从
5、rs.add("192.168.62.155:17018") 可以添加新的salver,最好是全新的mongodb服务,否则新加入的服务上的数据库会被清除掉。
rs.add({"_id":4,"host":"192.168.62.155:17018","priority":0,"hidden":true,“votes”:0}) //可以传递复杂的参数进行加入,如没有投票权,且不能成为主节点
rs.remove("192.168.62.155:17018")可以删除salver。
rs.reconfig()可以重新配置副本集。
rs.isMaster()查看谁主从关系
rs.stepDown()把主节点降级为备节点.
rs.freeze(100000)对主节点维护100秒,且其他节点不能成为主节点
rs.freeze(0)可以把退位的主节点重新变为主节点。
db.setSlaveOk(),通过这个命令后,非主服务器可以进行查询的操作,但不能进行写操作。该命令退出shell后就失效
6、此时通过mongo shell连接mongod服务,可执行任何mongod操作
fubenji:PRIMARY>use admin