mongodb的分片集群搭建

最近公司的某個項(xiàng)目活躍越來越高诊赊,數(shù)據(jù)越來越多。目前考慮做mongodb的分片集群府瞄,雖然我只是個無關(guān)緊要的小菜鳥碧磅,這類工作肯定是老大去完成的,輪不到我去想如何做遵馆,但是還是要去主動學(xué)習(xí)一下的鲸郊,

參考

首先先簡單了解一下分片集群的架構(gòu)以及各個部分的作用

mongos,數(shù)據(jù)庫集群請求的入口货邓,所有的請求都通過mongos進(jìn)行協(xié)調(diào)秆撮,不需要在應(yīng)用程序添加一個路由選擇器,mongos自己就是一個請求分發(fā)中心换况,它負(fù)責(zé)把對應(yīng)的數(shù)據(jù)請求請求轉(zhuǎn)發(fā)到對應(yīng)的shard服務(wù)器上职辨。在生產(chǎn)環(huán)境通常有多mongos作為請求的入口,防止其中一個掛掉所有的mongodb請求都沒有辦法操作戈二。
config server舒裤,顧名思義為配置服務(wù)器,存儲所有數(shù)據(jù)庫元信息(路由觉吭、分片)的配置腾供。mongos本身沒有物理存儲分片服務(wù)器和數(shù)據(jù)路由信息,只是緩存在內(nèi)存里鲜滩,配置服務(wù)器則實(shí)際存儲這些數(shù)據(jù)台腥。mongos第一次啟動或者關(guān)掉重啟就會從 config server 加載配置信息,以后如果配置服務(wù)器信息變化會通知到所有的 mongos 更新自己的狀態(tài)绒北,這樣 mongos 就能繼續(xù)準(zhǔn)確路由。在生產(chǎn)環(huán)境通常有多個 config server 配置服務(wù)器察署,因?yàn)樗鎯α朔制酚傻脑獢?shù)據(jù)闷游,防止數(shù)據(jù)丟失!
shard贴汪,分片(sharding)是指將數(shù)據(jù)庫拆分脐往,將其分散在不同的機(jī)器上的過程。將數(shù)據(jù)分散到不同的機(jī)器上扳埂,不需要功能強(qiáng)大的服務(wù)器就可以存儲更多的數(shù)據(jù)和處理更大的負(fù)載业簿。基本思想就是將集合切成小塊阳懂,這些塊分散到若干片里梅尤,每個片只負(fù)責(zé)總數(shù)據(jù)的一部分柜思,最后通過一個均衡器來對各個分片進(jìn)行均衡(數(shù)據(jù)遷移)。
replica set巷燥,中文翻譯副本集赡盘,其實(shí)就是shard的備份,防止shard掛掉之后數(shù)據(jù)丟失缰揪。復(fù)制提供了數(shù)據(jù)的冗余備份陨享,并在多個服務(wù)器上存儲數(shù)據(jù)副本,提高了數(shù)據(jù)的可用性钝腺, 并可以保證數(shù)據(jù)的安全性抛姑。

第一步先準(zhǔn)備好3臺機(jī)器注明:我的內(nèi)網(wǎng)地址分別為172.24.148.200,172.24.148.201艳狐,172.24.148.202

安裝mongodb

我用的centos定硝,安裝的是4.0.9版本的mongodb

curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.9.tgz // 下載mongodb
tar -zxvf mongodb-linux-x86_64-4.0.9.tgz // 解壓mongodb
mv  mongodb-linux-x86_64-4.0.9/ /usr/local/mongodb // 移到自己覺得合適的位置
mkdir -p /data/db // 創(chuàng)建數(shù)據(jù)庫存放目錄
mkdir -p /data/config // 創(chuàng)建配置節(jié)點(diǎn)目錄
mkdir -p /data/mongos // 創(chuàng)建mongos節(jié)點(diǎn)的數(shù)據(jù)存放目錄(其中一臺機(jī)器創(chuàng)建就好)

創(chuàng)建keyfile文件,用來分片集群的驗(yàn)證

openssl rand -base64 666 >  /usr/local/mongodb/mongodb-keyfile 
chmod 600  /usr/local/mongodb/mongodb-keyfile // 該key的權(quán)限必須是600僵驰;也可改為400

在/data/db/目錄創(chuàng)建第一個分片副本集的配置文件mongodb.conf

cd /data/db
vim mongodb.conf

把以下配置寫進(jìn)mongodb.conf并保存注明:需要注意的是副本集名稱喷斋,三臺機(jī)器的配置文件必須一樣

# 端口
port = 27017
# 數(shù)據(jù)目錄
dbpath = /data/db/
# 日志路徑
logpath = /data/db/mongo.log
# 日志輸出方式
logappend = true
# 允許所有ip訪問 建議配置成 bind_ip=localhost,172.21.148.200(內(nèi)網(wǎng)地址,每個配置文件不一樣)蒜茴,避免這個分片副本集直接暴露到外網(wǎng)
bind_ip = 0.0.0.0
# 副本集名稱
replSet = gdtest
# 后臺啟動
fork = true
# 開啟驗(yàn)證
auth = true
# 驗(yàn)證所需的keyfile文件
keyFile = /usr/local/mongodb/mongodb-keyfile

啟動mongodb注意:三臺機(jī)器都要啟動

mongod --config ./mongodb.conf // 注意這是在/data/db/目錄下執(zhí)行的

初始化第一個分片的副本集星爪,mongdb本身提供了api去執(zhí)行

  • 進(jìn)入其中一臺mongodb
mongo --port 27017 // 進(jìn)入其中一臺機(jī)器的mongodb
  • 初始化第一個分片副本集
var rsconf = { // 定義初始化的設(shè)置
    _id:'config',
    members: [
        {
            _id:3,
            host:'172.24.148.202:27017'
        },
        {
            _id:2,
            host:'172.24.148.201:27017'
        },
        {
            _id:1,
            host:'172.24.148.200:27017'
        }
    ]
}
rs.initiate(rsconf); // 初始化 當(dāng)看到ok字段的值為1事,就代表成功了
以上就創(chuàng)建好了第一個分片的副本集了粉私,但是目前還不能稱之為分片集群顽腾,只能稱為為副本集(或者復(fù)制集),因?yàn)槲覀冞€缺少配置服務(wù)器副本集和mogos的代理服務(wù)诺核,下面我們和上面同樣的順序(注明:不同的操作目錄)來創(chuàng)建配置服務(wù)器的副本集抄肖。

在/data/db/目錄創(chuàng)建第一個分片副本集的配置文件config.conf

cd /data/config
vim config.conf

把以下配置寫進(jìn)config.conf并保存

port = 27019
dbpath = /data/config/
logpath = /data/config/mongod.log
fork = true
logappend = true
bind_ip = 0.0.0.0
replSet = config // 三臺的配置服務(wù)節(jié)點(diǎn)的副本集名稱必須一樣,我這里用了config
configsvr = true // 注意這里必須注明這個節(jié)點(diǎn)是配置服務(wù)節(jié)點(diǎn)
wiredTigerCacheSizeGB = 1 //我的機(jī)器配置較低窖杀,所以這里設(shè)置小一點(diǎn)
auth = true
keyFile = /usr/local/mongodb/mongodb-keyfile

啟動配置節(jié)點(diǎn) 注意:3臺機(jī)器都要啟動

mongod --config ./config.conf

初始化配置節(jié)點(diǎn)副本集

var rsconf = { // 定義初始化的設(shè)置
    _id:'config',
    members: [
        {
            _id:3,
            host:'172.24.148.202:27017'
        },
        {
            _id:2,
            host:'172.24.148.201:27017'
        },
        {
            _id:1,
            host:'172.24.148.200:27017'
        }
    ]
}
rs.initiate(rsconf); // 初始化 當(dāng)看到ok字段的值為1事漓摩,就代表成功了
以上3臺配置節(jié)點(diǎn)的副本集就搭建好了,目前還差最后一步入客,起一個mongos路由服務(wù)進(jìn)程,

mongos進(jìn)程起一個就可以了(你也可以起兩個或這多個做備用)管毙,在創(chuàng)建了 /data/mongos/目錄的機(jī)器上運(yùn)行mongos路由服務(wù)

把一下配置寫進(jìn) /data/mongos/mongos.conf文件

port = 27009
fork = true
logpath = /data/mongos/mongos.log
bind_ip = 0.0.0.0
# 3臺配置服務(wù)器節(jié)點(diǎn)的地址和端口
configdb = config/172.24.148.201:27019,172.24.148.202:27019,172.24.148.202:27019
keyFile = /usr/local/mongodb/mongodb-keyfile

運(yùn)行mongos服務(wù)

mongos --config ./mongos.conf

進(jìn)入mongos服務(wù)把一開始創(chuàng)建的第一個分片集群加上

mongo --port 27009
sh.addShard("gdtest/172.24.148.201:27017,172.24.148.202:27017,172.24.148.202:27017")
以上所有步驟執(zhí)行成功就成功創(chuàng)建了只有一個分片的mongodb分片集群啦,但是目前應(yīng)用程序連接到mongos路由服務(wù)器并不能使用分片機(jī)制桌硫,還需要在程序里設(shè)置分片配置夭咬,讓分片生效。
##use到admin庫下執(zhí)行铆隘,否則會報(bào)錯
mongos>use admin
switched to db admin
mongos> sh.enableSharding("test") // 激活分片
{
    "ok" : 1,
    "$clusterTime" : {
        "clusterTime" : Timestamp(1555544056, 6258),
        "signature" : {
            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
            "keyId" : NumberLong(0)
        }
    },
    "operationTime" : Timestamp(1555544056, 6258)
}
mongos> sh.shardCollection("test.persons", { _id: 1})  // 我這里是用_id去做片建卓舵,如果用其它字段當(dāng)片建,必須先建索引
{
    "collectionsharded" : "test.persons",
    "collectionUUID" : UUID("da124f00-1ddd-445d-8bb9-d443a4b113ac"),
    "ok" : 1,
    "$clusterTime" : {
        "clusterTime" : Timestamp(1555544056, 6427),
        "signature" : {
            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
            "keyId" : NumberLong(0)
        }
    },
    "operationTime" : Timestamp(1555544056, 6427)
}
至此膀钠,mongodb數(shù)據(jù)分片集群部署并測試完成
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末掏湾,一起剝皮案震驚了整個濱河市裹虫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌忘巧,老刑警劉巖恒界,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異砚嘴,居然都是意外死亡十酣,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進(jìn)店門际长,熙熙樓的掌柜王于貴愁眉苦臉地迎上來耸采,“玉大人,你說我怎么就攤上這事工育∠河睿” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵如绸,是天一觀的道長嘱朽。 經(jīng)常有香客問我,道長怔接,這世上最難降的妖魔是什么搪泳? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮扼脐,結(jié)果婚禮上岸军,老公的妹妹穿的比我還像新娘。我一直安慰自己瓦侮,他們只是感情好艰赞,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著肚吏,像睡著了一般方妖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上罚攀,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天吁断,我揣著相機(jī)與錄音,去河邊找鬼坞生。 笑死,一個胖子當(dāng)著我的面吹牛掷伙,可吹牛的內(nèi)容都是我干的是己。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼任柜,長吁一口氣:“原來是場噩夢啊……” “哼卒废!你這毒婦竟也來了沛厨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤摔认,失蹤者是張志新(化名)和其女友劉穎逆皮,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體参袱,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡电谣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了抹蚀。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片剿牺。...
    茶點(diǎn)故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖环壤,靈堂內(nèi)的尸體忽然破棺而出晒来,到底是詐尸還是另有隱情,我是刑警寧澤郑现,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布湃崩,位于F島的核電站,受9級特大地震影響接箫,放射性物質(zhì)發(fā)生泄漏攒读。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一列牺、第九天 我趴在偏房一處隱蔽的房頂上張望整陌。 院中可真熱鬧,春花似錦瞎领、人聲如沸泌辫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽震放。三九已至,卻和暖如春驼修,著一層夾襖步出監(jiān)牢的瞬間殿遂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工乙各, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留墨礁,地道東北人。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓耳峦,卻偏偏與公主長得像恩静,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評論 2 359

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