Mongodb3.4.4复制集群+分片配置文档
2019獨角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
?
1.?? 復(fù)制
1.1. 復(fù)制簡介
MongoDB復(fù)制是將數(shù)據(jù)同步在多個服務(wù)器的過程。
復(fù)制提供了數(shù)據(jù)的冗余備份,并在多個服務(wù)器上存儲數(shù)據(jù)副本,提高了數(shù)據(jù)的可用性, 并可以保證數(shù)據(jù)的安全性。
復(fù)制還允許您從硬件故障和服務(wù)中斷中恢復(fù)數(shù)據(jù)。
1.2. 什么是復(fù)制
l? 保障數(shù)據(jù)的安全性
l? 數(shù)據(jù)高可用性 (24*7)
l? 災(zāi)難恢復(fù)
l? 無需停機維護(如備份,重建索引,壓縮)
l? 分布式讀取數(shù)據(jù)
1.3. MongoDB復(fù)制原理
mongodb的復(fù)制至少需要兩個節(jié)點。其中一個是主節(jié)點,負(fù)責(zé)處理客戶端請求,其余的都是從節(jié)點,負(fù)責(zé)復(fù)制主節(jié)點上的數(shù)據(jù)。
mongodb各個節(jié)點常見的搭配方式為:一主一從、一主多從。
主節(jié)點記錄在其上的所有操作oplog,從節(jié)點定期輪詢主節(jié)點獲取這些操作,然后對自己的數(shù)據(jù)副本執(zhí)行這些操作,從而保證從節(jié)點的數(shù)據(jù)與主節(jié)點一致。
1.4. 復(fù)制架構(gòu)
以上結(jié)構(gòu)圖總,客戶端總主節(jié)點讀取數(shù)據(jù),在客戶端寫入數(shù)據(jù)到主節(jié)點是, 主節(jié)點與從節(jié)點進行數(shù)據(jù)交互保障數(shù)據(jù)的一致性。
1.5. 復(fù)制特征
- N 個節(jié)點的集群
- 任何節(jié)點可作為主節(jié)點
- 所有寫入操作都在主節(jié)點上
- 自動故障轉(zhuǎn)移
- 自動恢復(fù)
2.?? 分片
2.1. 分片簡介
在Mongodb里面存在另一種集群,就是分片技術(shù),可以滿足MongoDB數(shù)據(jù)量大量增長的需求。
當(dāng)MongoDB存儲海量的數(shù)據(jù)時,一臺機器可能不足以存儲數(shù)據(jù),也可能不足以提供可接受的讀寫吞吐量。這時,我們就可以通過在多臺機器上分割數(shù)據(jù),使得數(shù)據(jù)庫系統(tǒng)能存儲和處理更多的數(shù)據(jù)。
2.2. 為什么使用分片
- 復(fù)制所有的寫入操作到主節(jié)點
- 延遲的敏感數(shù)據(jù)會在主節(jié)點查詢
- 單個副本集限制在12個節(jié)點
- 當(dāng)請求量巨大時會出現(xiàn)內(nèi)存不足。
- 本地磁盤不足
- 垂直擴展價格昂貴
2.3. 分片架構(gòu)
上圖中主要有如下所述三個主要組件:
Shard:
用于存儲實際的數(shù)據(jù)塊,實際生產(chǎn)環(huán)境中一個shard server角色可由幾臺機器組個一個replica set承擔(dān),防止主機單點故障
Config Server:
mongod實例,存儲了整個 ClusterMetadata,其中包括 chunk信息。
Query Routers:
前端路由,客戶端由此接入,且讓整個集群看上去像單一數(shù)據(jù)庫,前端應(yīng)用可以透明使用
3.?? 復(fù)制+分片配置
3.1. 基礎(chǔ)組件
操作系統(tǒng): CentOS6.5 x64
Mongodb版本: 3.4.4
https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.4.4.tgz
| 集群 | IP | 端口號 |
| rs0 | 192.168.1.90 | 26001 |
| rs0 | 192.168.1.9 | 26001 |
| rs1 | 192.168.1.90 | 26002 |
| rs1 | 192.168.1.9 | 26002 |
| rs2 | 192.168.1.90 | 26003 |
| rs2 | 192.168.1.9 | 26003 |
?
Configure server: 192.168.1.90:26007、192.168.1.9:26007
Router ? ? ? ? ? ? ? ?: 192.168.1.90:26010、192.168.1.9:26010
3.2. 復(fù)制配置
下載軟件并解壓到指定目錄
解壓軟件
tar xvf mongodb-linux-x86_64-rhel62-3.4.4.tgz創(chuàng)建安裝目錄
mkdir –p /data/usr/local/mongodb/復(fù)制可執(zhí)行文件到安裝目錄
cp -a mongodb-linux-x86_64-rhel62-3.4.4/bin /data/usr/local/mongodb/創(chuàng)建mongodb存儲目錄
mkdir –p /data/mongodb26001mkdir –p /data/mongodb26002mkdir –p /data/mongodb26003mkdir –p /data/mongodb26007mkdir –p /data/mongodb26010配置文件配置
cat /etc/mongodb26001.confport=26001logpath=/data/mongodb26001/mongod26001.loglogappend=truepidfilepath=/data/mongodb26001/26001.pid?dbpath=/data/mongodb26001#bind_ip=mongodb1.example.net,127.0.0.1maxConns=500replSet=rs0shardsvr=true#auth=true#keyFile=/data/usr/local/mongodb/mongodbkey.cert#fork=true#cpu=true#noauth=true啟動
nohup mongod -f /etc/mongodb26001.conf &初始化
mongo?192.168.1.90:26001rs.initiate()rs.conf()?
以上配置在192.168.1.9上重復(fù)執(zhí)行
啟動備用實例(192.168.1.9上執(zhí)行)
nohup mongod -f /etc/mongodb26001.conf &切換到192.168.1.90上
執(zhí)行mongo?192.168.1.90:26001
rs.add("192.168.1.9:26001")驗證
rs.status()?
集群rs1、rs2同上
3.3. 分片配置
添加Config Server
cat /etc/mongodb26007.confport=26007logpath=/data/mongodb26007/mongod26007.loglogappend=truepidfilepath=/data/mongodb26007/26007.pid?dbpath=/data/mongodb26007#bind_ip=mongodb7.example.net,127.0.0.1maxConns=500replSet=configReplSetconfigsvr=true#auth=true#keyFile=/data/usr/local/mongodb/mongodbkey.cert#fork=true#cpu=true#noauth=true192.168.1.9上配置文件相同
啟動(兩個都啟動)
nohup mongod -f /etc/mongodb26002.conf &初始化配置
rs.initiate({_id: "configReplSet",configsvr: true,members: [{ _id: 0, host: "192.168.1.90:26007" },{ _id: 1, host: "192.168.1.9:26007" }]})驗證
rs.statau()?添加route節(jié)點(mongos)
[root@oracle ~]# cat /etc/mongodb26010.confport=26010logpath=/data/mongodb26010/mongod26010.loglogappend=truepidfilepath=/data/mongodb26010/26010.pid?#dbpath=/data/mongodb26010#bind_ip=mongodb10.example.net,127.0.0.1maxConns=500configdb=configReplSet/192.168.1.90:26007,192.168.1.9:26007#configdb=configReplSet/mongodb7.example.net:26007,mongodb8.example.net:26008,mongodb9.example.net:26009#chunkSize=1?fork=true#auth=true#keyFile=/data/usr/local/mongodb/mongodbkey.cert#fork=true#cpu=true#noauth=true啟動router
nohup mongos -f /etc/mongodb26010.conf &添加分片節(jié)點
mongo mongodb10.example.net:26010進入mongodb
sh.addShard( "rs0/192.168.1.90:26001,192.168.1.9:26001" )sh.addShard( "rs1/192.168.1.90:26002,192.168.1.9:26002" )sh.addShard( "rs2/192.168.1.90:26003,192.168.1.9:26003" )use testsh.enableSharding('test');sh.shardCollection('test.user',{uid:1})for(i=-100;i<1000;i++){db.user.insert({uid:i,username:'test-'+i});}?驗證分片
sh.status()不明顯;
for(i=10000;i<1000000;i++){db.user.insert({uid:i,username:'test-'+i});}4.?? 添加分片
1,? 復(fù)制集配置完畢
2,? 配置服務(wù)器不用動
3,? 往路由服務(wù)器里添加分片即可
sh.addShard( "rs3/192.168.1.90:26004,192.168.1.91:26004,192.168.1.9:26004" )for(i=1000001;i<2000000;i++){db.user.insert({uid:i,username:'test-'+i});}哈希分片
初始值:
移除分片
use admin;db.adminCommand( { listShards: 1 } )(或者運行 sh.status() 或者 db.printShardingStatus() .)
shards._id 字段列出了每個分片的名字.
db.runCommand({removeShard: "rs0"});5.?? 錯誤處理
5.1. 錯誤一
"infoMessage" : "could not find member to sync from",
解決辦法:
等待,知道復(fù)制集同步完成即可
轉(zhuǎn)載于:https://my.oschina.net/guanshanyue1990/blog/1456650
總結(jié)
以上是生活随笔為你收集整理的Mongodb3.4.4复制集群+分片配置文档的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: git 不用clone整个远程仓库,只把
- 下一篇: TeamCity : 自动触发 Buil