複制集(Replica Sets),是一個基于主/從複制機制的複制功能,進行同一資料的異步同步,進而使多台機器擁有同一資料的都多個副本,由于有自動故障轉移和恢複特性,當主庫當機時不需要使用者幹預的情況下自動切換到其他備份伺服器上做主庫,一個叢集最多可以支援7個伺服器,并且任意節點都可以是主節點。所有的寫操作都被分發到主節點,而讀操作可以在任何節點上進行,實作讀寫分離,提高負載。
資源有限測試一個VM開3個執行個體:
環境:centos7.0
192.168.1.21:20011 P
192.168.1.21:20012 S
192.168.1.21:20013 A
mongodb verson:3.2
搭建過程:
1、下載下傳包、并解壓
2、添加相關的目錄檔案
[root@localhost mongodb27017]# ll
總用量 8
drwxr-xr-x. 2 root root 4096 12月 17 00:59 bin
drwxr-xr-x. 2 root root 30 12月 17 10:47 conf
drwxr-xr-x 4 root root 4096 12月 17 11:19 data
drwxr-xr-x. 2 root root 20 12月 17 01:13 key
drwxr-xr-x. 2 root root 23 12月 17 10:20 logs
#3個執行個體配置一樣
3、解壓包下bin目錄下的所有檔案到cp到目前的建立的bin目錄下
4、3個執行個體的配置檔案一緻
[root@localhost conf]# cat mongodb27017.conf
port=20011#每個執行個體端口,根據實際來配置
dbpath=/export/mongodb27017/data #資料目錄
logpath=/export/mongodb27017/logs/mongod.log #日志目錄
fork=true
logappend=true
#keyFile=/export/mongodb27017/key/mongodb#後面介紹
nohttpinterface=true
replSet=mongodb ##複制集的名字,
5、啟動3個執行個體:
/export/mongodb27018/bin/mongod -f /export/mongodb27018/conf/mongodb27018.conf
/export/mongodb27019/bin/mongod -f /export/mongodb27019/conf/mongodb27019.conf
/export/mongodb27017/bin/mongod -f /export/mongodb27017/conf/mongodb27017.conf
#需要把解壓包bin目錄下檔案分别拷貝到這3個啟動目錄下,或者一個作為basedir也可以,其他分開
6、配置複制集
/export/mongodb27017/bin/mongo --port 20011#根據自己實際的定義,進入資料庫
1、配置成員的關系:
config
= {_id:"mongodb",
members:[{_id:0,host:"192.168.1.21:20011", priority : 3}]}
(給了優先級為3,mongodb為複制集的名)
2、初始化:
>rs.initiate(config);
3、添加備節點、仲裁節點
rs.add("192.168.1.21:20012") 添加備節點
rs.addArb("192.168.1.21:20013") 添加仲裁節點
rs.status()#檢視狀态
rs.conf()#檢視副本內建員及其優先級(看好成員的順序,優先級從1-100,越大的優先級越高)
config=rs.conf() 進行優先級設定
config.members[0].priority = 3 設定主節點優先級為3
config.members[1].priority = 2 設定備節點優先級為2
config.members[2].priority = 1 設定仲裁節點優先級為1
rs.remove("ip:port") 移除已經存在的成員
rs.reconfig(config) 儲存配置,生效
7、設定備節點為slave
mongodb:SECONDARY> show dbs
2016-12-17T12:26:22.621+0800 E QUERY [thread1] Error: listDatabases failed:{ "ok" : 0, "errmsg" : "not master and slaveOk=false", "code" : 13435 } :
登陸到20012執行個體上執行:rs.slaveOk()
8、測試主節點當機是否能夠切換
總結:
mongoDB的主從模式其實就是一個單副本的應用,沒有很好的擴充性和容錯性。而副本集具有多個副本保證了容錯性,就算一個副本挂掉了還有很多副本存在,并且解決了上面第一個問題“主節點挂掉了,整個叢集内會自動切換”,如果節點挂了,它會重新選舉新的主節點。對于普通的業務能夠滿足,但高并發的話,複制集是無法滿足,就需要shard的,實作叢集高可用,可以借助LVS或者其他。