mqzlp 发表于 2017-12-15 22:32:18

MongoDB 3.2.8 副本集搭建

  记录一下,MongoDB的角色创建及配置,以便以后使用

简介
  Replica Set,中文翻译叫做副本集,不过我并不喜欢把英文翻译成中文,总是感觉怪怪的。其实简单来说就是集群当中包含了多份数据,保证主节点挂掉了,备节点能继续提供数据服务,提供的前提就是数据需要和主节点一致

  Mongodb(M)表示主节点,Mongodb(S)表示备节点,Mongodb(A)表示仲裁节点。主备节点存储数据,仲裁节点不存储数据。客户端同时连接主节点与备节点,不连接仲裁节点。
  默认设置下,主节点提供所有增删查改服务,备节点不提供任何服务。但是可以通过设置使备节点提供查询服务,这样就可以减少主节点的压力,当客户端进行数据查询时,请求自动转到备节点上。这个设置叫做Read Preference Modes,同时Java客户端提供了简单的配置方式,可以不必直接对数据库进行操作。
  仲裁节点是一种特殊的节点,它本身并不存储数据,主要的作用是决定哪一个备节点在主节点挂掉之后提升为主节点,所以客户端不需要连接此节点。这里虽然只有一个备节点,但是仍然需要一个仲裁节点来提升备节点级别。我开始也不相信必须要有仲裁节点,但是自己也试过没仲裁节点的话,主节点挂了备节点还是备节点,所以咱们还是需要它的。
  介绍完了集群方案,那么现在就开始搭建了。

副本集搭建
  1、准备配置文件
  

# mongod.conf  
# for documentation of all options, see:
  
#   http://docs.mongodb.org/manual/reference/configuration-options/
  

  
# where to write logging data.
  
systemLog:
  destination: file
  logAppend: true
  path: /home/dd/mongodb/logs/mongod.log #日志文件存放目录
  

  
# Where and how to store data.
  
storage:
  dbPath: /home/dd/mongodb/db #数据文件存放目录
  journal:
  enabled: true
  
#engine:
  
#mmapv1:
  
#wiredTiger:
  

  
# how the process runs
  
processManagement:
  fork: true#以守护程序的方式启用,即在后台运行
  pidFilePath: /home/dd/mongodb/mongod.pid# location of pidfile
  

  
# network interfaces
  
net:
  port: 27017 #端口
  bindIp: 0.0.0.0# Listen to local interface only, comment to listen on all interfaces.
  

  
#security:
  #authorization: enabled
  
#operationProfiling:
  

  
replication:
  replSetName: matchData1
  

  
#sharding:
  

  
## Enterprise-Only Options
  

  
#auditLog:
  

  
#snmp:
  

  红色标示出副本集的名称,副本集以此名称来识别是否属于同一个集群中
  2、启动准备好的一台Mongodb数据库
  

bin/mongod –f mongo.conf  

  3、连接到Mongo的admin库
  

bin/mongo ip:port/admin  

  4、增加用户
  

use admin  
db.createUser({user:"root",pwd:"root",roles:["root"]})
  
use ball
  
db.createUser(
  {
  user: "basket",
  pwd: "basket",
  roles: [{role: "readWrite", db: "ballmatch"}]
  }
  
)
  

  5、生成keyFile文件
  在服务器上执行
  

opensslrand–base64 753>mongodb.keyfile  

  
chmod 600 keyFile
  

  将keyFile配置到Mongo配置文件,同时开启验证
  

security:  authorization: enabled
  keyFile:/home/dd/mongodb/mongodb.keyfile
  

  没有这个文件的机器就无法加入副本集,开启了keyFile,隐含就开启了auth,这个时候连接副本集就需要进行认证了
  6、重启Mongo服务
  7、拷贝到其他服务器,修改对应得目录
  8、添加副本集配置
  

cfg={_id:"matchData1", members:[{_id:0, host:'192.168.10.242:37017', priority:1},{_id:1, host:'192.168.10.242:37018', priority:2}, {_id:2, host:'192.168.10.242:37019', arbiterOnly:true}]};  
rs.initiate(cfg);
  

  cfg:变量名,任意起
  _id:”matchData1” 配置文件中配置的副本集名称
  host:Mongodb的ip+端口
  priority:优先级,数字越大优先级越高(0-100),优先级最高的会是初始的主节点,显示为PRIMARY。如果不想让某些成员在故障切换时成为primary,则将它们的优先级设为0(为0永不会成为主节点)
  当副本集切换失败时,可用如下代码重新配置:
  

rs.reconfig(cfg, {force:true});  

  9、副本集状态
  

rs.status()  

  
"health" : 1, #代表机器正常
  
"stateStr" : "PRIMARY",#代表是主节点,可读写,其中有以下几下状态
  
1. STARTUP:刚加入到复制集中,配置还未加载
  
2. STARTUP2:配置已加载完,初始化;
  
3. RECOVERING:正在恢复,不适用读
  
4. ARBITER: 仲裁者
  
5. DOWN:节点不可到达
  
6. UNKNOWN:未获取其他节点状态而不知是什么状态,一般发生在只有两个成员的架构
  
7. REMOVED:移除复制集
  
8. ROLLBACK:数据回滚,在回滚结束时,转移到RECOVERING或SECONDARY状态
  
9. FATAL:出错。查看日志grep “replSet FATAL”找出错原因,重新做同步
  
10. PRIMARY:主节点
  
11. SECONDARY:备份节点
  

  10、维护
  前提是这个ip:port必须是使用了同一个relpSet名称的mongodb实例即可
添加副本,在登录到主节点下输入
  

rs.add("ip:port");   

  删除副本
  

rs.remove("ip:port");  

  新增仲裁节点
  

rs.addArb(“ip:port”);  

  注:新加入副本集的节点,会自动同步当前副本集已有权限及数据
页: [1]
查看完整版本: MongoDB 3.2.8 副本集搭建