MongoDB——Ubuntu安装及配置带认证的副本集(亲测)

一、概述

  1. 介绍: 在做 MongoDB 数据备份时,需要进行数据的复制冗余,此时可以用副本集,并且为了传输安全,需要加上认证。我的 MongoDB 版本是 4.0.18,都是本人亲自打过的命令,被网上的卡了很久。

二、安装 MongoDB

  1. 导入公钥
    sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
    
  2. 在源列表中添加一个新的仓库,以便你可以安装 MongoDB 社区版并获得自动更新
    echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu $(lsb_release -cs)/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list
    
  3. 要安装 mongodb-org,我们需要更新我们的包数据库,以便系统知道可用的新包
    sudo apt update
    
  4. 安装最新稳定版的 MongoDB
    sudo apt install -y mongodb-org
    
  5. 此时 MongoDB 已经配置完成,包管理器将创建 /var/lib/mongodb/var/log/mongodb/etc/mongod.conf 为配置文件。
    # 1. 启动
    sudo service mongod start
    # 2. 停止
    sudo service mongod stop
    # 3. 重启
    sudo service mongod restart
    
  6. 进行连接,直接运行命令就可以进入了
    mongo
    

三、设置 MongoDB 的密码

  1. 先进入 Mongodb ,然后使用 admin 库
    use admin;
    
  2. 创建管理员账户(应该可以在此处直接创建 root 用户,请提前看下面的第 三 部分 5 小点
    db.createUser({user:'xjf', pwd:'123456', roles:[{role:'userAdminAnyDatabase', db:'admin'}]});
    
  3. 验证是否创建成功,只需退出然后进入验证,如果返回 1 则代表成功。下面为效果
    > use admin
    switched to db admin
    > db.auth('xjf','123456');
    1
    

四、生成 keyFile(认证文件)及配置

  1. 生成
    openssl rand -base64 756> /root/keyfile
    
    说明:①756是文件大小 。②/mongo/mongo.key: 文件存放路径。
  2. 修改权限(被坑很久)
    网上都是说修改权限为 600 ,但是我怎么都不行,就是如下的命令。
    chmod 600 /mongo/mongo.key
    
    经过很久的摸索,发现下面的语句对我才管用
    chown -R mongodb:mongodb /mongo/mongo.key
    
  3. 该认证文件需要复制到每个从主机上。可以使用传输命令
    scp -r mongo.key  root@192.168.204.103:/mongokey/mongo.key
    
  4. 修改配置文件,大多配置没变动,主要实现副本集。如下:
    storage:
      dbPath: /var/lib/mongodb
      journal:
        enabled: true
    
    systemLog:
      destination: file
      logAppend: true
      path: /var/log/mongodb/mongod.log
    
    net:
      port: 27017
      # 此处改动,配置为 0.0.0.0 才能外部访问
      bindIp: 0.0.0.0
    
    
    # how the process runs
    processManagement:
      timeZoneInfo: /usr/share/zoneinfo
    
    # 改动
    security:
      # 开启认证
      authorization: enabled
      # 认证文件的路径
      keyFile: "/mongo/mongo.key"
      clusterAuthMode: keyFile
    
    #operationProfiling:
    
    # 改动
    replication:
      oplogSizeMB: 10240
      # 副本集名称
      replSetName: rs
    

五、配置副本集

  1. 将上面的配置文件修改好后,保存退出。
  2. 重启 Mongo 服务
    sudo service mongod restart
    
  3. 查看启动日志文件
    cat /var/log/mongodb/mongod.log
    
  4. 将上面的操作在每个主机上执行。接下来才开始主菜
  5. 重启后需要进行账户验证, 即使用我们上面设置账号密码
    # 选择为 admin
    use admin;
    # 进行认证
    db.auth('xjf','123456');
    
    注意: 进来之后发现执行 rs.status() 命令权限不够,需要创建 root 用户,此时能直接进行创建:
    db.createUser({user:'root',pwd: '123456',roles:[{role:'root',db:'admin'}]});
    
    然后再进行认证:
    db.auth('root','123456');
    
  6. 在要成为 主节点 的服务器上进行操作
    # 初始化,此处为了方便演示增加服务,故初始化时只加了一台
    rs.initiate({_id:'rs',members:[{_id:0, host:'192.168.204.102:27017'}]});
    
  7. 查看状态, 使用 rs.status() 命令能查看状态,如下
    rs.status();
    
    在这里插入图片描述
  8. 添加副本服务器信息
    rs.add({host:'192.168.204.103:27017',priority:0,votes:0})
    
  9. 不出意外,此时应该是配置成功了。(如果是阿里云这样的服务器,记得开放端口)。查看状态
    在这里插入图片描述
  10. 此时去从服务器也是需要到 admin 进行认证。并且执行命令会出现下面的情况
    在这里插入图片描述
    这是因为从服务器不允许读写。此时的解决办法是执行下面的命令:
    db.getMongo().setSlaveOk();
    
    再执行命令就可以执行了。

六、测试

  1. 在主库执行下面的命令,插入数据
    use test
    db.user.insert({name:'xjf'});
    db.user.find()
    
    显示如下:
    主库
  2. 在从库进行数据查询
    在这里插入图片描述
    能看到这样的情况,代表我们配置成功了。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值