日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

mongodb带认证的副本集搭建

發布時間:2024/4/15 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mongodb带认证的副本集搭建 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Mongodb副本集帶用戶認證的

概述

本次實驗是在一臺虛擬機上做的,正式環境一定要分開實現,以免影響服務的正常使用和性能。

準備工作:

操作系統:centos7.2

Mongodb版本:3.4.1

服務器ip:192.168.1.11

Mongodb服務端口: 27017、27018、27019

?

1、???? 首先將下載好的mongodb的安裝包上傳到服務器上

?? mongodb-linux-x86_64-rhel70-3.4.1.tgz

?

2、???? 創建所用到的目錄

??? # mkdir /data/{master,slave,arbiter}

??? # mkdir /data/log/mongodb/{master,slave,arbiter} -p

?

3、???? 將剛上傳的mogodb的安裝包解壓到/data目錄并重命名為mongodb

# tar xf mongodb-linux-x86_64-rhel70-3.4.1.tgz

# mv mongodb-linux-x86_64-rhel70-3.4.1?? mongodb

?

4、???? 分別在/data的相應目錄下創建master、slave、arbiter的配置文件

# cat? master.conf

?systemLog:

? destination: file

? logAppend: true

? path: /data/log/mongodb/master/mongodb.log

storage:

? dbPath: /data/master

? journal:

??? enabled: true

processManagement:

? fork: true? # fork and run in background

? pidFilePath: /var/run/mongod.pid

net:

? port: 27017

?# bindIp: 0.0.0.0? # Listen to local interface only, comment to listen on all interfaces.

replication:

?? replSetName: rs1

?? oplogSizeMB: 5000

security:

?keyFile: "/data/mongodb.key"

?clusterAuthMode: "keyFile"

?authorization: "enabled"

# cat? slave.conf

systemLog:

? destination: file

? logAppend: true

? path: /data/log/mongodb/slave/mongodb.log

storage:

? dbPath: /data/slave

? journal:

??? enabled: true

processManagement:

? fork: true? # fork and run in background

? pidFilePath: /var/run/mongod.pid

net:

? port: 27018

?# bindIp: 0.0.0.0? # Listen to local interface only, comment to listen on all interfaces.

replication:

? replSetName: rs1

? oplogSizeMB: 5000

security:

? keyFile: "/data/mongodb.key"

? clusterAuthMode: "keyFile"

? authorization: "enabled"

?

# cat? arbiter.conf

systemLog:

? destination: file

? logAppend: true

? path: /data/log/mongodb/arbiter/mongodb.log

storage:

? dbPath: /data/arbiter

? journal:

??? enabled: true

processManagement:

? fork: true? # fork and run in background

? pidFilePath: /var/run/mongod.pid

net:

? port: 27019

?# bindIp: 0.0.0.0? # Listen to local interface only, comment to listen on all interfaces.

replication:

? replSetName: rs1

? oplogSizeMB: 5000

security:

? keyFile: "/data/mongodb.key"

? clusterAuthMode: "keyFile"

? authorization: "enabled"

?

5、???? 由于需要認證,使用keyFile進行授權連接replica sets

創建mongodb.key

# openssl rand -base64 666 > mongodb.key # chmod 600 mongodb.key

Mongodb.key里面密碼的長度不能超過1024,否則會報錯。

?

將生成的mongodb.key文件分別拷貝到其他服務器上。

?

6、???? 啟動服務

??? 啟動服務沒有先后順序

??? # mongod -f /data/arbiter/arbiter.conf

# mongod -f /data/master/master.conf

# mongod -f /data/slave/slave.conf

?

7、???? 配置主,備,仲裁節點

?? 連接任意一個節點,這里以2017端口為例:

?? # mongo 192.168.1.11:27017

?? >use admin

?? >cfg={_id:"rs1",members:[{_id:0,host:'192.168.1.11:27017',priority:2},{_id:1,host:'192.168.1.11:27018',priority:1},{_id:2,host:'192.168.1.11:27019',arbiterOnly:true}]};

?? > rs.initiate(cfg)????????? #使配置生效

?

# cfg是可以任意的名字,當然最好不要是mongodb的關鍵字,conf,config都可以。最外層的_id表示replica set的名字,members里包含的是所有節點的地址以及優先級。優先級最高的即成為主節點,即這里的'192.168.1.11:27017'。特別注意的是,對于仲裁節點,需要有個特別的配置——arbiterOnly:true。這個千萬不能少了,不然主備模式就不能生效。

上面的命令執行成功會返回1.

?

8、???? 接下來是在主上進行一系列的操作,創建用戶。Mongo默認沒有管理用戶。

# mongo 192.168.1.11:27017

>use admin

>db.createUser({user:"hqmg",pwd:"huoqiu123",roles:[{role:"userAdminAnyDatabase",db:"admin"},{role:"clusterAdmin",db:"admin"}]});

?

額,報錯了。原因是沒有執行認證操作。

>db.auth("hqmg","huoqiu123")

這下好了,可以放心的執行操作了

>show dbs

admin?? 0.000GB

local?? 0.000GB

?????

9、???? 創建數據庫并創建用戶,為用戶賦予不同的權限,常用的兩種:

read: 只讀權限; readWrite:讀寫權限

  • 數據庫用戶角色:read、readWrite;
  • 數據庫管理角色:dbAdmin、dbOwner、userAdmin;
  • 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
  • 備份恢復角色:backup、restore;
  • 所有數據庫角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
  • 超級用戶角色:root // 這里還有幾個角色間接或直接提供了系統超級用戶的訪問(dbOwner 、userAdmin、userAdminAnyDatabase)
  • 內部角色:__system
角色說明:
Read:允許用戶讀取指定數據庫
readWrite:允許用戶讀寫指定數據庫
dbAdmin:允許用戶在指定數據庫中執行管理函數,如索引創建、刪除,查看統計或訪問system.profile
userAdmin:允許用戶向system.users集合寫入,可以找指定數據庫里創建、刪除和管理用戶
clusterAdmin:只在admin數據庫中可用,賦予用戶所有分片和復制集相關函數的管理權限。
readAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀權限
readWriteAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀寫權限
userAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的userAdmin權限
dbAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的dbAdmin權限。
root:只在admin數據庫中可用。超級賬號,超級權限

用戶和授權認證是跟隨數據庫的,在那個庫里面創建的用戶,就要在那里授權認證。

!創建一個測試庫,并分別創建只讀、讀寫的用戶。

?????? 如果是新的庫,要先登陸admin庫,進行認證后才可以操作

?????? # mongo? 192.168.1.11:27017 –uhqmg ?-phuoqiu123

?????? >use saturn

?????? 創建讀寫用戶:

?????? >db.createUser({user:"cuishuai",pwd:"cuishuai123",roles:[{role:"readWrite",db:"saturn"}]})

???????

??????? 創建只讀用戶:

?????? >db.createUser({user:"azui",pwd:"azui123",roles:[{role:"read",db:"saturn"}]})

?

10、?? 修改用戶權限

有兩種方式,一種是db.grantRolesToUser在原有基礎上追加,一種是db.updateUser替換原有的角色。

1)>db.grantRolesToUser("azui",[{role:"readWrite",db:"saturn"}])

2) >db.updateUser("azui",{roles:[{role:"readWrite",db:"saturn"}]})

11、?? 刪除用戶權限

>db.revokeRolesFromUser("azui",[{role:"readWrite",db:"saturn"}])

?

12、oplog讀權限

????

Oplog是一種特殊的Capped collections,特殊之處在于它是系統級Collection,記錄了數據庫的所有操作,集群之間依靠Oplog進行數據同步。Oplog的全名是local.oplog.rs,位于local數據下。由于local數據不允許創建用戶,如果要訪問Oplog需要借助其它數據庫的用戶,并且賦予該用戶訪問local數據庫的權限:

?

1)修改現有用戶,使其具有oplog的讀權限:

> db.grantRolesToUser("azui",[{role:"read",db:"local"}])

?

2)創建新用戶:

>db.creatUser({user:"azui",pwd:"azui123",roles:[{role:"read",db:"saturn"},{role:"read",db:"local"}]})

})

3)查詢過程:

>use? saturn

>db.auth('azui','azui123')

>use local

>db.oplog.rs.find()

?

13、?? 接下來還有重要的一步,日志分割,使用的是logrotate做的。

# cat /etc/logrotate.d/mongodb

/data/log/mongodb/arbiter/mongodb.log{

???????????? daily

???????????? dateext

???????????? compress

???????????? delaycompress

???????????? copytruncate

???????????? create 0644 root root

???????????? rotate 5

???????????? size 500M

}

/data/log/mongodb/master/mongodb.log{

???????????? daily

???????????? dateext

???????????? compress

???????????? delaycompress

???????????? copytruncate

???????????? create 0644 root root

???????????? rotate 5

???????????? size 500M

}

/data/log/mongodb/slave/mongodb.log{

???????????? daily

???????????? dateext

???????????? compress

???????????? delaycompress

???????????? copytruncate

???????????? create 0644 root root

???????????? rotate 5

???????????? size 500M

}

?

添加周期計劃任務:

# crontab –e

0 */3 * * *? /usr/sbin/logrotate? /etc/logrotate.d/mongodb 2>&1 >>/dev/null

?

14、?? 編寫刪除腳本

# cat rmlog.sh

#!/bin/bash

dir1=/data/log/mongodb/arbiter

dir2=/data/log/mongodb/master

dir3=/data/log/mongodb/slave

find $dir1 -mtime +7 -name "*2017*" -exec rm -rf {} \;

find $dir2 -mtime +7 -name "*2017*" -exec rm -rf {} \;

find $dir3 -mtime +7 -name "*2017*" -exec rm -rf {} \;

# chmod +x rmlog.sh

添加周期計劃任務:

# crontab –e

??? 0 */3 * * * /root/cuishuai/rmlog.sh? 2>&1 >>/dev/null

轉載于:https://www.cnblogs.com/cuishuai/p/7193349.html

總結

以上是生活随笔為你收集整理的mongodb带认证的副本集搭建的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。