mongodb集群

1、MongoDB集群之复制集

1.1、简介

  - Mongogdb至少需要两个节点,其中一个是主节点,负责处理客户端请求,其余的都从节点,负责复制主节点上的数据

  - 建议提供仲裁节点,此节点不存储数据,作用是当主节点出现故障时,选举出某个备用节点作为主节点,保证Mongodb的

  - 正常服务。客户端只需要访问主节点或从节点,不需要访问仲裁节点。

  - Mongodb各个节点觉的搭配方式:一主一从一仲裁,一主多从一仲裁, 一主多从多仲裁

  - 主节点记录要在其上的所有操作oplog(操作日志), 从节点定期轮询主节点获取这些操作,然后对自己的副本执行这些操作

  - 从而保证从节点的数据和主节点保持一致

1.2 复制3份mongodb安装文件(我使用的是编译好的,直接复制就能使用使用版本3.6.8)

配置文件 

# fork=true                                                                        #  启动子进程(也就是后台启动)
dbpath=D:\mongodb\mongodb-3.6.8\data       #  数据存放的路径 
logpath=D:\mongodb\mongodb-3.6.8\log\mongod.log            #  日志存放的路径
logappend=true                                                             #   日志以追加的方式记录
bind_ip_all=true                 #   允许任何人或ip访问
bind_ip=0.0.0.0
port=27117                   #   端口
replSet=rs                                                                      #  集群名(所有在这个集群里面的都得是一个名称(自己随意取))
# pidfilepath=/usr/local/mongodb/pids/rs/primary.pid        #  进程id存放的路径文件(文件名自动生成)
# oplogSize=1000                                                             # 日志的大小(M)
# directoryperdb=true                                                       #   为true时表示每个数据库中的数据都分另放在对应的目录中,而不是一股脑的全放在一个目录中

启动节点

自己做的bat文件

D:\mongodb\mongodb-3.6.8\bin\mongod.exe -f D:\mongodb\mongodb-3.6.8\conf\mongod.conf

使用mongo命令进入主节点

> use admin

>rs.initiate(
{
 _id: "rs",
 members: [
  { _id : 0, host : "192.168.1.55:27017","priority": 3 }, # priority表示优先级  谁优先级高仲裁就选谁为主节点,如果优先级一样,仲裁随机选举,如果有多个仲裁就投票选举
  { _id : 1, host : "192.168.2.210:27017","priority": 2 },
  { _id : 2, host : "192.168.2.210:27018","arbiterOnly": true } # 仅仅是仲裁
 ]
}
)

出现以下内容表示集群配置成功     

      {
        "ok" : 1,
        "$clusterTime" : {
          "clusterTime" : Timestamp(1607434424, 1),
          "signature" : {
            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
            "keyId" : NumberLong(0)
          }
        },
        "operationTime" : Timestamp(1607434424, 1)
      }

> rs.isMaster()   # 查看集群节点的信息

rs.isMaster()输入后节点名称也变了

其他节点不需要配置命令,直接isMaster()就可以看到配置信息

当我们关闭主节点后,查询从节点可以看到标识已经改变:

 

 

集群搭建好后的注意事项:

  默认情况下直接连接从节点是无法查询数据的(db.集合名称.find()报错)。因为从节点是不可读的。如果需要在从节点上读取数据,

  则需要在从节点控制台输入命令rs.slaveOk(true|false)来设置。rs.slaveOk()或rs.slaveOk(true)代表可以在从节点上做读操作,

  rs.slaveOk(false)代表不可以在从节点上做读操作。

  slaveOk()函数已经过时,推荐使用的是db.getMongo().setReadPref("nearest")来设置读操作。此函数在secondary节点中执行。参数

  可选值包括:primary(主节点读)、primaryPreferred(优先主节点中读)、secondary(从节点读)、 secondaryPreferred(优先从节点中读)、nearest(在最近的节点中读)。 

参考:https://www.cnblogs.com/xiongfanyong/articles/14100171.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值