Mongodb的Replica Set 副本集集群搭建

实验性的搭建一个集群做练手。

配置和环境:

win10(本机)和linux(CentOs7)内网服务器各一台。

Mongodb3.07

目标:Replica set 副本集结构,一个primary一个slave,实现读写分离的同步数据集群。


一、本机和内网服务器安装mongo

  可参考我的另外两篇文章:

Mongodb在windows和linux平台的安装配置(http://fykknd.blog.51cto.com/3175618/1716343)

Mongodb权限管理(http://fykknd.blog.51cto.com/3175618/1716369)

  

二、集群配置

  一切开始前,有个准备工作,当时配置集群时因为这个事儿耽误了很长时间,百度google都没结果,最后是问了一个运维的朋友才知道的。就是要先做一个key认证!!表示集群间的机器是互相可靠的。

  具体操作可参考官网说明,在文章末尾有链接地址。

# openssl rand -base64 741 > /usr/local/mongodb/mongodb-keyfile
# chmod 600 /usr/local/mongodb/mongodb-keyfile

  这两步就是创建一个秘钥文件,用于集群的机器使用。生成文件后,把这个文件复制到每个成员的对应目录下,然后再启动mongo。

  作为集群的一份子,启动时要加一个Repl Set参数,就像一个团队的名字一样,表示是这个团队的成员。先写出启动命令,然后进行说明。

# mongod --config /etc/mongo.conf --dbpath=/usr/local/mongodb/data/ --logpath=/usr/local/mongodb/logs/log.l --port=27017 --auth --fork --replSet rs0 --keyFile /usr/local/mongodb/mongodb-keyfile

  这是命令行加参数方式启动,也可以把参数写在mongo.conf里。(我这3.07版本是解压直接用的,默认没有配置文件,需要自己创建一个:/etc/mongo.conf)配置文件的写法看官方文档的说明(在文章最后链接里),2.6以后的文件写法采用YAML方式。

  参数说明:

   --config 配置文件位置

   --dbpath 数据存放位置

   --logpath 日志存放位置

   --port 端口(可不写)

   --auth 以认证方式启动

   --fork 后台运行

   --replSet 副本集名称

   --keyFile 秘钥文件位置

   

  接下来配置集群config变量(记得先进行认证操作,否则没有权限配置集群,我使用root用户进行的):

> config={
    _id : 'dbset',
  members : [
  {
      _id : 1,
      host : '192.168.0.46'
  },
  {
      _id : 2,
      host : '192.168.0.207:27017'
  }
  ]
}

   写好config后,进行初始化:

> rs.initiate(config)


   如果一切正常的话,可以用rs.status()查看目前集群的状态:

wKioL1ZUE2XwQ54qAAA__mG3JXU242.png

   状态说明:

    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:备份节点


    

  添加或者删除节点(需要在主节点上进行):

  添加 rs.addArb("192.168.0.207");

  删除 rs.remove("192.168.0.207");


  此时打开slave节点的话,可能会提示"not master and slaveok=false"。解决办法是登录primary节点后,use admin; db.auth("xxx","yyy")认证身份,然后执行:

> rs.slaveOk();

即可。


  其实正常来说还应该有个仲裁节点,但目前服务器数量不够,所以尝试用另一个外网机器做了下仲裁节点,于是遇到了修改config的配置问题。网上给的答案基本删掉目前设置重新搞,其实有更简便的方法,强行修改config配置(例如上面我没有指定config中的priority参数,值是个整形。值越大越优先成为primary节点。前提是配置文件没有指定谁是主节点,并且启动参数里也没有--master参数)。例如新的config为:

> config={
  _id : 'dbset',
  members : [
  {
      _id : 1,
      host :192.168.0.46,
      priority: 1
  },
  {
      _id : 2,
      host :192.168.0.207:27017,
      priority: 0
  }
  ]
}

  此时rs.initiate(config)是无效的,需要执行:

> rs.reconfig(config);

  那么到底怎么添加仲裁节点呢?很简单:在config里加一个节点,后面写上arbiterOnly:true即可。比如:{_id:3, host:"192.168.0.207:27018", arbiterOnly:true},然后再重新reconfig即可。然而我并没有成功,因为我是在207上启动了两个不同的端口模拟的,但并未成功。附件贴上错误信息,哪位大神指出下错误?感激不尽!


  此外还可以查看集群配置:rs.conf();

wKioL1ZUFTrSzY3VAAAxHyPioE4357.png


注:本文主要参考来源

mongoDB3.0.3 以上GUI 连接认证问题 http://www.bubuko.com/infodetail-984255.html

mongoDB 3.0 安全权限访问控制 http://blog.csdn.net/gsying1474/article/details/47813059

浅析MongoDB用户管理 http://www.jb51.net/article/53830.htm

mongo官网-key认证:https://docs.mongodb.org/manual/tutorial/enable-internal-authentication/

mongo官网-配置文件写法:https://docs.mongodb.org/manual/reference/configuration-options/

mongodb强制一个成员为主:http://www.361way.com/mongodb-forced-primary/1704.html

Mongodb增加、移除Arbiter节点实例:http://www.jb51.net/article/59597.htm

你可能感兴趣的:(mongodb,mongodb,set,mongo,replica,mongodb副本集)