小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

MongoDB復(fù)制集集群原理詳解及部署

 拼命奮斗的自己 2020-06-16

復(fù)制集介紹

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

復(fù)制集群架構(gòu)

術(shù)語(yǔ)介紹:

術(shù)語(yǔ)類型描述

Primary主節(jié)點(diǎn)負(fù)責(zé)整個(gè)集群的讀寫操作,包含了所有改變操作的日志

Secondary備節(jié)點(diǎn)同步主服務(wù)器所有的數(shù)據(jù),負(fù)責(zé)集群的讀取請(qǐng)求,主服務(wù)器宕機(jī)可以稱為主節(jié)點(diǎn)

Arbiter仲裁者在主節(jié)點(diǎn)宕機(jī)后只進(jìn)行投票,不參與選舉,不同步主節(jié)點(diǎn)數(shù)據(jù)

9ee6269e81a.jpeg

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

1)Primary節(jié)點(diǎn)為主節(jié)點(diǎn),所有的寫操作或者更改操作都只能從Primary節(jié)點(diǎn)中操作(復(fù)制集內(nèi)的所有成員都可以接收讀操作,但是,默認(rèn)情況下,應(yīng)用程序?qū)⑵渥x操作指向主成員),主節(jié)點(diǎn)上所有的更改及寫操作都會(huì)記錄到oplog日志中。

2)兩臺(tái)Secondary節(jié)點(diǎn)復(fù)制Primary節(jié)點(diǎn)的oplog日志,通過異步的方式去執(zhí)行oplog日志中的記錄來和Primary節(jié)點(diǎn)達(dá)到數(shù)據(jù)一致性。

3)oplog作用主要是記錄主節(jié)點(diǎn)的寫入操作,充當(dāng)復(fù)制源。

5fafe50cc8a.jpeg

4)如果Primary節(jié)點(diǎn)無故Down機(jī)之后,復(fù)制集集群會(huì)通過投票機(jī)制在兩臺(tái)Secondary中選舉一臺(tái)升級(jí)為Primary節(jié)點(diǎn)。

投票選舉機(jī)制

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

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

·Secondary節(jié)點(diǎn)權(quán)重(Priority)比Primary節(jié)點(diǎn)高時(shí),發(fā)起替換選舉;

·Secondary節(jié)點(diǎn)發(fā)現(xiàn)集群中沒有Primary時(shí),發(fā)起選舉;

·Primary節(jié)點(diǎn)不能訪問到大部分成員時(shí)主動(dòng)降級(jí),降級(jí)操作會(huì)斷開連接,終止用戶請(qǐng)求等;

·復(fù)制集成員心跳檢測(cè)結(jié)果發(fā)生變化,比如某個(gè)節(jié)點(diǎn)掛了或者新增節(jié)點(diǎn),發(fā)起重新投票選舉規(guī)則;

·超過4s沒有執(zhí)行狀態(tài)檢測(cè)過程,發(fā)起替換選舉;

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

1.是否看見復(fù)制集中是否有Majority在線

2.自身Priority是否大于0

3.自身不為arbiter

4.自身opTime不能落后于最新節(jié)點(diǎn)10s以上

5.自身存儲(chǔ)的集群程序按信息為最新

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

自身檢測(cè)

·MongoDB選舉需要獲得大多數(shù)投票才能通過,如果沒有節(jié)點(diǎn)投反對(duì)票,且獲得成票數(shù)超過有權(quán)投票節(jié)點(diǎn)總數(shù)的1/2,則能成為Primary。否則進(jìn)入下一輪選舉。為避免陷入無限重復(fù)選舉,MongoDB建議復(fù)制集的成員個(gè)數(shù)為奇數(shù),當(dāng)Secondary為雙數(shù)時(shí),可以增加一個(gè)Arbiter節(jié)點(diǎn)。

·選舉過程中,復(fù)制集沒有主節(jié)點(diǎn),所有成員都是只讀狀態(tài)

·選舉過程很復(fù)雜,一般情況下需要5s左右進(jìn)行選主。

·如果新選擇的主節(jié)點(diǎn)立刻掛掉,至少需要30s時(shí)間重新選主。

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

投票成員數(shù)大多數(shù)容忍失效數(shù)110220321431532642743

復(fù)制集群成員說明

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

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

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

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

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

DelayedDelayed節(jié)點(diǎn)必須是Hidden節(jié)點(diǎn),并且其數(shù)據(jù)落后于Primary一段時(shí)間(可配置,比如1個(gè)小時(shí))。因Delayed節(jié)點(diǎn)的數(shù)據(jù)比Primary落后一段時(shí)間,當(dāng)錯(cuò)誤或者無效的數(shù)據(jù)寫入Primary時(shí),可通過Delayed節(jié)點(diǎn)的數(shù)據(jù)來恢復(fù)到之前的時(shí)間點(diǎn)。

優(yōu)先級(jí)為0復(fù)制集成員

815d0332d5e.jpeg

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

1)此架構(gòu)由一臺(tái)Primary主節(jié)點(diǎn)和兩臺(tái)Secondary備節(jié)點(diǎn)組成,其原理就是主從復(fù)制架構(gòu)的原理,兩臺(tái)Secondary節(jié)點(diǎn)同樣通過oplog日志來與Primary主節(jié)點(diǎn)達(dá)成數(shù)據(jù)一致

2)與其不同的是在Data Center2節(jié)點(diǎn)上的Secondary備用節(jié)點(diǎn)的實(shí)例優(yōu)先級(jí)priority為0,則不參與選舉,也不可能會(huì)成為Primary節(jié)點(diǎn),將其優(yōu)先級(jí)配置為0,主要是防止它成為主節(jié)點(diǎn),這在多數(shù)據(jù)中心的部署特別有用。

3)優(yōu)先級(jí)值范圍為 0-100(0表示不參與選舉),在復(fù)制集群中,優(yōu)先級(jí)高的優(yōu)先成為主節(jié)點(diǎn),假如我們?cè)瓉砑褐杏腥_(tái)節(jié)點(diǎn),主節(jié)點(diǎn)優(yōu)先級(jí)為2,其它兩臺(tái)備節(jié)點(diǎn)優(yōu)先級(jí)為1,當(dāng)我們新加入到集群一臺(tái)MongoDB實(shí)例,給它優(yōu)先級(jí)設(shè)置為4,則該實(shí)例在加入集群后就會(huì)自動(dòng)搶奪Primary到本機(jī)。

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

8c9d2d2ba37.jpeg

上圖中,三個(gè)成員組成復(fù)制集群

一個(gè)主庫(kù):負(fù)責(zé)整個(gè)集群的所有寫、更改操作

一個(gè)從庫(kù):通過oplog日志來與主節(jié)點(diǎn)數(shù)據(jù)達(dá)成一致

一個(gè)Airbiter節(jié)點(diǎn),在選舉中,只進(jìn)行投票,不能成為主庫(kù),而且不復(fù)制Primary的任何數(shù)據(jù),因此這個(gè)架構(gòu)中只能提供一個(gè)完成的副本Secondary,Arbiter只需要很少的資源,代價(jià)是有限的冗余和容錯(cuò),當(dāng)Primary節(jié)點(diǎn)故障后,Aribiter將票數(shù)投給Secondary,使其成為Primary節(jié)點(diǎn),如果Primary節(jié)點(diǎn)再次故障后,集群將不可用,Arbiter節(jié)點(diǎn)也未存儲(chǔ)任何數(shù)據(jù)。

8d4d1b11b3e.jpeg

集群中還有其它的節(jié)點(diǎn)成員,但是我們用的比較少,所以此文章中沒有提到??梢宰孕胁殚喒俜轿臋n:

https://docs./manual/core/replica-set-members/

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

環(huán)境說明

本次使用一臺(tái)設(shè)備多實(shí)例進(jìn)行,如果你準(zhǔn)備在多臺(tái)設(shè)備上部署,你需要考慮的如下:1)時(shí)鐘是否一致 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  

前期準(zhǔn)備

#創(chuàng)建用戶組  

useradd mongod  

echo 'abcdef' | passwd --stdin mongod  

#下載MongoDB  

wget https://fastdl./linux/mongodb-linux-x86_64-rhel70-4.2.0.tgz  

#添加文件打開數(shù)和mongod用戶進(jìn)程連接數(shù)  

cat >> /etc/security/limits.conf << EOF  

* soft nofile 65536  

* hard nofile 65536  

mongod soft nproc 32768  

mongod hard nproc 32768  

EOF   

#使下面兩個(gè)文件修改為never  

echo never > /sys/kernel/mm/transparent_hugepage/enabled  

echo never > /sys/kernel/mm/transparent_hugepage/defrag  

#開機(jī)自動(dòng)修改  

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需要以下兩個(gè)庫(kù)的依賴  

yum install libcurl openssl -y  

#解壓并復(fù)制程序文件到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 

配置文件

編輯一臺(tái)配置文件,然后復(fù)制到其它實(shí)例,配置文件為yaml語(yǔ)法 關(guān)于以下配置文件詳解,請(qǐng)參考: 

https:///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 

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

#!/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 

啟動(dòng)MongoDB實(shí)例

啟動(dòng)腳本如下

#!/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 

三個(gè)實(shí)例啟動(dòng)后,不代表復(fù)制集已經(jīng)搭建成功了,還需要進(jìn)行復(fù)制集初始化

配置復(fù)制集

連接任何一個(gè)實(shí)例都可以進(jìn)行配置

這是我連接27017的實(shí)例  

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

> use admin  

> config={  

_id:'abcops_repl',  

members:[  

{_id0, host: '10.211.55.12:27017',priority:2},  

{_id1, host: '10.211.55.12:27018',priority:1},  

{_id2, host: '10.211.55.12:27019',arbiterOnly:true},  

    ]  

}  

> rs.initiate(config)  

#以上參數(shù)解析  

use admin:進(jìn)入admin數(shù)據(jù)庫(kù)  

config:配置復(fù)制集  

_id:'abcops_repl':指定復(fù)制集組名稱,與配置文件中的 replSetName 參數(shù)需要保持一致  

members:規(guī)定的函數(shù),不能更改  

_id:設(shè)置組成員的ID編號(hào),可以自定義,我這里為 012  

host:指定加入復(fù)制集成員的IP地址及端口,我們?cè)谂渲梦募兄付薭indIp為10.211.55.12,這里就不能寫127.0.0.1,必須寫為bind_Ip指定的地址  

priority:指定優(yōu)先級(jí)0-100,優(yōu)先級(jí)最高的成為Primary節(jié)點(diǎn),優(yōu)先級(jí)為可選選項(xiàng),如果不指定默認(rèn)都為1  

arbiterOnly:是否開啟仲裁節(jié)點(diǎn)true/false  

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

以上參數(shù)圖示如下,給你提供下參照

86735834ee4.jpeg

圖中開始為SECONDARY,代表復(fù)制集集群正在進(jìn)行選舉Primary節(jié)點(diǎn),大概5s左右,根據(jù)選舉機(jī)制選舉成功后,成為主節(jié)點(diǎn)的SECONDARY狀態(tài)變?yōu)镻RIMARY

復(fù)制集常用命令

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

abcops_repl:PRIMARY> db.isMaster()    

2)查看當(dāng)前復(fù)制集集群中成員的配置

abcops_repl:PRIMARY> rs.conf() 

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

abcops_repl:PRIMARY> rs.status() 

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

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

5)新增仲裁節(jié)點(diǎn)

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

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

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

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

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

abcops_repl:PRIMARY> rs.stepDown(120) 

9)允許在Secondary節(jié)點(diǎn)可以進(jìn)行查詢?cè)诟北竟?jié)點(diǎn)上操作

rs.slaveOk() 

10)查看當(dāng)前連接

db.getMongo() 

修改優(yōu)先級(jí)

修改27018的優(yōu)先級(jí)為3,使其優(yōu)先級(jí)超過27017實(shí)例,奪得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(15681791291),  

        "signature" : {  

            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),  

            "keyId" : NumberLong(0)  

        }  

    },  

    "operationTime" : Timestamp(15681791291)  

abcops_repl:PRIMARY> rs.conf()  

abcops_repl:SECONDARY> db.isMaster()  

#以上參數(shù)解析  

config=rs.conf():將現(xiàn)有的配置讀取到變量中進(jìn)行存儲(chǔ)  

config.members[1].priority=3:修改變量中的值,1是指執(zhí)行rs.conf()中看到節(jié)點(diǎn)的順序,不是ID號(hào)哦,rs.conf()看到的順序是從0開始排序,三個(gè)副本集排序就是0-3  

rs.reconfig(config):將修改后的數(shù)據(jù)同步到配置,使修改生效  

rs.conf():查看當(dāng)前配置,可以看到優(yōu)先級(jí)哦  

db.isMaster():查看誰是Primary節(jié)點(diǎn) 

復(fù)制測(cè)試

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

#連接當(dāng)前Primary節(jié)點(diǎn)  

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

#進(jìn)入abcops數(shù)據(jù)庫(kù),在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" }  

#查看復(fù)制節(jié)點(diǎn)狀態(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é)點(diǎn)查看

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

abcops_repl:SECONDARY> rs.slaveOk()         #運(yùn)行副本節(jié)點(diǎn)可進(jìn)行查詢  

abcops_repl:SECONDARY> show dbs             #查看當(dāng)前節(jié)點(diǎn)的數(shù)據(jù)庫(kù)  

abcops  0.000GB  

admin   0.000GB  

config  0.000GB 

local   0.000GB  

abcops_repl:SECONDARY> use abcops               #abcops數(shù)據(jù)庫(kù)已經(jīng)從主節(jié)點(diǎn)同步至此  

switched to db abcops  

abcops_repl:SECONDARY> db.getCollectionNames()  #以下連續(xù)三個(gè)命令都是查看進(jìn)入到abcops庫(kù)中的文檔命令  

[ "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)建復(fù)制集中的賬戶

1)連接到主節(jié)點(diǎn),創(chuàng)建用戶 以下創(chuàng)建的用戶及權(quán)限和角色請(qǐng)參考下面用戶權(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ù)庫(kù)readWrite允許用戶讀寫指定數(shù)據(jù)庫(kù)dbAdmin允許用戶在指定數(shù)據(jù)庫(kù)中指定管理函數(shù),如(索引創(chuàng)建、刪除、查看統(tǒng)計(jì)訪問system.profile)userAdmin允許用戶向system.users集合寫入,可以找指定數(shù)據(jù)里面創(chuàng)建、刪除和管理用戶clusterAdmin只在admin數(shù)據(jù)庫(kù)中可用,賦予用戶所有分片和復(fù)制集相關(guān)函數(shù)的管理權(quán)限r(nóng)eadAnyDatabase只在admin數(shù)據(jù)庫(kù)中可用,賦予用戶所有數(shù)據(jù)庫(kù)的讀權(quán)限r(nóng)eadWriteAnyDatabase只在admin數(shù)據(jù)庫(kù)中可用,賦予用戶所有數(shù)據(jù)庫(kù)的讀寫權(quán)限userWriteAnyDatabase只在admin數(shù)據(jù)庫(kù)中可用,賦予用戶所有數(shù)據(jù)庫(kù)的userAdmin權(quán)限dbAdminAnyDatabase只在admin數(shù)據(jù)庫(kù)中可用,賦予用戶所有數(shù)據(jù)庫(kù)的dbAdmin權(quán)限r(nóng)oot只在admin數(shù)據(jù)庫(kù)中可用,超級(jí)管理員

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

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

添加安全認(rèn)證配置

三臺(tái)實(shí)例必須都要配置

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)復(fù)制keyfile文件到其它實(shí)例中

#!/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)限,否則實(shí)例無法啟動(dòng)

#!/bin/bash  

for i in 27017 27018 27019  

    do  

        chmod 400 /usr/local/mongodb/$i/conf/keyfile  

done 

4)重啟所有實(shí)例

#!/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 

認(rèn)證驗(yàn)證

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

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)先登錄,后驗(yàn)證

abcops_repl:PRIMARY> use admin                          #必須要先切換到admin庫(kù)中才可以進(jìn)行進(jìn)行驗(yàn)證  

switched to db admin  

abcops_repl:PRIMARY> db.auth( 'abcops','123456' )       #認(rèn)證用戶名及密碼,認(rèn)證成功返回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)在備庫(kù)進(jìn)行驗(yàn)證 備庫(kù)只能進(jìn)行查詢,勿要在備庫(kù)上進(jìn)行任何操作

/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 

客戶端驗(yàn)證

我們可以找一臺(tái)SQL管理工具來連接該庫(kù)

9c4606f1242.jpeg

可以看到我創(chuàng)建的abcops庫(kù)和一個(gè)文檔及三個(gè)字段

16e5bf26ebc.jpeg

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多