真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

MongoDB集群之復制集集群架構(gòu)簡介及部署

  • 復制集介紹
  • 復制集群架構(gòu)
  • 投票選舉機制
  • 復制集群成員說明
  • 優(yōu)先級為0復制集成員
  • 仲裁節(jié)點架構(gòu)
  • 復制集集群環(huán)境部署
    • 環(huán)境說明
    • 前期準備
    • 環(huán)境配置
    • 配置文件
    • 啟動MongoDB實例
  • 配置復制集
  • 復制集常用命令
  • 修改優(yōu)先級
  • 復制測試
  • 創(chuàng)建復制集中的賬戶
    • 用戶中權(quán)限的說明
  • 為復制集集群添加權(quán)限認證
    • 添加安全認證配置
    • keyfile文件操作
  • 認證驗證
  • 客戶端驗證
  • 參考文獻

復制集介紹

MongoDB中的復制集(也被稱為副本)是一組維護相同數(shù)據(jù)集的mongod進程。副本集提供冗余性及和高可用,是所有生產(chǎn)部署的基礎(chǔ)。
簡單來說,復制集有多臺MongoDB組成的一個集群,集群中有一個主節(jié)點(Primary)和N個副本節(jié)點(Secondary)等,它們有相同的數(shù)據(jù)庫,假如主MongoDB服務(wù)器或者MongoDB實例Down機之后,其它的副本服務(wù)器可以繼續(xù)提供服務(wù),實現(xiàn)數(shù)據(jù)的高可用及可靠性。

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計制作、成都網(wǎng)站建設(shè)、方山網(wǎng)絡(luò)推廣、微信小程序開發(fā)、方山網(wǎng)絡(luò)營銷、方山企業(yè)策劃、方山品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)為所有大學生創(chuàng)業(yè)者提供方山建站搭建服務(wù),24小時服務(wù)熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com

復制集群架構(gòu)

術(shù)語介紹:

術(shù)語類型描述
Primary 主節(jié)點 負責整個集群的讀寫操作,包含了所有改變操作的日志
Secondary 備節(jié)點 同步主服務(wù)器所有的數(shù)據(jù),負責集群的讀取請求,主服務(wù)器宕機可以稱為主節(jié)點
Arbiter 仲裁者 在主節(jié)點宕機后只進行投票,不參與選舉,不同步主節(jié)點數(shù)據(jù)

MongoDB集群之復制集集群架構(gòu)簡介及部署?

此架構(gòu)由一個Primary節(jié)點和兩個Secondary節(jié)點組成

1)Primary節(jié)點為主節(jié)點,所有的寫操作或者更改操作都只能從Primary節(jié)點中操作(復制集內(nèi)的所有成員都可以接收讀操作,但是,默認情況下,應(yīng)用程序?qū)⑵渥x操作指向主成員),主節(jié)點上所有的更改及寫操作都會記錄到oplog日志中。
2)兩臺Secondary節(jié)點復制Primary節(jié)點的oplog日志,通過異步的方式去執(zhí)行oplog日志中的記錄來和Primary節(jié)點達到數(shù)據(jù)一致性。
3)oplog作用主要是記錄主節(jié)點的寫入操作,充當復制源。

MongoDB集群之復制集集群架構(gòu)簡介及部署?

4)如果Primary節(jié)點無故Down機之后,復制集集群會通過投票機制在兩臺Secondary中選舉一臺升級為Primary節(jié)點。

投票選舉機制

MongoDB節(jié)點之間維護心跳檢查,主節(jié)點選舉由心跳觸發(fā)。

心跳檢查
MongoDB復制集成員會向自己之外的所有成員發(fā)送心跳并處理響應(yīng)信息,因此每個節(jié)點都維護著該節(jié)點看到的其它所有節(jié)點的狀態(tài)信息,節(jié)點根據(jù)自己的集群狀態(tài)判斷是否需要更新新的Primary。
在實現(xiàn)的時候主要由兩個異步的過程分別處理心跳響應(yīng)和超時,每個復制集成員都會在后臺運行與復制集所有節(jié)點的心跳線程,在以下幾種情況下會觸發(fā)狀態(tài)檢測過程:

  • Secondary節(jié)點權(quán)重(Priority)比Primary節(jié)點高時,發(fā)起替換選舉;
  • Secondary節(jié)點發(fā)現(xiàn)集群中沒有Primary時,發(fā)起選舉;
  • Primary節(jié)點不能訪問到大部分成員時主動降級,降級操作會斷開連接,終止用戶請求等;
  • 復制集成員心跳檢測結(jié)果發(fā)生變化,比如某個節(jié)點掛了或者新增節(jié)點,發(fā)起重新投票選舉規(guī)則;
  • 超過4s沒有執(zhí)行狀態(tài)檢測過程,發(fā)起替換選舉;

選舉發(fā)起
發(fā)起選舉的節(jié)點首先需要做一些條件判斷,維護主節(jié)點的有N個備用節(jié)點,備用節(jié)點中的所有節(jié)點都可能被選舉成為主節(jié)點,成為主節(jié)點前每個備節(jié)點都會檢測自身以及全局條件是否滿足,檢測條件如下:

  1. 是否看見復制集中是否有Majority在線
  2. 自身Priority是否大于0
  3. 自身不為arbiter
  4. 自身opTime不能落后于最新節(jié)點10s以上
  5. 自身存儲的集群程序按信息為最新

如果所有條件滿足,則將自身添加到主節(jié)點的備用列表中,否則,將自身從列表中移除

自身檢測

  • MongoDB選舉需要獲得大多數(shù)投票才能通過,如果沒有節(jié)點投反對票,且獲得成票數(shù)超過有權(quán)投票節(jié)點總數(shù)的1/2,則能成為Primary。否則進入下一輪選舉。為避免陷入無限重復選舉,MongoDB建議復制集的成員個數(shù)為奇數(shù),當Secondary為雙數(shù)時,可以增加一個Arbiter節(jié)點。
  • 選舉過程中,復制集沒有主節(jié)點,所有成員都是只讀狀態(tài)
  • 選舉過程很復雜,一般情況下需要5s左右進行選主。
  • 如果新選擇的主節(jié)點立刻掛掉,至少需要30s時間重新選主。

大多數(shù)的定義
 假設(shè)復制集內(nèi)投票成員數(shù)量為N,則大多數(shù) = N/2 + 1 ,當復制集內(nèi)存活成員數(shù)量不足大多數(shù)時,整個復制集將無法選舉出Primary,復制集將無法提供寫服務(wù),處于只讀狀態(tài)。
 我們按照上面的架構(gòu)來舉例,三臺MongoDB,一臺Primary,兩臺Secondary,主節(jié)點掛了之后,只有兩臺Secondary可以投票,根據(jù)公式我們來算 “2/2 + 1 = 2”,也就是算大多數(shù)等于2,但是當復制集內(nèi)存活的成員數(shù)量不足大多數(shù)時,我們的大多數(shù)為2,集群成員也為2,所以這兩臺集群成員會發(fā)起選舉投票機制,如果兩臺Secondary節(jié)點自身條件都滿足的情況下,則先發(fā)起選舉節(jié)點的成員成為Primary節(jié)點
 

投票成員數(shù)大多數(shù)容忍失效數(shù)
1 1 0
2 2 0
3 2 1
4 3 1
5 3 2
6 4 2
7 4 3

復制集群成員說明

Secondary
正常情況下,復制集的Seconary會參與Primary選舉(自身也可能會被選為Primary),并從Primary同步最新寫入的數(shù)據(jù),以保證與Primary存儲相同的數(shù)據(jù)。Secondary可以提供讀服務(wù),增加Secondary節(jié)點可以提供復制集的讀服務(wù)能力,同時提升復制集的可用性。另外,Mongodb支持對復制集的Secondary節(jié)點進行靈活的配置,以適應(yīng)多種場景的需求。

Arbiter
Arbiter節(jié)點只參與投票,不能被選為Primary,并且不從Primary同步數(shù)據(jù)。比如你部署了一個2個節(jié)點的復制集,1個Primary,1個Secondary,任意節(jié)點宕機,復制集將不能提供服務(wù)了(無法選出Primary),這時可以給復制集添加一個Arbiter節(jié)點,即使有節(jié)點宕機,仍能選出Primary。Arbiter本身不存儲數(shù)據(jù),是非常輕量級的服務(wù),當復制集成員為偶數(shù)時,最好加入一個Arbiter節(jié)點,以提升復制集可用性。

Priority0
Priority0節(jié)點的選舉優(yōu)先級為0,不會被選舉為Primary。比如你跨機房A、B部署了一個復制集,并且想指定Primary必須在A機房,這時可以將B機房的復制集成員Priority設(shè)置為0,這樣Primary就一定會是A機房的成員。(注意:如果這樣部署,最好將『大多數(shù)』節(jié)點部署在A機房,否則網(wǎng)絡(luò)分區(qū)時可能無法選出Primary)

Vote0
Mongodb 3.0里,復制集成員最多50個,參與Primary選舉投票的成員最多7個,其他成員(Vote0)的vote屬性必須設(shè)置為0,即不參與投票。

Hidden
Hidden節(jié)點不能被選為主(Priority為0),并且對Driver不可見。因Hidden節(jié)點不會接受Driver的請求,可使用Hidden節(jié)點做一些數(shù)據(jù)備份、離線計算的任務(wù),不會影響復制集的服務(wù)。

Delayed
Delayed節(jié)點必須是Hidden節(jié)點,并且其數(shù)據(jù)落后與Primary一段時間(可配置,比如1個小時)。因Delayed節(jié)點的數(shù)據(jù)比Primary落后一段時間,當錯誤或者無效的數(shù)據(jù)寫入Primary時,可通過Delayed節(jié)點的數(shù)據(jù)來恢復到之前的時間點。

優(yōu)先級為0復制集成員

MongoDB集群之復制集集群架構(gòu)簡介及部署?

此架構(gòu)由一個Primary節(jié)點和兩個Secondary節(jié)點組成

1)此架構(gòu)由一臺Primary主節(jié)點和兩臺Secondary備節(jié)點組成,其原理就是主從復制架構(gòu)的原理,兩臺Secondary節(jié)點同樣通過oplog日志來與Primary主節(jié)點達成數(shù)據(jù)一致
2)與其不同的是在Data Center2節(jié)點上的Secondary備用節(jié)點的實例優(yōu)先級priority為0,則不參與選舉,也不可能會成為Primary節(jié)點,將其優(yōu)先級配置為0,主要是防止它成為主節(jié)點,這在多數(shù)據(jù)中心的部署特別有用。
3)優(yōu)先級值范圍為 0-100(0表示不參與選舉),在復制集群中,優(yōu)先級高的優(yōu)先成為主節(jié)點,假如我們原來集群中有三臺節(jié)點,主節(jié)點優(yōu)先級為2,其它兩臺備節(jié)點優(yōu)先級為1,當我們新加入到集群一臺MongoDB實例,給它優(yōu)先級設(shè)置為4,則該實例在加入集群后就會自動搶奪Primary到本機。

仲裁節(jié)點架構(gòu)

MongoDB集群之復制集集群架構(gòu)簡介及部署?
上圖中,三個成員組成復制集群

一個主庫:負責整個集群的所有寫、更改操作
一個從庫:通過oplog日志來與主節(jié)點數(shù)據(jù)達成一致
一個Airbiter節(jié)點,在選舉中,只進行投票,不能成為主庫,而且不復制Primary的任何數(shù)據(jù),因此這個架構(gòu)中只能提供一個完成的副本Secondary,Arbiter只需要很少的資源,代價是有限的冗余和容錯,當Primary節(jié)點故障后,Aribiter將票數(shù)頭給Secondary,使其成為Primary節(jié)點,如果Primary節(jié)點再次故障后,集群將不可用,Arbiter節(jié)點也未存儲任何數(shù)據(jù)。

MongoDB集群之復制集集群架構(gòu)簡介及部署?

集群中還有其它的節(jié)點成員,但是我們用的比較少,所以此文章中沒有提到。
可以自行查閱官方文檔:https://docs.mongodb.com/manual/core/replica-set-members/

復制集集群環(huán)境部署

環(huán)境說明

本次使用一臺設(shè)備多實例進行,如果你準備在多臺設(shè)備上部署,你需要考慮的如下:
1)時鐘是否一致
2)網(wǎng)絡(luò)是否通暢
3)SElinux是否關(guān)閉或者策略放通
4)環(huán)境是否一致

[root@MongoDB ~]# lsb_release -a
LSB Version:    :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarch
Distributor ID: CentOS
Description:    CentOS Linux release 7.6.1810 (Core) 
Release:    7.6.1810
Codename:   Core
[root@MongoDB ~]# hostname -I
10.211.55.12 192.168.0.100 fdb2:2c26:f4e4:0:21c:42ff:fedf:4d85 
前期準備
#創(chuàng)建用戶組
useradd mongod
echo 'abcdef' | passwd --stdin mongod

#下載MongoDB
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.0.tgz

#添加文件打開數(shù)和mongod用戶進程連接數(shù)
cat >> /etc/security/limits.conf << EOF
* soft nofile 65536
* hard nofile 65536
mongod soft nproc 32768
mongod hard nproc 32768
EOF 

#使下面兩個文件修改為never
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

#開機自動修改
cat >> /etc/rc.local << EOF
if test -f /sys/kernel/mm/transparent_hugepage/enabled;then
    echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi

if test -f /sys/kernel/mm/transparent_hugepage/defrag;then
    echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
EOF
此步驟完成后

#官方給出MongoDB需要以下兩個庫的依賴
yum install libcurl openssl -y

#解壓并復制程序文件到bin目錄
mkdir /usr/local/mongodb
tar xf mongodb-linux-x86_64-rhel70-4.2.0.tgz
cp -rf mongodb-linux-x86_64-rhel70-4.2.0/bin/ /usr/local/mongodb/
chown -Rf mongod.mongod /usr/local/moongodb/

#添加程序環(huán)境
cat >> /etc/profile << EOF
export MONGODB_HOME=/usr/local/mongodb
export PATH=\$MONGODB/bin:\$PATH
EOF

source /etc/profile
環(huán)境配置

1)接下來使用mongod用戶來操作

su mongod

2)創(chuàng)建文件目錄

#!/bin/bash
for i in 27017 27018 27019
    do
    mkdir -p /usr/local/mongodb/$i/{conf,data,logs,run}
done
配置文件

編輯一臺配置文件,然后復制到其它實例,配置文件為yaml語法
關(guān)于以下配置文件詳解,請參考:”https://abcops.cn/mongodb-conf/“

cat > mongod.conf << EOF
systemLog:
  destination: file
  path: /usr/local/mongodb/27017/logs/mongodb.log
  logAppend: true
  verbosity: 0
  logRotate: rename

storage:
  journal:
    enabled: true
  dbPath: /usr/local/mongodb/27017/data
  directoryPerDB: true
  engine: wiredTiger
  wiredTiger:
    engineConfig:
      cacheSizeGB: 1
      directoryForIndexes: true
      journalCompressor: zlib
    collectionConfig:
      blockCompressor: zlib
    indexConfig:
      prefixCompression: true

processManagement:
  fork: true
  pidFilePath: /usr/local/mongodb/27017/run/mongod.pid

net:
  port: 27017
  bindIp: 10.211.55.12
  maxIncomingConnections: 65536
  wireObjectCheck: true
  ipv6: false

replication:
  oplogSizeMB: 4096
  replSetName: abcops_repl

setParameter:
  connPoolMaxShardedConnsPerHost: 200
  connPoolMaxConnsPerHost: 200
EOF

復制配置文件到目錄中,并修改其端口及目錄位置

#!/bin/bash
for i in 27017 27018 27019
    do
        \cp /home/mongod/mongod.conf /usr/local/mongodb/$i/conf
        sed -i "s/27017/$i/g" /usr/local/mongodb/$i/conf/mongod.conf
done
啟動MongoDB實例

啟動腳本如下

#!/bin/bash
for i in 27017 27018 27019
    do
        /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/$i/conf/mongod.conf
done

關(guān)閉腳本如下

#!/bin/bash
for i in 27017 27018 27019
    do
        /usr/local/mongodb/bin/mongod --shutdown -f /usr/local/mongodb/$i/conf/mongod.conf
done

三個實例啟動后,不代表復制集已經(jīng)搭建成功了,還需要進行復制集初始化

配置復制集

連接任何一個實例都可以進行配置

這是我連接27017的實例
/usr/local/mongodb/bin/mongo --host 10.211.55.12 --port 27017
> use admin

> config={
_id:'abcops_repl',
members:[
{_id: 0, host: '10.211.55.12:27017',priority:2},
{_id: 1, host: '10.211.55.12:27018',priority:1},
{_id: 2, host: '10.211.55.12:27019',arbiterOnly:true},
    ]
}

> rs.initiate(config)


#以上參數(shù)解析
use admin:進入admin數(shù)據(jù)庫
config:配置復制集
_id:'abcops_repl':指定復制集組名稱,與配置文件中的 replSetName 參數(shù)需要保持一致
members:規(guī)定的函數(shù),不能更改
_id:設(shè)置組成員的ID編號,可以自定義,我這里為 0、1、2
host:指定加入復制集成員的IP地址及端口,我們在配置文件中指定了bindIp為10.211.55.12,這里就不能寫127.0.0.1,必須寫為bind_Ip指定的地址
priority:指定優(yōu)先級0-100,優(yōu)先級最高的成為Primary節(jié)點,優(yōu)先級為可選選項,如果不指定默認都為1
arbiterOnly:是否開啟仲裁節(jié)點true/false

rs.initiate(config):初始化復制集配置

以上參數(shù)圖示如下,給你提供下參照
MongoDB集群之復制集集群架構(gòu)簡介及部署?
圖中開始為SECONDARY,代表復制集集群正在進行選舉Primary節(jié)點,大概5s左右,根據(jù)選舉機制選舉成功后,成為主節(jié)點的SECONDARY狀態(tài)變?yōu)?code>PRIMARY

復制集常用命令

1)查看誰是主節(jié)點

abcops_repl:PRIMARY> db.isMaster()     

2)查看當前復制集集群中成員的配置

abcops_repl:PRIMARY> rs.conf()

3)查看復制集集群成員狀態(tài)

abcops_repl:PRIMARY> rs.status()

4)新增節(jié)點到復制集
新增節(jié)點之前,該實例的配置中的replSetName復制集名稱,必須和集群一致

abcops_repl:PRIMARY> rs.add("10.211.55.12:27020")

5)新增仲裁節(jié)點

abcops_repl:PRIMARY> rs.addArb("10.211.55.12:27020")

6)從復制集內(nèi)刪除節(jié)點

abcops_repl:PRIMARY> rs.remove("10.211.55.12:27020")

7)檢查oplog日志時間和大小

abcops_repl:PRIMARY> rs.printReplicationInfo() 
configured oplog size:   4096MB
log length start to end: 2422secs (0.67hrs)
oplog first event time:  Wed Sep 11 2019 12:22:13 GMT+0800 (CST)
oplog last event time:   Wed Sep 11 2019 13:02:35 GMT+0800 (CST)
now:                     Wed Sep 11 2019 13:02:37 GMT+0800 (CST)

8)降級服務(wù)器
此操作只能在PRIMARY上操作
通過執(zhí)行rs.stepDown命令將當前主服務(wù)器主動降級為備用節(jié)點,120單位為s,為120秒內(nèi)這個實力不能把自己選為PRIMARY角色,120秒后由于它本身的優(yōu)先級較高,所以會重新?lián)屨糚RIMARY節(jié)點。

abcops_repl:PRIMARY> rs.stepDown(120)

9)允許在Secondary節(jié)點可以進行查詢
在副本節(jié)點上操作

rs.slaveOk()

10)查看當前連接

db.getMongo()

修改優(yōu)先級

修改27018的優(yōu)先級為3,使其優(yōu)先級超過27017實例,奪得PRIMARY角色,此操作需在PRIMARY上執(zhí)行

abcops_repl:PRIMARY> config=rs.conf()
abcops_repl:PRIMARY> config.members[1].priority=3
3
abcops_repl:PRIMARY> rs.reconfig(config)
{
    "ok" : 1,
    "$clusterTime" : {
        "clusterTime" : Timestamp(1568179129, 1),
        "signature" : {
            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
            "keyId" : NumberLong(0)
        }
    },
    "operationTime" : Timestamp(1568179129, 1)
}

abcops_repl:PRIMARY> rs.conf()
abcops_repl:SECONDARY> db.isMaster()

#以上參數(shù)解析
config=rs.conf():將現(xiàn)有的配置讀取到變量中進行存儲
config.members[1].priority=3:修改變量中的值,1是指執(zhí)行rs.conf()中看到節(jié)點的順序,不是ID號哦,rs.conf()看到的順序是從0開始排序,三個副本集排序就是0-3
rs.reconfig(config):將修改后的數(shù)據(jù)同步到配置,使修改生效

rs.conf():查看當前配置,可以看到優(yōu)先級哦
db.isMaster():查看誰是Primary節(jié)點

復制測試

1)插入數(shù)據(jù)

#連接當前Primary節(jié)點
/usr/local/mongodb/bin/mongo --host 10.211.55.12 --port 27018

#進入abcops數(shù)據(jù)庫,在documents文檔中插入以下JSON格式的數(shù)據(jù)
abcops_repl:PRIMARY> use abcops
abcops_repl:PRIMARY> db.documents.insert(
    {name: "xuweiliang",
    age: 25,
    Job: "DevOps"}
)

#查看documents文檔中的數(shù)據(jù)
abcops_repl:PRIMARY> db.documents.find()
{ "_id" : ObjectId("5d78863768fbf9eac4704232"), "name" : "xuweiliang", "age" : 25, "Job" : "DevOps" }

#查看復制節(jié)點狀態(tài)
abcops_repl:PRIMARY> rs.printSlaveReplicationInfo()
source: 10.211.55.12:27017
    syncedTo: Wed Sep 11 2019 13:30:42 GMT+0800 (CST)
    0 secs (0 hrs) behind the primary

2)登錄Secondary節(jié)點查看

/usr/local/mongodb/bin/mongo --host 10.211.55.12 --port 27017

abcops_repl:SECONDARY> rs.slaveOk()         #運行副本節(jié)點可進行查詢
abcops_repl:SECONDARY> show dbs             #查看當前節(jié)點的數(shù)據(jù)庫
abcops  0.000GB
admin   0.000GB
config  0.000GB
local   0.000GB
abcops_repl:SECONDARY> use abcops               #abcops數(shù)據(jù)庫已經(jīng)從主節(jié)點同步至此
switched to db abcops
abcops_repl:SECONDARY> db.getCollectionNames()  #以下連續(xù)三個命令都是查看進入到abcops庫中的文檔命令
[ "documents" ]
abcops_repl:SECONDARY> show collections
documents
abcops_repl:SECONDARY> show tables
documents
abcops_repl:SECONDARY> db.documents.find()      #查看文檔中的內(nèi)容
{ "_id" : ObjectId("5d78863768fbf9eac4704232"), "name" : "xuweiliang", "age" : 25, "Job" : "DevOps" }

創(chuàng)建復制集中的賬戶

1)連接到主節(jié)點,創(chuàng)建用戶
以下創(chuàng)建的用戶及權(quán)限和角色請參考下面用戶權(quán)限說明

/usr/local/mongodb/bin/mongo --host 10.211.55.12 --port 27018
abcops_repl:PRIMARY> use admin

abcops_repl:PRIMARY> db.createUser( {
        user:'abcops',
        pwd:'123456',
        roles:[ { role: "root", db: "admin" } ]
    }
)
Successfully added user: {
    "user" : "abcops",
    "roles" : [
        {
            "role" : "root",
            "db" : "admin"
        }
    ]
}

#查看所有創(chuàng)建的用戶信息
abcops_repl:PRIMARY> show users 
用戶中權(quán)限的說明
權(quán)限說明
Read 允許用戶讀取指定數(shù)據(jù)庫
readWrite 允許用戶讀寫指定數(shù)據(jù)庫
dbAdmin 允許用戶在指定數(shù)據(jù)庫中指定管理函數(shù),如(索引創(chuàng)建、刪除、查看統(tǒng)計訪問system.profile)
userAdmin 允許用戶向system.users集合寫入,可以找指定數(shù)據(jù)里面創(chuàng)建、刪除和管理用戶
clusterAdmin 只在admin數(shù)據(jù)庫中可用,賦予用戶所有分片和復制集相關(guān)函數(shù)的管理權(quán)限
readAnyDatabase 只在admin數(shù)據(jù)庫中可用,賦予用戶所有數(shù)據(jù)庫的讀權(quán)限
readWriteAnyDatabase 只在admin數(shù)據(jù)庫中可用,賦予用戶所有數(shù)據(jù)庫的讀寫權(quán)限
userWriteAnyDatabase 只在admin數(shù)據(jù)庫中可用,賦予用戶所有數(shù)據(jù)庫的userAdmin權(quán)限
dbAdminAnyDatabase 只在admin數(shù)據(jù)庫中可用,賦予用戶所有數(shù)據(jù)庫的dbAdmin權(quán)限
root 只在admin數(shù)據(jù)庫中可用,超級管理員

為復制集集群添加權(quán)限認證

復制集我們這里采用keyfile文件實現(xiàn)權(quán)限認證,并且副本集中的所有成員使用的keyfile必須一樣

添加安全認證配置

三臺實例必須都要配置

cat >> /usr/local/mongodb/27017/conf/mongod.conf << EOF

security:
  authorization: enabled
  clusterAuthMode: keyFile
  keyFile: /usr/local/mongodb/27017/conf/keyfile
  javascriptEnabled: true
EOF 


cat >> /usr/local/mongodb/27018/conf/mongod.conf << EOF

security:
  authorization: enabled
  clusterAuthMode: keyFile
  keyFile: /usr/local/mongodb/27018/conf/keyfile
  javascriptEnabled: true
EOF

cat >> /usr/local/mongodb/27019/conf/mongod.conf << EOF

security:
  authorization: enabled
  clusterAuthMode: keyFile
  keyFile: /usr/local/mongodb/27019/conf/keyfile
  javascriptEnabled: true
EOF
keyfile文件操作

1)生產(chǎn)keyfile文件

openssl rand -base64 90 > ./keyfile

2)復制keyfile文件到其它實例中

#!/bin/bash
for i in 27017 27018 27019
    do
        \cp /home/mongod/keyfile /usr/local/mongodb/$i/conf/
done

3)修改keyfile權(quán)限
keyfile文件權(quán)限必須為 X00 ,不能給 group 和 other 成員分配任何權(quán)限,否則實例無法啟動

#!/bin/bash
for i in 27017 27018 27019
    do
        chmod 400 /usr/local/mongodb/$i/conf/keyfile
done

4)重啟所有實例

#!/bin/bash
for i in 27017 27018 27019
    do
        /usr/local/mongodb/bin/mongod --shutdown -f /usr/local/mongodb/$i/conf/mongod.conf
        sleep 3s
        /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/$i/conf/mongod.conf
done

認證驗證

登錄驗證可以在連接的時候指定用戶名和密碼,也可以先連接到數(shù)據(jù)庫后再進行認證

1)登錄指定用戶密碼

/usr/local/mongodb/bin/mongo --host 10.211.55.12 --port 27018 --username abcops -p 123456
abcops_repl:PRIMARY> show dbs
abcops  0.000GB
admin   0.000GB
config  0.000GB
local   0.000GB

2)先登錄,后驗證

abcops_repl:PRIMARY> use admin                          #必須要先切換到admin庫中才可以進行進行驗證
switched to db admin
abcops_repl:PRIMARY> db.auth( 'abcops','123456' )       #認證用戶名及密碼,認證成功返回1,否則返回0
1
abcops_repl:PRIMARY> show dbs           
abcops  0.000GB
admin   0.000GB
config  0.000GB
local   0.000GB
abcops_repl:PRIMARY> db
admin

3)在備庫進行驗證
備庫只能進行查詢,勿要在備庫上進行任何操作

/usr/local/mongodb/bin/mongo --host 10.211.55.12 --port 27017

abcops_repl:SECONDARY> rs.slaveOk()
abcops_repl:SECONDARY> use admin
switched to db admin
abcops_repl:SECONDARY> db.auth('abcops','123456')
1

客戶端驗證

我們可以找一臺SQL管理工具來連接該庫
MongoDB集群之復制集集群架構(gòu)簡介及部署?

可以看到我創(chuàng)建的abcops庫和一個文檔及三個字段
MongoDB集群之復制集集群架構(gòu)簡介及部署?

參考文獻

感謝各位:
https://docs.mongodb.com/manual/core/replica-set-members/
http://docs.mongodb.org/manual/tutorial/force-member-to-be-primary/
https://www.mongodb.org.cn/manual/replication/
https://blog.csdn.net/wentyoon/article/details/78986174
https://www.jianshu.com/p/55e2dafaccd0


分享名稱:MongoDB集群之復制集集群架構(gòu)簡介及部署
轉(zhuǎn)載注明:http://weahome.cn/article/ihpddj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部