目录

准备

主从(MS)

主机配置(master)

从机配置(slave)

副本集(mas)

  配置文件

  主节点(master)

从节点:

仲裁节点:

 启动

配置主、从、仲裁节点


准备

本文主要介绍了mongodb的集群方式,为了方便,都在一台机器上配置,数据和日志放在mongodb目录下,目录如下:

mongodb高可用集群 mongodb集群启动顺序_mongodb

其中data为存放文件的位置,log为存放日志的位置,mongo.cfg为配置文件

可能需要的命令

解压:

tar -zxvf    xxx.tar   

-C 文件位置,注意C必须大写  

文件移动并重命名:

mv   xxx   newxxx

建立文件夹的命令:

mkdir xxx

 建立文件的命令

touch xxx

 

主从(MS)

       从mongodb 4.0开始,这种集群方式就不再支持,但是4.0之前还是可以的

主机配置(master)

dbpath=/opt/mongodb/master-slave/master/data
logpath=/opt/mongodb/master-slave/master/log/mongo.log
logappend=true
fork=true
bind_ip=192.168.209.128
port=27001
master=true
source=192.168.209.128:27002

从机配置(slave)


dbpath=/opt/mongodb/master-slave/slave/data


dbpath=/opt/mongodb/master-slave/slave/data
logpath=/opt/mongodb/master-slave/slave/log/mongo.log
logappend=true 
fork=true 
bind_ip=192.168.209.128
port=27002
slave=true
source=192.168.209.128:27001


loyoyou uyu gpath=/opt/mongodb/master-slave/slave/logs/mongodb.log


然后分别启动 ,由于已经过时,不多介绍

mongod --config mongo.cfg 

 

副本集(mas)


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


  配置文件

  主节点(master)

#mongodb数据存贮的路径
dbpath=/study/mongotest/mas/master/data
#日志
logpath=/study/mongotest/mas/master/log/mongo.log 
#追加的方式记录日志
logappend=true
#replica set 的名字
replSet=shard002
##后台启动,
fork=true
#绑定的IP地址
bind_ip=0.0.0.0
#端口号
port=27100

从节点:

dbpath=/study/mongotest/mas/slave/data
logpath=/study/mongotest/mas/slave/log/mongo.log 
logappend=true
replSet=shard002
fork=true
bind_ip=0.0.0.0
port=27101

仲裁节点:

dbpath=/study/mongotest/mas/arbiter/data
logpath=/study/mongotest/mas/arbiter/log/mongo.log 
logappend=true
fork=true
bind_ip=0.0.0.0
port=27103
replSet=shard002

 启动

到三个节点对应的bin的上级目录下,启动数据库(注意配置文件一定要正确)

./bin/mongod -f mongo.cfg

   启动后会输出如下:

mongodb高可用集群 mongodb集群启动顺序_mongodb_02

 

配置主、从、仲裁节点

#连接到某一台节点
命令1>>mongo 192.168.209.128:27017
#使用admin数据库
命令2>>use admin
#配置节点
命令3>>cfg={_id:"shard002",
    members:[
    {_id:0,host:'192.168.124.222:27100',priority:1},    
    {_id:1,host:'192.168.124.222:27101',priority:9},
    {_id:2,host :'192.168.124.222:27103',arbiterOnly:true}]};
#使生效
命令4>>rs.initiate(cfg)


       cfg 是相当于设置一个变量,可以是任意的名字,当然最好不要是 mongodb 的关键字 。最外层的 _id 表示 replica set 的名字, members 里包含的是所有节点的地址以及优 先级。优先级最高(数字越大,优先级越高)的即成为主节点,即这里的 27101是主节点 。特别注意的是,对于仲裁节 点,需要有个特别的配置——arbiterOnly:true 。这个千万不能少了,不然主备模式就不能生效。 配置的生效时间根据不同的机器配置会有长有短,配置不错的话基本上十几秒内就能生效,有的配


置需要一两分钟。可以用  rs.status()查看集群的状态


连接的节点一定不能是需要配置的仲裁节点,配置了会报错

{
     "operationTime" : Timestamp(0, 0),
     "ok" : 0,
     "errmsg" : "This node, 192.168.124.222:27103, with _id 2 is not electable under the new configuration version 1 for replica set shard002",
     "code" : 93,
     "codeName" : "InvalidReplicaSetConfig",
     "$clusterTime" : {
         "clusterTime" : Timestamp(0, 0),
         "signature" : {
             "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
             "keyId" : NumberLong(0)
         }
     }
 }

      配置完后,主节点可读、可写,而从节点只读,从下图可以看出

mongodb高可用集群 mongodb集群启动顺序_mongodb高可用集群_03


logappend=true
 

    

 
fork=true 
 
bind_ip=192.168.209.12port=27002 
 
slave=e 
 
source=192.168.209.128:27001