概述
MongoDB的環境主要包括StandAlone,Replication和Sharding。 StandAlone:單機環境,一般開發測試的時候用。 Replication:主從結構,一個Primary,多個Secondary,可能會有Arbitry。
Primary掛掉之後,會選舉出一個Secondary作為Primary,與zookeeper類似。 Arbitry上面不存資料,只是為了湊數。選舉演算法要求節點數必須是奇數個,如果Primary+Secondary不是奇數個,就要用Arbitry湊數。 寫資料只能在Primary,讀資料預設也在Primary,可以配置成從Secondary讀,可以選最近的節點。 資料在Primary上寫成功之後,會將操作記錄在oplog中,Secondary將oplog拷貝過去,然後照著操作一遍,就有資料了。 Primary和Secondary上面的資料保證最終一致性,可以為寫操作配置write concern,有幾個層級:在Primary上寫完就認為寫成功;寫到oplog後認為寫成功;寫到一個/多個/某個/某幾個Secondary之後認為寫成功,等等。 Sharding:share nothing的結構,每台機器只存一部分資料。mongod伺服器存資料,mongos伺服器負責路由讀寫請求,中繼資料存在config資料庫中。
因為資料量和機器量的原因,項目最終用了一個Primary,一個Secondary,一個Arbitry。我自己的開發環境是Ubuntu,測試環境是CentOS。安裝的是64位的MongoDB。 下載、解壓 下載mongodb-linux-x86_64-rhel62-3.4.10.tgz.gz 解壓:
#解壓命令tar -xzvf mongodb-linux-x86_64-rhel62-3.4.10.tgz.gz
建立並編輯設定檔 進行mongodb的根據目錄 建立mongod.conf的設定檔,內容如下:
#mongod.conf路徑為:mongodb解壓目錄/mongod.confnet: #bindIp: 127.0.0.1 port: 27017systemLog: destination: file path: /app/mongodata/log/mongo.log logAppend: truestorage: dbPath: /app/mongodata/dataprocessManagement: fork: true#security:# authorization: enabledreplication: oplogSizeMB: 1024 replSetName: rs-test
另外三台也按些配置,然後分別啟動
#啟動命令mongod -f mongod.conf
初始化叢集
# 1、選擇一台mongodb的服務,通過bin/mongo 命令進行控制台bin/mongo# 2、切換到 admin庫use admin# 3、定義初始化配置config={"_id" : "rs-test", "members" : [ { "_id" : 0, "host" : "mongodb-node1:27017" }, { "_id" : 1, "host" : "mongodb-node2:27017" }, { "_id" : 2, "host" : "mongodb-node3:27017" } ]}# 4、進行初始化rs.initiate(config);