標籤:
由於公司業務的發展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()檢查是否正確(我實際添加了三個分區)
支援分區叢集搭建完成。
更多內容:
1.叢集完成怎樣去訪問?
2.使用者權限怎麼添加?
3.如果監控叢集環境是否工作正常。
4.如果做到資料分布式儲存
5.片鍵如果選擇?
6.索引建立
7.curd基本操作。
8.讀寫分離如何控制。
9.c# php java js 等如何使用Mongod叢集的?
針對上面問題。接下來會慢慢更新。
MongoDB windows基礎配置