MongoDB 搭建副本集(Replica Set)

1.簡介

MongoDB集群有三種方式:Replica Set操软、Sharding予颤、Master-Slaver。Replica Set是副本集的方式做高可用集群生棍,Sharding是數(shù)據(jù)分片颤霎,如果數(shù)據(jù)量大可以使用這種方式。Master-Slaver官方已經(jīng)不推薦使用了。

本篇只介紹Replica Set的方式友酱。數(shù)據(jù)分片將來單獨寫一篇介紹晴音。

1.2 Replica Set的兩種節(jié)點

Replica Set的節(jié)點分為兩種:Primary和Secondary。他們都包含完整的數(shù)據(jù)缔杉,Primary節(jié)點為客戶端提供讀寫服務(wù)锤躁,Secondary節(jié)點作為數(shù)據(jù)備份。如果Primary節(jié)點掛了或详,集群會選出一個Secondary節(jié)點作為Primary節(jié)點繼續(xù)提供讀寫服務(wù)系羞。

1.3. Replica Set的讀寫分離

默認(rèn)Secondary節(jié)點不提供讀服務(wù),如果讀的量非常大霸琴,并且允許客戶端讀取過時的臟數(shù)據(jù)椒振,那么客戶端可以直接連接到Secondary節(jié)點,設(shè)置Secondary節(jié)點可讀(不設(shè)置讀取會失斘喑恕)澎迎,就可以實現(xiàn)讀寫分離。

2. 搭建Replica Set步驟

2.1. 準(zhǔn)備三臺機(jī)器

mongo01.dev.oracleot.com
mongo02.dev.oracleot.com
mongo03.dev.oracleot.com

2.2. 使用docker啟動mongodb

三臺機(jī)器分別執(zhí)行下列命令

# 創(chuàng)建volumn
docker volumn create mongo_data_db

# 創(chuàng)建證書
docker run -rm -d mongo:3.6.1 bash
cd /data/db/
openssl rand -base64 756 > keyfile
chmod 400 keyfile

# 啟動mongodb
docker run --name mongo1 -p 27017:27017 -v mongo_data_db:/data/db --privileged -d mongo:3.6.1 mongod --replSet mongo-set --keyFile /data/db/keyfile

2.3. 配置集群

需要在primary機(jī)器上運行

docker exec -it mongo1 mongo
> config = {
    "_id" : "mongo-set",
    "members" : [
        {
            "_id" : 0,
            "host" : "mongo01.dev.oracleot.com:27017",
            "priority":2
        },
        {
            "_id" : 1,
            "host" : "mongo02.dev.oracleot.com:27017",
            "priority":1
        },
        {
            "_id" : 2,
            "host" : "mongo03.dev.oracleot.com:27017",
            "priority":1
        }
    ]
}


> rs.initiate(config)
{
    "ok" : 1,
    "operationTime" : Timestamp(1515652730, 1),
    "$clusterTime" : {
        "clusterTime" : Timestamp(1515652730, 1),
        "signature" : {
            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
            "keyId" : NumberLong(0)
        }
    }
}

2.4 創(chuàng)建賬戶

2.4.1 創(chuàng)建超級賬戶

use admin
> db.createUser(
  {
    user: "root",
    pwd: "mongo_root_test",
    roles: [ { role: "root", db: "admin" } ]
  }
)

2.4.2 創(chuàng)建管理員賬戶

use admin
> db.createUser(
  {
    user: "admin",
    pwd: "mongo_admin_test",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

2.4.3 創(chuàng)建普通賬戶

use mt
db.createUser(
  {
    user: "mt",
    pwd: "mongo_mt_test",
    roles: [ { role: "readWrite", db: "mt" } ]
  }
)

2.5 解決警告

啟動后有可能會出現(xiàn)下面的警告

2018-01-17T05:35:04.275+0000 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2018-01-17T05:35:04.275+0000 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2018-01-17T05:35:04.275+0000 I CONTROL  [initandlisten] 
2018-01-17T05:35:04.275+0000 I CONTROL  [initandlisten] 
2018-01-17T05:35:04.275+0000 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2018-01-17T05:35:04.275+0000 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2018-01-17T05:35:04.275+0000 I CONTROL  [initandlisten] 
2018-01-17T05:35:04.275+0000 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2018-01-17T05:35:04.275+0000 I CONTROL  [initandlisten] **        We suggest setting it to 'never'

第一條WARNING: Access control is not enabled for the database.是沒有創(chuàng)建用戶導(dǎo)致的警告选调,如果創(chuàng)建了用戶就可以了夹供,不過mongodb的鑒權(quán)比較費CPU,如果應(yīng)用使用短連接則不建議在mongodb中創(chuàng)建用戶仁堪。

第二三條是Centos7開啟了transparent_hugepage導(dǎo)致的哮洽,雖然開啟transparent_hugepage本意是提升內(nèi)存性能,不過像orale弦聂、mongodb等廠商均建議關(guān)閉鸟辅。下面是關(guān)閉方法

禁用transparent_hugepage,重啟后無效

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

開機(jī)就禁用transparent_hugepage

$ vim /etc/rc.d/rc.local

# 加上下面的話
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
  echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
  echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi

設(shè)置執(zhí)行權(quán)限

$ chmod +x /etc/rc.d/rc.local
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市横浑,隨后出現(xiàn)的幾起案子剔桨,更是在濱河造成了極大的恐慌屉更,老刑警劉巖徙融,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異瑰谜,居然都是意外死亡欺冀,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門萨脑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來隐轩,“玉大人,你說我怎么就攤上這事渤早≈俺担” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長悴灵。 經(jīng)常有香客問我扛芽,道長,這世上最難降的妖魔是什么积瞒? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任川尖,我火速辦了婚禮,結(jié)果婚禮上茫孔,老公的妹妹穿的比我還像新娘叮喳。我一直安慰自己,他們只是感情好缰贝,可當(dāng)我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布馍悟。 她就那樣靜靜地躺著,像睡著了一般揩瞪。 火紅的嫁衣襯著肌膚如雪赋朦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天李破,我揣著相機(jī)與錄音宠哄,去河邊找鬼。 笑死嗤攻,一個胖子當(dāng)著我的面吹牛毛嫉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播妇菱,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼承粤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了闯团?” 一聲冷哼從身側(cè)響起辛臊,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎房交,沒想到半個月后彻舰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡候味,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年刃唤,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片白群。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡尚胞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出帜慢,到底是詐尸還是另有隱情笼裳,我是刑警寧澤唯卖,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站躬柬,受9級特大地震影響耐床,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜楔脯,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一撩轰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧昧廷,春花似錦堪嫂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至眉枕,卻和暖如春恶复,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背速挑。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工谤牡, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人姥宝。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓翅萤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親腊满。 傳聞我的和親對象是個殘疾皇子套么,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,675評論 2 359

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