098098 发表于 2015-11-26 10:43:43

Mongodb的Replica Set 副本集集群搭建

实验性的搭建一个集群做练手。
配置和环境:

win10(本机)和linux(CentOs7)内网服务器各一台。
Mongodb3.07
目标:Replica set 副本集结构,一个primary一个slave,实现读写分离的同步数据集群。

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

二、集群配置

一切开始前,有个准备工作,当时配置集群时因为这个事儿耽误了很长时间,百度google都没结果,最后是问了一个运维的朋友才知道的。就是要先做一个key认证!!表示集群间的机器是互相可靠的。
具体操作可参考官网说明,在文章末尾有链接地址。

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




这两步就是创建一个秘钥文件,用于集群的机器使用。生成文件后,把这个文件复制到每个成员的对应目录下,然后再启动mongo。
作为集群的一份子,启动时要加一个Repl Set参数,就像一个团队的名字一样,表示是这个团队的成员。先写出启动命令,然后进行说明。

1
# 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用户进行的):

1
2
3
4
5
6
7
8
9
10
11
12
13
> config={
    _id : 'dbset',
members : [
{
      _id : 1,
      host : '192.168.0.46'
},
{
      _id : 2,
      host : '192.168.0.207:27017'
}
]
}




   写好config后,进行初始化:

1
> rs.initiate(config)





   如果一切正常的话,可以用rs.status()查看目前集群的状态:
   状态说明:
    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");

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
> 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)是无效的,需要执行:

1
> rs.reconfig(config);




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

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



页: [1]
查看完整版本: Mongodb的Replica Set 副本集集群搭建