• MongoDB 创建复制集与开启用户认证注意事项(转载)


    MongoDB replica set :

    A replica set in MongoDB is a group of mongod processes that maintain the same data set. Replica sets provide redundancy and high availability, and are the basis for all production deployments.

    简单的说,复制集有多个MongoDB服务器,它们有相同的数据库,如果一个服务器因为网络故障或者停电DOWN了,其他服务器可以继续提供服务,这样可以提高数据源的可靠性和健壮性。详情见这里

    MongoDB复制集包括一个PRIMARY,其他的都是SECONDARY,只有PRIMARY才能接受读写操作。PRIMARY会记录那些写的操作到一个日志当中,oplog,其他SECONDARY会按照这个日志,去操作他们的数据库来保持数据库的一致。

    搭建过程(在同一台机子尝试):

    1.新建保存复制集的目录

    先生成一些目录,用来保存数据库相关文件(比如日志、数据、配置文件)
    最终搭建成这个样子:

    -mongo_repl
           |-rs1
              |-data
              |-log
              |-conf
              |-journal
              |-diagnostic.data
           |-rs2
              |-data
              |-log
              |-conf
              |-journal
              |-diagnostic.data
           |-rs3
              |-data
              |-log
              |-conf
              |-journal
              |-diagnostic.data
    

    相关命令(在~/data/下新建)

    cd ~
    mkdir -p data/mongo_repl
    cd data/mongo_repl
    mkdir -p rs1/conf rs1/data rs1/log rs1/journal rs1/diagnostic.data
    mkdir -p rs2/conf rs2/data rs2/log rs2/journal rs2/diagnostic.data
    mkdir -p rs3/conf rs3/data rs3/log rs3/journal rs3/diagnostic.data
    

    2.生成key file(用于复制集成员之间的验证)

    Keyfiles use SCRAM-SHA-1 challenge and response authentication mechanism. The contents of the keyfiles serve as the shared password for the members. A key’s length must be between 6 and 1024 characters and may only contain characters in the base64 set.

    生成命令:

    cd ~/data/mongo_repl
    openssl rand -base64 756 > repl_set.key
    chmod 400 keyFile
    

    3.设置配置文件

    (1)设置rs1的配置文件
    vi ~/data/mongo_repl/rs1/conf/mongod.conf
    

    配置如下内容:

    systemLog:
        destination: file
        path: "~/data/mongo_repl/rs1/log/mongod.log"
        logAppend: true
    storage:
        journal:
            enabled: true
        dbPath: "~/data/mongo_repl/rs1"
    processManagement:
        fork: true
        pidFilePath: "~/data/mongo_repl/rs1/mongod.pid"
    net:
        bindIp: 0.0.0.0
        port: 19017
        maxIncomingConnections: 2000
    setParameter:
        enableLocalhostAuthBypass: false
    replication:
        replSetName: my_repl
    security:
        keyFile: "~/data/mongo_repl/repl_set.key"
    #  authorization: enabled
    
    (2)设置rs2的配置文件
    vi ~/data/mongo_repl/rs2/conf/mongod.conf
    

    配置如下内容:

    systemLog:
        destination: file
        path: "~/data/mongo_repl/rs2/log/mongod.log"
        logAppend: true
    storage:
        journal:
            enabled: true
        dbPath: "~/data/mongo_repl/rs2"
    processManagement:
        fork: true
        pidFilePath: "~/data/mongo_repl/rs2/mongod.pid"
    net:
        bindIp: 0.0.0.0
        port: 19018
        maxIncomingConnections: 2000
    setParameter:
        enableLocalhostAuthBypass: false
    replication:
        replSetName: my_repl
    security:
        keyFile: "~/data/mongo_repl/repl_set.key"
    #  authorization: enabled
    
    (3)设置rs3的配置文件
    vi ~/data/mongo_repl/rs3/conf/mongod.conf
    

    配置如下内容:

    systemLog:
        destination: file
        path: "~/data/mongo_repl/rs3/log/mongod.log"
        logAppend: true
    storage:
        journal:
            enabled: true
        dbPath: "~/data/mongo_repl/rs3"
    processManagement:
        fork: true
        pidFilePath: "~/data/mongo_repl/rs3/mongod.pid"
    net:
        bindIp: 0.0.0.0
        port: 19019
        maxIncomingConnections: 2000
    setParameter:
        enableLocalhostAuthBypass: false
    replication:
        replSetName: my_repl
    security:
        keyFile: "~/data/mongo_repl/repl_set.key"
    #  authorization: enabled
    

    注意:security.authorization:enabled注释掉了,这样进去才可以进行复制集初始化、新建用户等操作。

    4.启动复制集三个成员的mongod进程

    mongod -f ~/data/mongo_repl/rs1/conf/mongod.conf
    mongod -f ~/data/mongo_repl/rs2/conf/mongod.conf
    mongod -f ~/data/mongo_repl/rs3/conf/mongod.conf
    

    5.连接其中一个mongod,初始化复制集。

    mongo --port 19017
    
    config = { _id: "my_repl", members: [{_id: 0, host: "机子IP地址:19017"}, {_id: 1, host: "机子IP地址:19018"}, {_id: 2, host: "机子IP地址:19019"}]}
    
    rs.initiate(config)
    
    rs.status(); #查看复制集状态
    

    6.创建相关用户

    use admin
    db.createUser({user:"admin",pwd:"yourpassword",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})
    

    MongoDB规定,创建的第一个用户一定要是在admin数据库、并且角色是userAdminAnyDatabase。
    创建完第一个角色,用这个角色登录来创建其他角色。

    use admin
    db.auth("admin","yourpassword")
    db.createUser({user:"clusterAdmin",pwd:"yourpassword",roles:[{role:"clusterAdmin",db:"admin"}]})
    #这个角色可以进行复制集的管理(添加成员、查看状态等等)。
    

    7.最后

    把3份配置文件的security.authorization:true注释去掉,重启复制集。

    mongod -f ~/data/mongo_repl/rs1/conf/mongod.conf
    mongod -f ~/data/mongo_repl/rs2/conf/mongod.conf
    mongod -f ~/data/mongo_repl/rs3/conf/mongod.conf
    

    现在要登录才能查看复制集状态了。



    作者:慢游世界
    链接:https://www.jianshu.com/p/ab84b56e5ed5
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    php函数
    字符滚动效果0515复习笔记+注释
    0514复习Windows操作及DOM的使用
    超链接文字随状态改变变色2016-0514
    js笔记之影音插入0514
    js类型转换,运算符,语句
    JS学习1简介
    json文件的json.parse(data)方法时候碰到的问题
    样式属性
    css样式表0513补
  • 原文地址:https://www.cnblogs.com/xibuhaohao/p/12882666.html
Copyright © 2020-2023  润新知