1.Replica Set(首選)【簡稱:副本集,集羣當中包含了多份數據,保證主節點掛掉了,備節點能繼續提供數據服務,提供的前提就是數據須要和主節點一致。】
2.Sharding【只有真的是大數據,Sharding才能顯現威力,畢竟備節點同步數據是須要時間的;Sharding能夠將多片數據集中到路由節點上進行一些對比,而後將數據返回給客戶端,可是效率仍是比較低的說。】
3.Master-Slaver【最簡單的集羣搭建,不過準確說也不能算是集羣,只能說是主備。而且官方已經不推薦這種方式】
1.Replica Set叫作副本集,集羣當中包含了多份數據,保證主節點掛掉了,備節點能繼續提供數據服務,提供的前提就是數據須要和主節點一致。
2.Mongodb(M)表示主節點,Mongodb(S)表示備節點,Mongodb(A)表示仲裁節點。主備節點存儲數據,仲裁節點不存儲數據。客戶端同時鏈接主節點與備節點,不鏈接仲裁節點。
3.默認設置下,主節點提供全部增刪查改服務,備節點不提供任何服務。可是能夠經過設置使備節點提供查詢服務,這樣就能夠減小主節點的壓力,當客戶端進行數據查詢時,請求自動轉到備節點上。這個設置叫作Read Preference Modes,同時Java客戶端提供了簡單的配置方式,能夠沒必要直接對數據庫進行操做。
4.仲裁節點是一種特殊的節點,它自己並不存儲數據,主要的做用是決定哪個備節點在主節點掛掉以後提高爲主節點,因此客戶端不須要鏈接此節點。這裏雖然只有一個備節點,可是仍然須要一個仲裁節點來提高備節點級別。
tar -xf mongodb-linux-x86_64-rhel70-4.2.9.tgz
/bin/mv mongodb-linux-x86_64-rhel70-4.2.9 /usr/local/mongodb
ln -svf /usr/local/mongodb/bin/* /usr/local/bin/
mkdir -p /data/mongodb_test/master/data
mkdir -p /data/mongodb_test/slaver/data
mkdir -p /data/mongodb_test/arbiter/data
#master.conf
dbpath=/data/mongodb_test/master/data
logpath=/data/mongodb_test/master/master.log
pidfilepath=/data/mongodb_test/master/master.pid
directoryperdb=true
logappend=true
replSet=testrs
bind_ip=0.0.0.0
port=27517
oplogSize=10000
fork=true
#slaver.conf
dbpath=/data/mongodb_test/slaver/data
logpath=/data/mongodb_test/slaver/slaver.log
pidfilepath=/data/mongodb_test/slaver/slaver.pid
directoryperdb=true
logappend=true
replSet=testrs
bind_ip=0.0.0.0
port=27617
oplogSize=10000
fork=true
#arbiter.conf
dbpath=/data/mongodb_test/arbiter/data
logpath=/data/mongodb_test/arbiter/arbiter.log
pidfilepath=/data/mongodb_test/arbiter/arbiter.pid
directoryperdb=true
logappend=true
replSet=testrs
bind_ip=0.0.0.0
port=27577
oplogSize=10000
fork=true
/usr/local/mongodb/bin/mongod -f /data/mongodb_test/master/master.conf
/usr/local/mongodb/bin/mongod -f /data/mongodb_test/slaver/slaver.conf
/usr/local/mongodb/bin/mongod -f /data/mongodb_test/arbiter/arbiter.conf
登陸master節點:mongo 127.0.0.1:27517
> use admin
> cfg={ _id:"testrs", members:[ {_id:0,host:'10.21.210.78:27517',priority:10}, {_id:1,host:'10.21.210.78:27617',priority:1},
{_id:2,host:'10.21.210.78:27717',arbiterOnly:true}] };
> rs.initiate(cfg) # 使cfg配置生效
# priority:優先級越大,則優先分配成主節點
# 對於仲裁節點,必需要有arbiterOnly:true,否則主備模式就不能生效
登陸從節點:mongo 127.0.0.1:27617
> db.getMongo().setSlaveOk() # 當要去從節點查詢數據時,直接插會報錯,須要設置從節點爲只讀.注意從節點的前綴如今是SECONDARY。
查看集羣狀態:> rs.status(),重點看這些字段linux
登陸master節點:mongo 127.0.0.1:27517
> use admin
> db.createUser({user: "admin",pwd: "123456",roles:[{role:"userAdminAnyDatabase",db:"admin"},"readWriteAnyDatabase"]});
> db.grantRolesToUser("admin", ["clusterAdmin"]) # 須要給admin賦予集羣權限,不然在後面執行rs.status()會出現以下報錯:
"errmsg" : "not authorized on admin to execute command { replSetGetStatus: 1.0,.....
> db.auth("admin", "123456") # 登陸數據庫
> db.system.users.find() # 查看用戶
mongo 127.0.0.1:27517 -u admin -p 123456 --authenticationDatabase admin # 使用命令驗證登陸
openssl rand -base64 21 > /data/mongodb_test/mongodb_key
chmod 600 mongodb_key
cat mongodb_key
HnYdGbfazRVLdIl2xIuaDmasYXT0
# 注意:上面的數字 21,最好是 3 的倍數,不然生成的字符串可能含有非法字符,認證失敗。
# 增長下面兩行
......
auth=true
keyFile =/data/mongodb_test/mongodb_key
# 關閉
kill $(pgrep -f "/usr/local/mongodb/bin/mongod -f /data/mongodb_test/slaver/slaver.conf")
kill $(pgrep -f "/usr/local/mongodb/bin/mongod -f /data/mongodb_test/arbiter/arbiter.conf")
kill $(pgrep -f "/usr/local/mongodb/bin/mongod -f /data/mongodb_test/master/master.conf")
# 啓動
/usr/local/mongodb/bin/mongod -f /data/mongodb_test/master/master.conf
/usr/local/mongodb/bin/mongod -f /data/mongodb_test/slaver/slaver.conf
/usr/local/mongodb/bin/mongod -f /data/mongodb_test/arbiter/arbiter.conf
> rs.status() 查看主節點,27517爲主節點,27617爲從節點mongodb
"_id" : 1,
"name" : "10.21.210.78:27617",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"_id" : 1,
"name" : "10.21.210.78:27617",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
模擬故障,kill主節點數據庫
登陸其中正常的節點查看狀態:27517爲非健康狀態,27617成爲新的主節點網絡
"_id" : 0,
"name" : "10.21.210.78:27517",
"health" : 0,
"state" : 8,
"stateStr" : "(not reachable/healthy)",
"uptime" : 0,
"_id" : 1,
"name" : "10.21.210.78:27617",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 2116,
恢復故障節點後,查看集羣狀態:27517成爲主節點,27617爲從節點app
/usr/local/mongodb/bin/mongod -f /data/mongodb_test/slaver/slaver.conf測試
"_id" : 0,
"name" : "10.21.210.78:27517",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 18,
"_id" : 1,
"name" : "10.21.210.78:27617",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 15,
mongodb://username:password@host1:port1,host2:port2[,...,hostN:portN]/database?options
# options是鏈接配置中的可選項,replicaSet是其中的一個子項。
示例能夠寫成:mongodb://admin:123456@10.21.210.78:27517,10.21.210.78:27617/DbName?replicaSet=testrs"
注意:由於仲裁節點沒有數據副本,仲裁節點也不可能會被選舉爲主節點,因此鏈接字符串信息中不要包含仲裁節點的信息。大數據