跳至主要內容
MongoDB副本集部署

MongoDB副本集部署

xw大约 2 分钟MongoDB

MongoDB副本集部署

docker部署

  1. 创建目录

     mkdir -p /data/mongo/data1
     mkdir -p /data/mongo/data2
     mkdir -p /data/mongo/data3
    
  2. 启动容器

    docker run --name mongo1 -v /data/mongo/data1:/data/db -d  -p 27117:27017 mongo:4.0.6 --replSet ms
    docker run --name mongo2 -v /data/mongo/data2:/data/db -d  -p 27217:27017 mongo:4.0.6 --replSet ms
    docker run --name mongo3 -v /data/mongo/data3:/data/db -d  -p 27317:27017 mongo:4.0.6 --replSet ms
    
  3. 配置

    随便进入一个容器

     docker exec -it mongo1 bash
    

    输入mongo命令,执行一下语句

    ## 添加配置
    config={_id:"ms",members:[{_id:0,host:"124.223.63.123:27117", priority:1},{_id:1,host:"124.223.63.123:27217", priority:0.5},{_id:2,host:"124.223.63.123:27317", priority:0.8}]}
    
    ## 初始化
    rs.initiate(config);
    
    ## 查看状态
    rs.status();
    
  4. 设置权限

    去主节点添加用户

    docker exec -it mongo1 bash
    
    mongo
    
    use admin
    
    db.createUser({user: "admin",pwd: "password",roles: [ { role: "root", db: "admin" } ]})
    

    创建keyfile并授权

    ## 创建文件
    mkdir -p /data/mongo/config
    
    ## 创建keyfile
    openssl rand -base64 741 >  /data/mongo/config/mongodb.key
    
    chmod 600 /data/mongo/config/mongodb.key
    ## 授权
    chown 999  /data/mongo/config/mongodb.key 
    

    重启docker服务

    docker rm -f mongo1
    docker rm -f mongo2
    docker rm -f mongo3
    
    docker run --name mongo1 -v /data/mongo/data1:/data/db -v /data/mongo/config/mongodb.key:/mongodb.key -d -p 27117:27017 mongo:4.0.6 --replSet ms --keyFile=mongodb.key --auth
    
    docker run --name mongo2 -v /data/mongo/data2:/data/db -v /data/mongo/config/mongodb.key:/mongodb.key -d -p 27217:27017 mongo:4.0.6 --replSet ms --keyFile=mongodb.key --auth
    
    docker run --name mongo3 -v /data/mongo/data3:/data/db -v /data/mongo/config/mongodb.key:/mongodb.key -d -p 27317:27017 mongo:4.0.6 --replSet ms --keyFile=mongodb.key --auth
    
    
    

    keyFile几个注意点:

    1. 权限不能太大,不然会报“permissions on xxx are too open”
    2. 权限不能太小,不然会报“permission denied”

    从节点添加可读权限:

    mongo
    rs.slaveOk()
    

    Spring Boot连接配置

    spring:
      data"
        mongodb:
          uri:mongodb://180.76.159.126:27017,180.76.159.126:27018,180.76.159.126:27019/article db?connect=replicaSet&slaveOk=true&replicaSet=myrs
    

    格式:mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]] [/[database][?options]]

    • mongodb:// 固定的格式,必须指定
    • username:password@可选项
    • host1 必须指定一个host
    • port1 连接端口,默认27017
    • /database 连接的数据库

    连接选项:

    • replicaSet=name,验证replica set的名称。 Impliesconnect=replicaSet.

    • slaveOk=true|false,true:在connect=direct模式下,驱动会连接第一台机器,即使这台服务器不是主。在connect=replicaSet模式下,驱动会发送所有的写请求到主并且把读取操作分布在其他从服务器。false: 在connect=direct模式下,驱动会自动找寻主服务器. 在connect=replicaSet 模式下,驱动仅仅连接主服务器,并且所有的读写命令都连接到主服务器。

    • safe=true|false,true: 在执行更新操作之后,驱动都会发送getLastError命令来确保更新成功。(还要参考 wtimeoutMS).false: 在每次更新之后,驱动不

      会发送getLastError来确保更新成功。