MongoDB集群搭建

MongoDB是一個(gè)非常優(yōu)秀的非關(guān)系型數(shù)據(jù)庫(kù)贱傀,其優(yōu)秀的性能和類SQL兼容一直是非強(qiáng)事務(wù)性存儲(chǔ)的好選擇嗽桩。



當(dāng)數(shù)據(jù)量到一定量級(jí)且需要高可用的時(shí)候纫版,我們需要MongoDB的集群胳挎,本文用3個(gè)實(shí)例做集群搭建演示

1. 基礎(chǔ)環(huán)境準(zhǔn)備

RH/Centos Linux服務(wù)器3臺(tái),在此假設(shè)3臺(tái)服務(wù)器IP/hostname分別為:

  • 192.168.10.27 / master
  • 192.168.10.28 / cluster1
  • 192.168.10.29 / cluster2

MongoDB集群節(jié)點(diǎn)之間默認(rèn)使用27017通信迅细,也可自定義設(shè)置修改該端口
請(qǐng)確保集群節(jié)點(diǎn)之間和對(duì)外開放通信端口

2. 下載安裝

分別在3臺(tái)服務(wù)器上進(jìn)行如下安裝操作

  • 官網(wǎng)下載安裝包或使用下面的命令下載(請(qǐng)選擇對(duì)應(yīng)的系統(tǒng)版本巫橄,此處使用Community版本演示,Enterprise搭建過程相同):

    wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.4.10.tgz

  • 解壓安裝包至/usr/local/mongodb-3.4.10目錄茵典,該目錄及軟件的安裝目錄(后面會(huì)講到數(shù)據(jù)的存放目錄請(qǐng)注意區(qū)分)

  • 完成后配置MongoDB的環(huán)境變量:

    export MONGO_HOME=/usr/local/mongodb-3.4.10
    export PATH=$MONGO_HOME/bin:PATH
    
  • 使用source命令使環(huán)境變量生效

3. 集群初始化及配置

MongoDB使用本地文件作為數(shù)據(jù)庫(kù)存儲(chǔ)湘换,存儲(chǔ)數(shù)據(jù)和Mongo自身使用的配置等全部存儲(chǔ)在文件系統(tǒng),我們需要指定這些文件所用的目錄并使用配置聲明

  • 配置實(shí)例

    分別在3臺(tái)服務(wù)器執(zhí)行如下操作:

    mkdir -p /usr/local/test_data/db/data
    mkdir -p /usr/local/test_data/db/log
    cd /usr/local/test_data
    vi replica.yml
    systemLog:
      destination: file
      path: "/usr/local/test_data/db/log/replica-set.log"
    processManagement:
      fork: true
    net:
      port: 27017
    storage:
      dbPath: "/usr/local/test_data/db/data/"
    replication:
      replSetName: "drive"
    sharding:
      clusterRole: shardsvr
    
  • 啟動(dòng)所有節(jié)點(diǎn)

    分別在3臺(tái)服務(wù)器使用:

    mongod -f /usr/local/test_data/replica.yml啟動(dòng)Mongo實(shí)例

    此時(shí)使用ps應(yīng)該可以在3臺(tái)服務(wù)器上分別看到一個(gè)Mongo進(jìn)程

  • 連接子節(jié)點(diǎn)

    注意下面的操作僅在主節(jié)點(diǎn)進(jìn)行

    選3臺(tái)服務(wù)器其中一臺(tái)(此處使用 192.168.10.27/master)作為初始主節(jié)點(diǎn)進(jìn)行操作

    在此節(jié)點(diǎn)上使用Mongo Shell统阿,鍵入命令mongo

    在出現(xiàn)的Shell當(dāng)中使用如下命令連接各節(jié)點(diǎn)

    rs.initiate()  //初始化集群主節(jié)點(diǎn)彩倚,使用默認(rèn)初始配置,子節(jié)點(diǎn)隨后添加
    rs.status()      //查看狀態(tài)扶平。此命令的輸出中members元素應(yīng)該只有此服務(wù)器的信息
    rs.add('192.168.10.28:27017')   //添加節(jié)點(diǎn)1帆离,未報(bào)錯(cuò)且輸出為1則說明添加成功
    rs.add('192.168.10.29:27017')   //添加節(jié)點(diǎn)2,未報(bào)錯(cuò)且輸出為1則說明添加成功
    rs.status()    //查看狀態(tài)结澄。此時(shí)輸出的members元素中應(yīng)該有3個(gè)節(jié)點(diǎn)的信息
    
  • 設(shè)置子節(jié)點(diǎn)為可讀狀態(tài)分擔(dān)主節(jié)點(diǎn)讀取壓力

    分別在子節(jié)點(diǎn)使用mongo命令打開Shell

    db.getMongo().setSlaveOk()    //開啟子節(jié)點(diǎn)讀取
    show dbs      //如果未出現(xiàn)錯(cuò)誤提示則說明成功
    

4. 建立索引

我們定義演示使用的庫(kù)名為trips哥谷,假定是用戶跑步過程中的行程及坐標(biāo)記錄數(shù)據(jù)岸夯,使用的集合名稱為coordinates

行程坐標(biāo)數(shù)據(jù)中可以添加索引以提高查詢速度,此處使用列為tripIDtimestamp们妥。索引選列的依據(jù)和傳統(tǒng)數(shù)據(jù)庫(kù)類似猜扮,選定常作為過濾條件的列或列組合和提高效率

在主節(jié)點(diǎn)使用mongo呼出Shell

use trips    //切換到行程坐標(biāo)庫(kù),初始化時(shí)沒有該庫(kù)并不影響
db.coordinates.getIndexes()      //此時(shí)應(yīng)該能看到一個(gè)默認(rèn)的"_id"索引列
db.coordinates.createIndex({"tripID":1})
db.coordinates.createIndex({"timestamp":1})
db.coordinates.getIndexes()      //此時(shí)應(yīng)該能"_id","tripID","timestamp"3條索引記錄

5. 驗(yàn)證&測(cè)試

任意節(jié)點(diǎn)使用下面命令應(yīng)該都能看到未報(bào)錯(cuò)的輸出結(jié)果且返回信息包含的節(jié)點(diǎn)信息正確

rs.status()
rs.conf()
show dbs
use trips
show collections
db.coordinates.getIndexes()

6. 配置MongoDB用戶名密碼

首先建立系統(tǒng)管理員賬戶王悍,在主節(jié)點(diǎn)進(jìn)行如下操作:

mongo
use admin
db.createUser({user:"root",pwd:"changeme",roles:[{role:"root",db:"admin"}]}) #數(shù)據(jù)庫(kù)管理員

use trips
db.createUser({user:"trip_owner",pwd:"changeme",roles:[{role:"dbAdmin",db:"trips"},{role:"readWrite",db:"trips"}]}) #行程坐標(biāo)庫(kù)的使用者

show users   #檢查是否添加成功

完成之后關(guān)閉所有節(jié)點(diǎn)的Mongo實(shí)例并重新啟動(dòng)破镰,在啟動(dòng)命令后添加--auth聲明開啟用戶身份認(rèn)證

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市压储,隨后出現(xiàn)的幾起案子鲜漩,更是在濱河造成了極大的恐慌,老刑警劉巖集惋,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件孕似,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡刮刑,警方通過查閱死者的電腦和手機(jī)喉祭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來雷绢,“玉大人泛烙,你說我怎么就攤上這事∏涛桑” “怎么了蔽氨?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)帆疟。 經(jīng)常有香客問我鹉究,道長(zhǎng),這世上最難降的妖魔是什么踪宠? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任自赔,我火速辦了婚禮,結(jié)果婚禮上柳琢,老公的妹妹穿的比我還像新娘绍妨。我一直安慰自己,他們只是感情好染厅,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布痘绎。 她就那樣靜靜地躺著,像睡著了一般肖粮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上尔苦,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天涩馆,我揣著相機(jī)與錄音行施,去河邊找鬼。 笑死魂那,一個(gè)胖子當(dāng)著我的面吹牛蛾号,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播涯雅,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼鲜结,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了活逆?” 一聲冷哼從身側(cè)響起精刷,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蔗候,沒想到半個(gè)月后怒允,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡锈遥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年纫事,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片所灸。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡丽惶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出爬立,到底是詐尸還是另有隱情钾唬,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布懦尝,位于F島的核電站知纷,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏陵霉。R本人自食惡果不足惜琅轧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望踊挠。 院中可真熱鬧乍桂,春花似錦、人聲如沸效床。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)剩檀。三九已至憋沿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間沪猴,已是汗流浹背辐啄。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工采章, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人壶辜。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓悯舟,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親砸民。 傳聞我的和親對(duì)象是個(gè)殘疾皇子抵怎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容