由於公司業務的發展MSSQL已處於瓶頸。因為沒錢買牛逼服務器只能靠軟件來實現最大優化了。原來的系統架構如下圖:
現在准備把讀寫數據庫和只讀數據換成Nosql數據庫。最終選擇了Mongodb. 下面開始了Mongodb的學習。
1. Mongodb下載:https://www.mongodb.org/downloads?_ga=1.159678843.794950141.1434346788
2.具體安裝就不多說了。網上太多介紹的。沒必要浪費鍵盤了。
3.搭建復制集
一個簡單的復制集最少包括三個節點。 1.primary 2. secondary,3.arbiter節點
primary: 存儲數據。
secondary:同步主節點數據
arbiter: 當主節點故障時,arbiter會投票選擇一個secondary充當priary節點。
大致如下:
注意:三個節點其實就是三個Mongod實例。
(1). 創建主節點配置文件內容如下: 文件名:rs0.conf
dbpath = D:\RuntimeServices\MongoDB_Ad\shard00\db //指定數據存儲目錄
logpath = D:\RuntimeServices\MongoDB_Ad\shard00\log\shard00.log //指定數據庫日志目錄
journal = true //是否啟動日志功能
port = 32000 //端口號
nohttpinterface = true //不開啟web監控界面
replSet = rs0 //復制集名稱(同一個復制集名稱相同)
(2). 創建從節點配置文件(rs1.conf),內容如下:
dbpath = D:\RuntimeServices\MongoDB_Ad\shard01\db
logpath = D:\RuntimeServices\MongoDB_Ad\shard01\log\shard01.log
journal = true
port = 32001
nohttpinterface = true
replSet = rs0
(3).創建arbiter節點配置文件(rs2.conf) 內容如下:
dbpath = D:\RuntimeServices\MongoDB_Ad\shard02\db
logpath = D:\RuntimeServices\MongoDB_Ad\shard02\log\shard02.log
journal = true
port = 32002
nohttpinterface = true
replSet = rs0
分別生成三個服務
sc.exe create OpenXLive.MongoDB_Ad.Shard00 binPath= "\"D:\RuntimeServices\MongoDB_Ad\mongodb-3.0.4\bin\mongod.exe\" --service --config=\"D:\RuntimeServices\MongoDB_Ad\mongodb-3.0.4\rs0_0.conf\"" DisplayName= "rs0_Service" start= "auto"
(4).鏈接到主節點執行命令
rs.initiate();
此時復制集只有一個成員。 rs.conf() 進行查看。
按照MongoDB的默認設置。剛才的命令會初始化mongod實例為主節點。 下面把從節點和arbiter加入進去。
rs0:PRIMARY>rs.add("localhost:32001");
rs0:PRIMARY>rs.addArb("localhost:32002");
rs0:PRIMARY>rs.status() 可查看復制集狀態。
至此一個復制集創建完成。 在大數據的時代一個復制集遠遠不夠。雖然解決了災難恢復。但是沒有完成數據分片。一台物理機上的空間是有限的。為了實現數據均衡分布在多台機器上。 下面開始了MongoDB的集群搭建。
在Mongodb中搭建一個集群環境非常簡單。幾分鍾就可以完成一個擁有故障轉移,數據同步,讀寫分離,數據分布式存儲的集群環境。
二、分片集群架構
分片集群主要有mongos路由進程、配置服務器、復制集組成的分片集合組成。 如下圖:
分片集群上一個分片(shard) 就是一個復制集。 當然也可以是一個單個Mongod實例。在集群中一般用復制集。保證一個分片不會故障。如果一個分片出現故障。整個集群就掛了。因為每一個分片上保留數據的一部分。
所有分片的綜合才是所有數據。所以我們應該保證每個分片上數據的完整性和穩定性至關重要。
Mongos和配置服務器是輕量級進程。是不會保存數據的。 配置服務器只保存分片的一些狀態信息。 所以整個讀取集群的過程為: 訪問Mongos-查詢配置服務器,根據配置服務器要求寫入或讀取那些分片服務器進行讀取數據。
搭建集群步驟:
1. 配置復制集rs0並啟動。參考上面介紹
2.配置復制集rs1並啟動。
3.配置cofingure服務器。
配置服務器也是一個Mongod實例。
(1).configure服務器1 的配置文件 cfgserver_0.conf 內容如下:
dbpath="E:\Mongodb\config\data\db_config0"
logpath = "E:\Mongodb\config\logs\db_config0.log"
journal = true
port = 30002
configsvr=true
啟動服務。
(2).configure服務器2的配置文件參考上面。 啟動服務
(3).configure服務器3的配置文件參考上面。 啟動服務
4.配置Mongos路由服務器
配置文件cfg_mongos.conf 內容如下:
logpath=""
port = 30000
configdb = localhost:30001,localhost:30002,localhost:30003
啟動服務器。
5. 添加各個分片到集群:
打開客戶端連接到Mongos服務器。
添加第一個分片的主從節點: mongos>sh.addShard("localhost:30004,localhost:30005")
添加第二個分片的主從節點: mongos>sh.addShard("localhost:30007,localhost:30008")
6.最后通過sh.status()檢查是否正確(下圖我實際添加了三個分片)
支持分片集群搭建完成。
更多內容:
2.用戶權限怎么添加?
3.如何監控集群環境是否工作正常。
4.如何做到數據分布式存儲
5.片鍵如何選擇?
6.索引建立
7.curd基本操作。
8.讀寫分離如何控制。
9.c# php java js 等如何使用Mongod集群的?
針對上面問題。接下來會慢慢更新。