zoukankan      html  css  js  c++  java
  • mongo复制集

    #!/bin/bash
    port=(
    27017
    27018
    27019
    )
    ips=(
    10.0.1.167
    )
    
    #download mongo
    func_download_mongo(){
    wget 'https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1404-4.0.5.tgz'
    tar xf mongodb-linux-x86_64-ubuntu1404-4.0.5.tgz 
    mv mongodb-linux-x86_64-ubuntu1404-4.0.5/bin/* /usr/local/sbin/
    }
    
    # create directory, config file
    func_create_file(){
    openssl rand 756 -base64  > /tmp/keyfile
    for  i in ${port[@]}; 
    do 
    mkdir -p /data/mongo/$i/{config,db,log}
    
    cat > /data/mongo/$i/config/mongod.conf <<'EOF'
    systemLog:
      destination: file
      path: /data/mongo/mongo_port/log/mongodb.log
      logAppend: true
      logRotate: rename
    storage:
      journal:
        enabled: true
      dbPath: /data/mongo/mongo_port/db
      directoryPerDB: true
      wiredTiger:
        engineConfig:
          directoryForIndexes: true
        collectionConfig:
          blockCompressor: zlib
        indexConfig:
          prefixCompression: true
    processManagement:
      fork: true
      pidFilePath: /data/mongo/mongo_port/mongod.pid
      timeZoneInfo: /usr/share/zoneinfo
    net:
      port: mongo_port
      bindIp: 0.0.0.0
    replication:
      oplogSizeMB: 2048
      replSetName: test01
    security:
      keyFile: /data/mongo/mongo_port/keyfile
      clusterAuthMode: keyFile
      authorization: disabled
    
    EOF
    sed -i -e "s/mongo_port/${i}/g" /data/mongo/$i/config/mongod.conf
    cp -v /tmp/keyfile /data/mongo/$i/keyfile
    chmod 600 /data/mongo/$i/keyfile 
    done
    }
    
    #start mongo
    func_start_mongo(){
    for  i in ${port[@]}; 
    do 
    /usr/local/sbin/mongod -f /data/mongo/$i/config/mongod.conf --auth
    #mongod -f /data/mongo/$i/config/mongod.conf --auth --bind_ip_all
    done
    }
    
    func_shutdown(){
    for  i in ${port[@]};
    do
    /usr/local/sbin/mongod -f /data/mongo/$i/config/mongod.conf --shutdown
    done
    }
    
    func_create_file
    func_start_mongo
    
    #func_shutdown
    
    
    #配置replicaset
    # config={"_id":"rep01","members":[{"_id":0,"host":"10.0.1.167:27017","priority":20},{"_id":1,"host":"10.0.1.167:27018","priority":10},{"_id":2,"host":"10.0.1.167:27019","priority":10}]}
    ##chen={"_id":"0","members":[{"_id":0,"host":"10.0.1.167:27017","priority":100},{"_id":1,"host":"172.16.10.29:27018","priority":100},{"_id":2,"host":"172.16.10.29:27019","priority":0},{"_id":3,"host":"172.16.10.29:27020","arbiterOnly":true}]}
    # rs.initiate(config)  # 初始化
    # rs.status()  # 查看状态
    #默认MongoDB复制集的从节点是不能读取数据的,但是可以使用命令来允许能够在从节点读取数据
    # rs.slaveOk() 
    
    #查看复制集状态信息
    #  rs.help 
    #  rs.printReplicationInfo()        #查看oplog日志文件的大小及时间范围
    #  rs.printSlaveReplicationInfo()   #查询节点及节点复制的时间
    
    #关闭节点服务
    # use admin            #在复制集的从节点上做
    # db.shutdownServer()  #关闭服务,此时再想登陆该节点则会失败
    
    #节点退出复制集
    #注销掉replication的值和修改port值,将其作为单实例启动
    # vim /etc/mongod2.conf
    # #replication:
    # #  replSetName: rep01
    # port: 27028
    # mongod -f mongod.conf   #启动实例,此时该实例不属于复制集
    
    #完全备份oplog日志
    #mongodump --port 27028 --db local --collection 'oplog.rs'
    
    #删除节点中oplog文件
    #> use local
    #> db.oplog.rs.drop()
    
    
    #部署认证复制
    #创建管理用户
    #>use admin
    #>db.createUser({"user":"root","pwd":"123123","roles":["root"]})
    
    #配置密钥验证
    #为了使其他的节点还能够和主节点进行同步,创建密钥文件使其他节点能够同步
    #创建验证文件
    # cd /usr/bin/
    # echo "chenrs key"> chenrskey1
    # echo "chenrs key"> chenrskey2
    # echo "chenrs key"> chenrskey3
    # echo "chenrs key"> chenrskey4    //密钥内容自定义,但是要保证内容的一致性
    # chmod 600 chenrskey{1..4}        //设置文件权限,不设置在接下来的启动中会报错
    
    #修改配置文件,开启mongodb的安全验证功能(四个配置文件都要修改,注意内容差异)
    #vim /etc/mongod.conf
    #security:
    #keyFile: /usr/bin/chenrskey1     //每个节点的验证文件不同,要根据不同的节点修改
    #clusterAuthMode: keyFile        //认证类型,密钥文件认证
    
    #重启服务
    #mongod -f /etc/mongod.conf --shutdown
    #mongod -f /etc/mongod.conf              /其他几台的重启方式都相同,重复操作即可
    
    #身份验证登陆(先验证主,再验证从)
    #当你直接使用登陆命令登陆系统时,使用show dbs 是不能够查看数据的,此时就需要使用身份验证
    #mongo --port 27018
    #>use admin
    #>db.auth("root","123123")
    
    #修改权重
    #>cfg = rs.conf()
    #:PRIMARY> cfg.members[0].priority = 20 
    #:PRIMARY> cfg.members[1].priority = 15
    #:PRIMARY> cfg.members[2].priority = 10
    #:PRIMARY> rs.reconfig(cfg)
    
    #Verify the current size of the oplog
    #>use local
    #>db.oplog.rs.stats().maxSize
    
    #reference:
    #https://docs.mongodb.com/manual/tutorial/change-oplog-size/
    #http://blog.51cto.com/13643643/2144954
    #http://blog.51cto.com/zero01/2059033
    

      

  • 相关阅读:
    python之matplotlib库中pyplot的基本使用(python数据分析之绘制图形)
    小球称重问题~通过三次称重找出十二个小球质量不一样的小球,并判断小球轻重
    python爬虫—爬取英文名以及正则表达式的介绍
    Python爬取酷狗飙升榜前十首(100)首,写入CSV文件
    Requests库主要方法解析以及Requests库入门需要掌握的框架
    彻底理解Java中的21种锁!
    JavaIO流常见面试题
    Linux常用命令
    语言学习网
    类加载器的命名空间
  • 原文地址:https://www.cnblogs.com/rootid/p/10245155.html
Copyright © 2011-2022 走看看