Mongodb3.4.4复制集群+分片配置文档
2019獨角獸企業重金招聘Python工程師標準>>>
?
1.?? 復制
1.1. 復制簡介
MongoDB復制是將數據同步在多個服務器的過程。
復制提供了數據的冗余備份,并在多個服務器上存儲數據副本,提高了數據的可用性, 并可以保證數據的安全性。
復制還允許您從硬件故障和服務中斷中恢復數據。
1.2. 什么是復制
l? 保障數據的安全性
l? 數據高可用性 (24*7)
l? 災難恢復
l? 無需停機維護(如備份,重建索引,壓縮)
l? 分布式讀取數據
1.3. MongoDB復制原理
mongodb的復制至少需要兩個節點。其中一個是主節點,負責處理客戶端請求,其余的都是從節點,負責復制主節點上的數據。
mongodb各個節點常見的搭配方式為:一主一從、一主多從。
主節點記錄在其上的所有操作oplog,從節點定期輪詢主節點獲取這些操作,然后對自己的數據副本執行這些操作,從而保證從節點的數據與主節點一致。
1.4. 復制架構
以上結構圖總,客戶端總主節點讀取數據,在客戶端寫入數據到主節點是, 主節點與從節點進行數據交互保障數據的一致性。
1.5. 復制特征
- N 個節點的集群
- 任何節點可作為主節點
- 所有寫入操作都在主節點上
- 自動故障轉移
- 自動恢復
2.?? 分片
2.1. 分片簡介
在Mongodb里面存在另一種集群,就是分片技術,可以滿足MongoDB數據量大量增長的需求。
當MongoDB存儲海量的數據時,一臺機器可能不足以存儲數據,也可能不足以提供可接受的讀寫吞吐量。這時,我們就可以通過在多臺機器上分割數據,使得數據庫系統能存儲和處理更多的數據。
2.2. 為什么使用分片
- 復制所有的寫入操作到主節點
- 延遲的敏感數據會在主節點查詢
- 單個副本集限制在12個節點
- 當請求量巨大時會出現內存不足。
- 本地磁盤不足
- 垂直擴展價格昂貴
2.3. 分片架構
上圖中主要有如下所述三個主要組件:
Shard:
用于存儲實際的數據塊,實際生產環境中一個shard server角色可由幾臺機器組個一個replica set承擔,防止主機單點故障
Config Server:
mongod實例,存儲了整個 ClusterMetadata,其中包括 chunk信息。
Query Routers:
前端路由,客戶端由此接入,且讓整個集群看上去像單一數據庫,前端應用可以透明使用
3.?? 復制+分片配置
3.1. 基礎組件
操作系統: 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. 復制配置
下載軟件并解壓到指定目錄
解壓軟件
tar xvf mongodb-linux-x86_64-rhel62-3.4.4.tgz創建安裝目錄
mkdir –p /data/usr/local/mongodb/復制可執行文件到安裝目錄
cp -a mongodb-linux-x86_64-rhel62-3.4.4/bin /data/usr/local/mongodb/創建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上重復執行
啟動備用實例(192.168.1.9上執行)
nohup mongod -f /etc/mongodb26001.conf &切換到192.168.1.90上
執行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節點(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 &添加分片節點
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,? 復制集配置完畢
2,? 配置服務器不用動
3,? 往路由服務器里添加分片即可
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",
解決辦法:
等待,知道復制集同步完成即可
轉載于:https://my.oschina.net/guanshanyue1990/blog/1456650
總結
以上是生活随笔為你收集整理的Mongodb3.4.4复制集群+分片配置文档的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: git 不用clone整个远程仓库,只把
- 下一篇: TeamCity : 自动触发 Buil