mongodb部署复制集

下载

  • https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-5.0.21-rc0.tgz
  • 说明:因为mongodb6.0以后调整了mongo命令行的方式,所以为了看到教程,暂时采用mongo的5.0版本
  • 通过rz 上传到linux服务器上
  • 完整的mongo下载链接:https://www.mongodb.com/download-center/community/releases

配置

  • 解压tgz文件
    • tar zxvf mongodb-linux-x86_64-rhel70-3.6.3.tgz

启动

  • 方法1:

    • 启动三个实例出来
    • /home/mongodb/mongodb/bin/mongod --replSet rs --dbpath /data/mongodb/rs1 --port 27017 --fork --logpath ./rs1/mongod.log --bind_ip_all
    • /home/mongodb/mongodb/bin/mongod --replSet rs --dbpath /data/mongodb/rs2 --port 27018 --fork --logpath ./rs2/mongod.log --bind_ip_all
    • /home/mongodb/mongodb/bin/mongod --replSet rs --dbpath /data/mongodb/rs3 --port 27019 --fork --logpath ./rs3/mongod.log --bind_ip_all
    • 查看端口情况:netstat -anop | grep 2701
    • 方案不可行,不考虑
  • 方法2(本次采用的是方法2):

    • 创建三个目录 mkdir rs{1,2,3}
    • 分别创建三个conf文件,如下:
      systemLog:
          destination: file
          path: c:\data1\mongod.log  # 日志文件路径
          logAppend: true
      storage:
          dbPath: c:\data1 # 数据目录
      net:
          bindIp: 0.0.0.0
          port: 28017    # 端口
      replication: 
           replSetName: rs0
      
    • 分别执行:mongod -f c:\data1\mongod.conf
    • 使用netstat -nalp|grep 2801 查看端口的监听情况
  • 遇到的问题

    • 1.在执行mongod 指令的时候报错:“code”:9001,“codeName”:“SocketException”,“errmsg”:“setup bind :: caused by :: Address already in use” 和问题.{“code”:26,“codeName”:“NamespaceNotFound” 执行一个实例的时候有这样的报错
      • 原因是:用错了指令,应该用mongo来启动,而不是使用mongod来启动
      • 参考:https://developer.aliyun.com/article/851136
    • 2.按照1的方式设置了mongo启动,并且创建了主从节点的设置,实际是没有生效的,错误信息是:mongo “codeName” : “NotYetInitialized”
      • 使用下面的方法设置就是成功的
      > use admin  
      > config={  
      _id:'abcops_repl',  
      members:[  
      {_id: 0, host: '10.211.55.12:27017',priority:2},  
      {_id: 1, host: '10.211.55.12:27018',priority:1},  
      {_id: 2, host: '10.211.55.12:27019',arbiterOnly:true},  
          ]  
      }  
      > rs.initiate(config)  
      
  • 说明:

    • 从mongo6.0开始取消了对mongo的命令行支持,而改用了一个新的方式 MongoDB Shell
      • 具体的mongodb shell下载路径是:https://www.mongodb.com/try/download/shell

设置

  • 使用命令mongo --port 28017 进入mongo的命令控制台
  • 注意,在mongo6.0版本之后,不是使用mongo进入,而是另外一个工具来处理了
  • 执行如下的指令:
    > use admin  
    > config={  
    _id:'abcops_repl',  
    members:[  
    {_id: 0, host: '10.211.55.12:27017',priority:2},  
    {_id: 1, host: '10.211.55.12:27018',priority:1},  
    {_id: 2, host: '10.211.55.12:27019',arbiterOnly:true},  
        ]  
    }  
    > rs.initiate(config)  
    
    • 命令执行后
      • db.isMaster() 判断是否是主节点
      • rs.conf() 查看集群中的成员配置
      • rs.status() 查看集群成员的状态
      • rs.add(“10.211.55.12:27020”) 增阿一个新节点
      • rs.addArb(“10.211.55.12:27020”) 增阿一个新的仲裁节点
      • rs.remove(“10.211.55.12:27020”) 删除一个节点
      • rs.slaveOk() 允许在副本节点上进行查询,设置之后才能查看主节点复制过来的数据
      • db.createUser 增加一个用户

测试

  • 登录主测试节点
use test
db.test.insert({age:34, name:"admin"})
  • 登录从测试节点
rs.slaveOk()
use test
db.test.find()
- 即可看到具体的数据已经在从库中有展示了
  • 验证数据的正确性
  • 在构建分布式的集群的时候,发现添加一个集群是失败了,原因是没有关闭防火墙导致,需要开放防火墙的端口

关闭mongod

  • 通过mongo 进入命名行
  • 使用命令如下:
    • use admin
    • db.shutdownServer()
  • 主从复制集的关闭时,如果关闭了主节点,则其他节点就会重新选举一个新的从节点为主节点
  • 复制集节点的关闭流程
  • 在关闭第二个主节点的时候,报错No electable secondaries caught up,说明已经没有再关闭这个副本集了
  • 暂时还没有发现有什么特别好的方式关闭整个的副本集,后续发现了再补充
  • 我的关闭副本集的操作是:
    • 1.关闭第一个主节点
    • 2.关闭一个arbitra 仲裁节点
    • 3.此时最后一个节点就从主节点退化成了从节点,使用上面的命令关掉即可

参考链接

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值